Socket
Socket
Sign inDemoInstall

@aws-cdk/cdk

Package Overview
Dependencies
Maintainers
4
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/cdk - npm Package Compare versions

Comparing version 0.13.0 to 0.14.0

3

lib/app.js

@@ -43,2 +43,3 @@ "use strict";

const result = {
version: cxapi.PROTO_RESPONSE_VERSION,
stacks: this.synthesizeStacks(Object.keys(this.stacks)),

@@ -185,2 +186,2 @@ runtime: this.collectRuntimeInformation()

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLHlCQUEwQjtBQUMxQiw2QkFBOEI7QUFDOUIsa0RBQStDO0FBQy9DLGdEQUE0RTtBQUM1RSwwQ0FBd0M7QUFFeEM7O0dBRUc7QUFDSCxNQUFhLEdBQUksU0FBUSxnQkFBSTtJQUMzQjs7O09BR0c7SUFDSDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFZLE1BQU07UUFDaEIsTUFBTSxHQUFHLEdBQThCLEVBQUcsQ0FBQztRQUMzQyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakMsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLGFBQUssQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxDQUFDLFFBQVEsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO2FBQzdFO1lBRUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFjLENBQUM7U0FDaEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUc7UUFDUixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEtBQUssQ0FBQyxVQUFVLG9CQUFvQixDQUFDLENBQUM7WUFDL0YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQztZQUMxRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUE2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KTtcbmltcG9ydCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi9zdGFjayc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIE1ldGFkYXRhRW50cnksIFBBVEhfU0VQLCBSb290IH0gZnJvbSAnLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnLi9jb3JlL3Rva2Vucyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENESyBwcm9ncmFtLlxuICovXG5leHBvcnQgY2xhc3MgQXBwIGV4dGVuZHMgUm9vdCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhIENESyBhcHBsaWNhdGlvbi5cbiAgICogQHBhcmFtIHJlcXVlc3QgT3B0aW9uYWwgdG9vbGtpdCByZXF1ZXN0IChlLmcuIGZvciB0ZXN0cylcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2FkQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3RhY2tzKCkge1xuICAgIGNvbnN0IG91dDogeyBbbmFtZTogc3RyaW5nXTogU3RhY2sgfSA9IHsgfTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgU3RhY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNoaWxkICR7Y2hpbGQudG9TdHJpbmcoKX0gb2YgUHJvZ3JhbSBtdXN0IGJlIGEgU3RhY2tgKTtcbiAgICAgIH1cblxuICAgICAgb3V0W2NoaWxkLmlkXSA9IGNoaWxkIGFzIFN0YWNrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHByb2dyYW0uIE91dHB1dCBpcyB3cml0dGVuIHRvIG91dHB1dCBkaXJlY3RvcnkgYXMgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIHJ1bigpOiB2b2lkIHtcbiAgICBjb25zdCBvdXRkaXIgPSBwcm9jZXNzLmVudltjeGFwaS5PVVRESVJfRU5WXTtcbiAgICBpZiAoIW91dGRpcikge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYEVSUk9SOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXCIke2N4YXBpLk9VVERJUl9FTlZ9XCIgaXMgbm90IGRlZmluZWRcXG5gKTtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKCdBV1MgQ0RLIFRvb2xraXQgKD49IDAuMTEuMCkgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIHByb2dyYW0uXFxuJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBjeGFwaS5TeW50aGVzaXplUmVzcG9uc2UgPSB7XG4gICAgICBzdGFja3M6IHRoaXMuc3ludGhlc2l6ZVN0YWNrcyhPYmplY3Qua2V5cyh0aGlzLnN0YWNrcykpLFxuICAgICAgcnVudGltZTogdGhpcy5jb2xsZWN0UnVudGltZUluZm9ybWF0aW9uKClcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0ZmlsZSA9IHBhdGguam9pbihvdXRkaXIsIGN4YXBpLk9VVEZJTEVfTkFNRSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhvdXRmaWxlLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIHVuZGVmaW5lZCwgMikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemUgYW5kIHZhbGlkYXRlIGEgc2luZ2xlIHN0YWNrXG4gICAqIEBwYXJhbSBzdGFja05hbWUgVGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIHN5bnRoZXNpemVcbiAgICovXG4gIHB1YmxpYyBzeW50aGVzaXplU3RhY2soc3RhY2tOYW1lOiBzdHJpbmcpOiBjeGFwaS5TeW50aGVzaXplZFN0YWNrIHtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0U3RhY2soc3RhY2tOYW1lKTtcblxuICAgIC8vIGZpcnN0LCB2YWxpZGF0ZSB0aGlzIHN0YWNrIGFuZCBzdG9wIGlmIHRoZXJlIGFyZSBlcnJvcnMuXG4gICAgY29uc3QgZXJyb3JzID0gc3RhY2sudmFsaWRhdGVUcmVlKCk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlcnJvckxpc3QgPSBlcnJvcnMubWFwKGUgPT4gYFske2Uuc291cmNlLnBhdGh9XSAke2UubWVzc2FnZX1gKS5qb2luKCdcXG4gICcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGFjayB2YWxpZGF0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxcbiAgJHtlcnJvckxpc3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudCA9IHN0YWNrLmVudi5hY2NvdW50IHx8ICd1bmtub3duLWFjY291bnQnO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLmVudi5yZWdpb24gfHwgJ3Vua25vd24tcmVnaW9uJztcblxuICAgIGNvbnN0IGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCA9IHtcbiAgICAgIG5hbWU6IGAke2FjY291bnR9LyR7cmVnaW9ufWAsXG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uXG4gICAgfTtcblxuICAgIGNvbnN0IG1pc3NpbmcgPSBPYmplY3Qua2V5cyhzdGFjay5taXNzaW5nQ29udGV4dCkubGVuZ3RoID8gc3RhY2subWlzc2luZ0NvbnRleHQgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHN0YWNrLmlkLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBtaXNzaW5nLFxuICAgICAgdGVtcGxhdGU6IHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbGxlY3RNZXRhZGF0YShzdGFjaylcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemVzIG11bHRpcGxlIHN0YWNrc1xuICAgKi9cbiAgcHVibGljIHN5bnRoZXNpemVTdGFja3Moc3RhY2tOYW1lczogc3RyaW5nW10pOiBjeGFwaS5TeW50aGVzaXplZFN0YWNrW10ge1xuICAgIGNvbnN0IHJldDogY3hhcGkuU3ludGhlc2l6ZWRTdGFja1tdID0gW107XG4gICAgZm9yIChjb25zdCBzdGFja05hbWUgb2Ygc3RhY2tOYW1lcykge1xuICAgICAgcmV0LnB1c2godGhpcy5zeW50aGVzaXplU3RhY2soc3RhY2tOYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBtZXRhZGF0YSBmb3IgYWxsIGNvbnN0cnVjdHMgaW4gdGhlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGNvbGxlY3RNZXRhZGF0YShzdGFjazogU3RhY2spIHtcbiAgICBjb25zdCBvdXRwdXQ6IHsgW2lkOiBzdHJpbmddOiBNZXRhZGF0YUVudHJ5W10gfSA9IHsgfTtcblxuICAgIHZpc2l0KHN0YWNrKTtcblxuICAgIC8vIGFkZCBhcHAtbGV2ZWwgbWV0YWRhdGEgdW5kZXIgXCIuXCJcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICBvdXRwdXRbUEFUSF9TRVBdID0gdGhpcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuXG4gICAgZnVuY3Rpb24gdmlzaXQobm9kZTogQ29uc3RydWN0KSB7XG4gICAgICBpZiAobm9kZS5tZXRhZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIE1ha2UgdGhlIHBhdGggYWJzb2x1dGVcbiAgICAgICAgb3V0cHV0W1BBVEhfU0VQICsgbm9kZS5wYXRoXSA9IG5vZGUubWV0YWRhdGEubWFwKG1kID0+IHJlc29sdmUobWQpIGFzIE1ldGFkYXRhRW50cnkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdmlzaXQoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFJ1bnRpbWVJbmZvcm1hdGlvbigpOiBjeGFwaS5BcHBSdW50aW1lIHtcbiAgICBjb25zdCBsaWJyYXJpZXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIE9iamVjdC5rZXlzKHJlcXVpcmUuY2FjaGUpKSB7XG4gICAgICBjb25zdCBwa2cgPSBmaW5kTnBtUGFja2FnZShmaWxlTmFtZSk7XG4gICAgICBpZiAocGtnICYmICFwa2cucHJpdmF0ZSkge1xuICAgICAgICBsaWJyYXJpZXNbcGtnLm5hbWVdID0gcGtnLnZlcnNpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbGlicmFyaWVzIH07XG4gIH1cblxuICBwcml2YXRlIGdldFN0YWNrKHN0YWNrbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHN0YWNrbmFtZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YWNrIG5hbWUgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLnN0YWNrc1tzdGFja25hbWVdO1xuICAgIGlmICghc3RhY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgc3RhY2sgJHtzdGFja25hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbnRleHQoKSB7XG4gICAgY29uc3QgY29udGV4dEpzb24gPSBwcm9jZXNzLmVudltjeGFwaS5DT05URVhUX0VOVl07XG4gICAgY29uc3QgY29udGV4dCA9ICFjb250ZXh0SnNvbiA/IHsgfSA6IEpTT04ucGFyc2UoY29udGV4dEpzb24pO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbnRleHQpKSB7XG4gICAgICB0aGlzLnNldENvbnRleHQoa2V5LCBjb250ZXh0W2tleV0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggTlBNIG1vZHVsZSBhIGdpdmVuIGxvYWRlZCBqYXZhc2NyaXB0IGZpbGUgaXMgZnJvbS5cbiAqXG4gKiBUaGUgb25seSBpbmZyb21hdGlvbiB0aGF0IGlzIGF2YWlsYWJsZSBsb2NhbGx5IGlzIGEgbGlzdCBvZiBKYXZhc2NyaXB0IGZpbGVzLFxuICogYW5kIGV2ZXJ5IHNvdXJjZSBmaWxlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNlYXJjaCBwYXRoIHRvIHJlc29sdmUgdGhlIGZ1cnRoZXJcbiAqIGBgcmVxdWlyZWBgIGNhbGxzIG1hZGUgZnJvbSB0aGVyZSwgd2hpY2ggaW5jbHVkZXMgaXRzIG93biBkaXJlY3Rvcnkgb24gZGlzayxcbiAqIGFuZCBwYXJlbnQgZGlyZWN0b3JpZXMgLSBmb3IgZXhhbXBsZTpcbiAqXG4gKiBbICcuLi5yZXBvL3BhY2thZ2VzL2F3cy1jZGstcmVzb3VyY2VzL2xpYi9jZm4vbm9kZV9tb2R1bGVzJyxcbiAqICAgJy4uLnJlcG8vcGFja2FnZXMvYXdzLWNkay1yZXNvdXJjZXMvbGliL25vZGVfbW9kdWxlcycsXG4gKiAgICcuLi5yZXBvL3BhY2thZ2VzL2F3cy1jZGstcmVzb3VyY2VzL25vZGVfbW9kdWxlcycsXG4gKiAgICcuLi5yZXBvL3BhY2thZ2VzL25vZGVfbW9kdWxlcycsXG4gKiAgIC8vIGV0Yy4uLlxuICogXVxuICpcbiAqIFdlIGFyZSBsb29raW5nIGZvciBgYHBhY2thZ2UuanNvbmBgIHRoYXQgaXMgYW55d2hlcmUgaW4gdGhlIHRyZWUsIGV4Y2VwdCBpdCdzXG4gKiBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwgbm90IGluIHRoZSBgYG5vZGVfbW9kdWxlc2BgIGRpcmVjdG9yeS4gRm9yIHRoaXNcbiAqIHJlYXNvbiwgd2Ugc3RyaXAgdGhlIGBgL25vZGVfbW9kdWxlc2BgIHN1ZmZpeCBvZmYgZWFjaCBwYXRoIGFuZCB1c2UgcmVndWxhclxuICogbW9kdWxlIHJlc29sdXRpb24gdG8gb2J0YWluIGEgcmVmZXJlbmNlIHRvIGBgcGFja2FnZS5qc29uYGAuXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIGEgamF2YXNjcmlwdCBmaWxlIG5hbWUuXG4gKiBAcmV0dXJucyB0aGUgTlBNIG1vZHVsZSBpbmZvcyAoYWthIGBgcGFja2FnZS5qc29uYGAgY29udGVudHMpLCBvclxuICogICAgICBgYHVuZGVmaW5lZGBgIGlmIHRoZSBsb29rdXAgd2FzIHVuc3VjY2Vzc2Z1bC5cbiAqL1xuZnVuY3Rpb24gZmluZE5wbVBhY2thZ2UoZmlsZU5hbWU6IHN0cmluZyk6IHsgbmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHByaXZhdGU/OiBib29sZWFuIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBtb2QgPSByZXF1aXJlLmNhY2hlW2ZpbGVOYW1lXTtcbiAgY29uc3QgcGF0aHMgPSBtb2QucGF0aHMubWFwKHN0cmlwTm9kZU1vZHVsZXMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3BhY2thZ2UuanNvbicsIHsgcGF0aHMgfSk7XG4gICAgcmV0dXJuIHJlcXVpcmUocGFja2FnZVBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcyBhIHBhdGguXG4gICAqIEByZXR1cm5zIGBgc2BgIHdpdGggYW55IHRlcm1pbmF0aW5nIGBgL25vZGVfbW9kdWxlc2BgXG4gICAqICAgICAgKG9yIGBgXFxcXG5vZGVfbW9kdWxlc2BgKSBzdHJpcHBlZCBvZmYuKVxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaXBOb2RlTW9kdWxlcyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChzLmVuZHNXaXRoKCcvbm9kZV9tb2R1bGVzJykgfHwgcy5lbmRzV2l0aCgnXFxcXG5vZGVfbW9kdWxlcycpKSB7XG4gICAgICAvLyAvbm9kZV9tb2R1bGVzIGlzIDEzIGNoYXJhY3RlcnNcbiAgICAgIHJldHVybiBzLnN1YnN0cigwLCBzLmxlbmd0aCAtIDEzKTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLHlCQUEwQjtBQUMxQiw2QkFBOEI7QUFDOUIsa0RBQStDO0FBQy9DLGdEQUE0RTtBQUM1RSwwQ0FBd0M7QUFFeEM7O0dBRUc7QUFDSCxNQUFhLEdBQUksU0FBUSxnQkFBSTtJQUMzQjs7O09BR0c7SUFDSDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFZLE1BQU07UUFDaEIsTUFBTSxHQUFHLEdBQThCLEVBQUcsQ0FBQztRQUMzQyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakMsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLGFBQUssQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxDQUFDLFFBQVEsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO2FBQzdFO1lBRUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFjLENBQUM7U0FDaEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUc7UUFDUixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEtBQUssQ0FBQyxVQUFVLG9CQUFvQixDQUFDLENBQUM7WUFDL0YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQztZQUMxRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUE2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Y3hhcGkgPSByZXF1aXJlKCdAYXdzLWNkay9jeC1hcGknKTtcbmltcG9ydCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi9zdGFjayc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIE1ldGFkYXRhRW50cnksIFBBVEhfU0VQLCBSb290IH0gZnJvbSAnLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnLi9jb3JlL3Rva2Vucyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENESyBwcm9ncmFtLlxuICovXG5leHBvcnQgY2xhc3MgQXBwIGV4dGVuZHMgUm9vdCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhIENESyBhcHBsaWNhdGlvbi5cbiAgICogQHBhcmFtIHJlcXVlc3QgT3B0aW9uYWwgdG9vbGtpdCByZXF1ZXN0IChlLmcuIGZvciB0ZXN0cylcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2FkQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3RhY2tzKCkge1xuICAgIGNvbnN0IG91dDogeyBbbmFtZTogc3RyaW5nXTogU3RhY2sgfSA9IHsgfTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgU3RhY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNoaWxkICR7Y2hpbGQudG9TdHJpbmcoKX0gb2YgUHJvZ3JhbSBtdXN0IGJlIGEgU3RhY2tgKTtcbiAgICAgIH1cblxuICAgICAgb3V0W2NoaWxkLmlkXSA9IGNoaWxkIGFzIFN0YWNrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHByb2dyYW0uIE91dHB1dCBpcyB3cml0dGVuIHRvIG91dHB1dCBkaXJlY3RvcnkgYXMgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIHJ1bigpOiB2b2lkIHtcbiAgICBjb25zdCBvdXRkaXIgPSBwcm9jZXNzLmVudltjeGFwaS5PVVRESVJfRU5WXTtcbiAgICBpZiAoIW91dGRpcikge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYEVSUk9SOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXCIke2N4YXBpLk9VVERJUl9FTlZ9XCIgaXMgbm90IGRlZmluZWRcXG5gKTtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKCdBV1MgQ0RLIFRvb2xraXQgKD49IDAuMTEuMCkgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIHByb2dyYW0uXFxuJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBjeGFwaS5TeW50aGVzaXplUmVzcG9uc2UgPSB7XG4gICAgICB2ZXJzaW9uOiBjeGFwaS5QUk9UT19SRVNQT05TRV9WRVJTSU9OLFxuICAgICAgc3RhY2tzOiB0aGlzLnN5bnRoZXNpemVTdGFja3MoT2JqZWN0LmtleXModGhpcy5zdGFja3MpKSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29sbGVjdFJ1bnRpbWVJbmZvcm1hdGlvbigpXG4gICAgfTtcblxuICAgIGNvbnN0IG91dGZpbGUgPSBwYXRoLmpvaW4ob3V0ZGlyLCBjeGFwaS5PVVRGSUxFX05BTUUpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMob3V0ZmlsZSwgSlNPTi5zdHJpbmdpZnkocmVzdWx0LCB1bmRlZmluZWQsIDIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplIGFuZCB2YWxpZGF0ZSBhIHNpbmdsZSBzdGFja1xuICAgKiBAcGFyYW0gc3RhY2tOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byBzeW50aGVzaXplXG4gICAqL1xuICBwdWJsaWMgc3ludGhlc2l6ZVN0YWNrKHN0YWNrTmFtZTogc3RyaW5nKTogY3hhcGkuU3ludGhlc2l6ZWRTdGFjayB7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmdldFN0YWNrKHN0YWNrTmFtZSk7XG5cbiAgICAvLyBmaXJzdCwgdmFsaWRhdGUgdGhpcyBzdGFjayBhbmQgc3RvcCBpZiB0aGVyZSBhcmUgZXJyb3JzLlxuICAgIGNvbnN0IGVycm9ycyA9IHN0YWNrLnZhbGlkYXRlVHJlZSgpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXJyb3JMaXN0ID0gZXJyb3JzLm1hcChlID0+IGBbJHtlLnNvdXJjZS5wYXRofV0gJHtlLm1lc3NhZ2V9YCkuam9pbignXFxuICAnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgdmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JMaXN0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnQgPSBzdGFjay5lbnYuYWNjb3VudCB8fCAndW5rbm93bi1hY2NvdW50JztcbiAgICBjb25zdCByZWdpb24gPSBzdGFjay5lbnYucmVnaW9uIHx8ICd1bmtub3duLXJlZ2lvbic7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQgPSB7XG4gICAgICBuYW1lOiBgJHthY2NvdW50fS8ke3JlZ2lvbn1gLFxuICAgICAgYWNjb3VudCxcbiAgICAgIHJlZ2lvblxuICAgIH07XG5cbiAgICBjb25zdCBtaXNzaW5nID0gT2JqZWN0LmtleXMoc3RhY2subWlzc2luZ0NvbnRleHQpLmxlbmd0aCA/IHN0YWNrLm1pc3NpbmdDb250ZXh0IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBzdGFjay5pZCxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWlzc2luZyxcbiAgICAgIHRlbXBsYXRlOiBzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksXG4gICAgICBtZXRhZGF0YTogdGhpcy5jb2xsZWN0TWV0YWRhdGEoc3RhY2spXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplcyBtdWx0aXBsZSBzdGFja3NcbiAgICovXG4gIHB1YmxpYyBzeW50aGVzaXplU3RhY2tzKHN0YWNrTmFtZXM6IHN0cmluZ1tdKTogY3hhcGkuU3ludGhlc2l6ZWRTdGFja1tdIHtcbiAgICBjb25zdCByZXQ6IGN4YXBpLlN5bnRoZXNpemVkU3RhY2tbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgc3RhY2tOYW1lIG9mIHN0YWNrTmFtZXMpIHtcbiAgICAgIHJldC5wdXNoKHRoaXMuc3ludGhlc2l6ZVN0YWNrKHN0YWNrTmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWV0YWRhdGEgZm9yIGFsbCBjb25zdHJ1Y3RzIGluIHRoZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBjb2xsZWN0TWV0YWRhdGEoc3RhY2s6IFN0YWNrKSB7XG4gICAgY29uc3Qgb3V0cHV0OiB7IFtpZDogc3RyaW5nXTogTWV0YWRhdGFFbnRyeVtdIH0gPSB7IH07XG5cbiAgICB2aXNpdChzdGFjayk7XG5cbiAgICAvLyBhZGQgYXBwLWxldmVsIG1ldGFkYXRhIHVuZGVyIFwiLlwiXG4gICAgaWYgKHRoaXMubWV0YWRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgb3V0cHV0W1BBVEhfU0VQXSA9IHRoaXMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcblxuICAgIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IENvbnN0cnVjdCkge1xuICAgICAgaWYgKG5vZGUubWV0YWRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBNYWtlIHRoZSBwYXRoIGFic29sdXRlXG4gICAgICAgIG91dHB1dFtQQVRIX1NFUCArIG5vZGUucGF0aF0gPSBub2RlLm1ldGFkYXRhLm1hcChtZCA9PiByZXNvbHZlKG1kKSBhcyBNZXRhZGF0YUVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHZpc2l0KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RSdW50aW1lSW5mb3JtYXRpb24oKTogY3hhcGkuQXBwUnVudGltZSB7XG4gICAgY29uc3QgbGlicmFyaWVzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBPYmplY3Qua2V5cyhyZXF1aXJlLmNhY2hlKSkge1xuICAgICAgY29uc3QgcGtnID0gZmluZE5wbVBhY2thZ2UoZmlsZU5hbWUpO1xuICAgICAgaWYgKHBrZyAmJiAhcGtnLnByaXZhdGUpIHtcbiAgICAgICAgbGlicmFyaWVzW3BrZy5uYW1lXSA9IHBrZy52ZXJzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGxpYnJhcmllcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdGFjayhzdGFja25hbWU6IHN0cmluZykge1xuICAgIGlmIChzdGFja25hbWUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBuYW1lIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5zdGFja3Nbc3RhY2tuYW1lXTtcbiAgICBpZiAoIXN0YWNrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHN0YWNrICR7c3RhY2tuYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZXh0KCkge1xuICAgIGNvbnN0IGNvbnRleHRKc29uID0gcHJvY2Vzcy5lbnZbY3hhcGkuQ09OVEVYVF9FTlZdO1xuICAgIGNvbnN0IGNvbnRleHQgPSAhY29udGV4dEpzb24gPyB7IH0gOiBKU09OLnBhcnNlKGNvbnRleHRKc29uKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb250ZXh0KSkge1xuICAgICAgdGhpcy5zZXRDb250ZXh0KGtleSwgY29udGV4dFtrZXldKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIE5QTSBtb2R1bGUgYSBnaXZlbiBsb2FkZWQgamF2YXNjcmlwdCBmaWxlIGlzIGZyb20uXG4gKlxuICogVGhlIG9ubHkgaW5mcm9tYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgbG9jYWxseSBpcyBhIGxpc3Qgb2YgSmF2YXNjcmlwdCBmaWxlcyxcbiAqIGFuZCBldmVyeSBzb3VyY2UgZmlsZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBzZWFyY2ggcGF0aCB0byByZXNvbHZlIHRoZSBmdXJ0aGVyXG4gKiBgYHJlcXVpcmVgYCBjYWxscyBtYWRlIGZyb20gdGhlcmUsIHdoaWNoIGluY2x1ZGVzIGl0cyBvd24gZGlyZWN0b3J5IG9uIGRpc2ssXG4gKiBhbmQgcGFyZW50IGRpcmVjdG9yaWVzIC0gZm9yIGV4YW1wbGU6XG4gKlxuICogWyAnLi4ucmVwby9wYWNrYWdlcy9hd3MtY2RrLXJlc291cmNlcy9saWIvY2ZuL25vZGVfbW9kdWxlcycsXG4gKiAgICcuLi5yZXBvL3BhY2thZ2VzL2F3cy1jZGstcmVzb3VyY2VzL2xpYi9ub2RlX21vZHVsZXMnLFxuICogICAnLi4ucmVwby9wYWNrYWdlcy9hd3MtY2RrLXJlc291cmNlcy9ub2RlX21vZHVsZXMnLFxuICogICAnLi4ucmVwby9wYWNrYWdlcy9ub2RlX21vZHVsZXMnLFxuICogICAvLyBldGMuLi5cbiAqIF1cbiAqXG4gKiBXZSBhcmUgbG9va2luZyBmb3IgYGBwYWNrYWdlLmpzb25gYCB0aGF0IGlzIGFueXdoZXJlIGluIHRoZSB0cmVlLCBleGNlcHQgaXQnc1xuICogaW4gdGhlIHBhcmVudCBkaXJlY3RvcnksIG5vdCBpbiB0aGUgYGBub2RlX21vZHVsZXNgYCBkaXJlY3RvcnkuIEZvciB0aGlzXG4gKiByZWFzb24sIHdlIHN0cmlwIHRoZSBgYC9ub2RlX21vZHVsZXNgYCBzdWZmaXggb2ZmIGVhY2ggcGF0aCBhbmQgdXNlIHJlZ3VsYXJcbiAqIG1vZHVsZSByZXNvbHV0aW9uIHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byBgYHBhY2thZ2UuanNvbmBgLlxuICpcbiAqIEBwYXJhbSBmaWxlTmFtZSBhIGphdmFzY3JpcHQgZmlsZSBuYW1lLlxuICogQHJldHVybnMgdGhlIE5QTSBtb2R1bGUgaW5mb3MgKGFrYSBgYHBhY2thZ2UuanNvbmBgIGNvbnRlbnRzKSwgb3JcbiAqICAgICAgYGB1bmRlZmluZWRgYCBpZiB0aGUgbG9va3VwIHdhcyB1bnN1Y2Nlc3NmdWwuXG4gKi9cbmZ1bmN0aW9uIGZpbmROcG1QYWNrYWdlKGZpbGVOYW1lOiBzdHJpbmcpOiB7IG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCBwcml2YXRlPzogYm9vbGVhbiB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbW9kID0gcmVxdWlyZS5jYWNoZVtmaWxlTmFtZV07XG4gIGNvbnN0IHBhdGhzID0gbW9kLnBhdGhzLm1hcChzdHJpcE5vZGVNb2R1bGVzKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdwYWNrYWdlLmpzb24nLCB7IHBhdGhzIH0pO1xuICAgIHJldHVybiByZXF1aXJlKHBhY2thZ2VQYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHMgYSBwYXRoLlxuICAgKiBAcmV0dXJucyBgYHNgYCB3aXRoIGFueSB0ZXJtaW5hdGluZyBgYC9ub2RlX21vZHVsZXNgYFxuICAgKiAgICAgIChvciBgYFxcXFxub2RlX21vZHVsZXNgYCkgc3RyaXBwZWQgb2ZmLilcbiAgICovXG4gIGZ1bmN0aW9uIHN0cmlwTm9kZU1vZHVsZXMoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAocy5lbmRzV2l0aCgnL25vZGVfbW9kdWxlcycpIHx8IHMuZW5kc1dpdGgoJ1xcXFxub2RlX21vZHVsZXMnKSkge1xuICAgICAgLy8gL25vZGVfbW9kdWxlcyBpcyAxMyBjaGFyYWN0ZXJzXG4gICAgICByZXR1cm4gcy5zdWJzdHIoMCwgcy5sZW5ndGggLSAxMyk7XG4gICAgfVxuICAgIHJldHVybiBzO1xuICB9XG59XG4iXX0=

@@ -68,2 +68,5 @@ import { CloudFormationToken } from './cloudformation-token';

export declare class FnJoin extends Fn {
private readonly delimiter;
private readonly listOfValues;
private _resolvedValues?;
/**

@@ -76,2 +79,9 @@ * Creates an ``Fn::Join`` function.

constructor(delimiter: string, listOfValues: any[]);
resolve(): any;
/**
* Optimization: if an Fn::Join is nested in another one and they share the same delimiter, then flatten it up. Also,
* if two concatenated elements are literal strings (not tokens), then pre-concatenate them with the delimiter, to
* generate shorter output.
*/
private resolveValues;
}

@@ -82,3 +92,2 @@ /**

export declare class FnConcat extends FnJoin {
private readonly listOfValues;
/**

@@ -85,0 +94,0 @@ * Creates an ``Fn::Join`` function with an empty delimiter.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tokens_1 = require("../core/tokens");
const cloudformation_token_1 = require("./cloudformation-token");

@@ -96,4 +97,48 @@ // tslint:disable:max-line-length

}
super('Fn::Join', [delimiter, listOfValues]);
// Passing the values as a token, optimization requires resolving stringified tokens, we should be deferred until
// this token is itself being resolved.
super('Fn::Join', [delimiter, new tokens_1.Token(() => this.resolveValues())]);
this.delimiter = delimiter;
this.listOfValues = listOfValues;
}
resolve() {
if (this.resolveValues().length === 1) {
return this.resolveValues()[0];
}
return super.resolve();
}
/**
* Optimization: if an Fn::Join is nested in another one and they share the same delimiter, then flatten it up. Also,
* if two concatenated elements are literal strings (not tokens), then pre-concatenate them with the delimiter, to
* generate shorter output.
*/
resolveValues() {
if (this._resolvedValues) {
return this._resolvedValues;
}
const resolvedValues = [...this.listOfValues.map(e => tokens_1.resolve(e))];
let i = 0;
while (i < resolvedValues.length) {
const el = resolvedValues[i];
if (isFnJoinIntrinsicWithSameDelimiter.call(this, el)) {
resolvedValues.splice(i, 1, ...el['Fn::Join'][1]);
}
else if (i > 0 && isPlainString(resolvedValues[i - 1]) && isPlainString(resolvedValues[i])) {
resolvedValues[i - 1] += this.delimiter + resolvedValues[i];
resolvedValues.splice(i, 1);
}
else {
i += 1;
}
}
return this._resolvedValues = resolvedValues;
function isFnJoinIntrinsicWithSameDelimiter(obj) {
return cloudformation_token_1.isIntrinsic(obj)
&& Object.keys(obj)[0] === 'Fn::Join'
&& obj['Fn::Join'][0] === this.delimiter;
}
function isPlainString(obj) {
return typeof obj === 'string' && !tokens_1.unresolved(obj);
}
}
}

@@ -110,26 +155,3 @@ exports.FnJoin = FnJoin;

constructor(...listOfValues) {
// Optimization: if any of the input arguments is also a FnConcat,
// splice their list of values into the current FnConcat. 'instanceof'
// can fail, but we do not depend depend on this for correctness.
//
// Do the same for resolved intrinsics, so we can detect this
// happening both at Token as well as at CloudFormation level.
let i = 0;
while (i < listOfValues.length) {
const el = listOfValues[i];
if (el instanceof FnConcat) {
listOfValues.splice(i, 1, ...el.listOfValues);
i += el.listOfValues.length;
}
else if (isConcatIntrinsic(el)) {
const values = concatIntrinsicValues(el);
listOfValues.splice(i, 1, ...values);
i += values;
}
else {
i++;
}
}
super('', listOfValues);
this.listOfValues = listOfValues;
}

@@ -139,14 +161,2 @@ }

/**
* Return whether the given object represents a CloudFormation intrinsic that is the result of a FnConcat resolution
*/
function isConcatIntrinsic(x) {
return cloudformation_token_1.isIntrinsic(x) && Object.keys(x)[0] === 'Fn::Join' && x['Fn::Join'][0] === '';
}
/**
* Return the concatted values of the concat intrinsic
*/
function concatIntrinsicValues(x) {
return x['Fn::Join'][1];
}
/**
* The intrinsic function ``Fn::Select`` returns a single object from a list of objects by index.

@@ -418,2 +428,2 @@ */

exports.FnValueOfAll = FnValueOfAll;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlFQUEwRTtBQUMxRSxpQ0FBaUM7QUFFakM7OztHQUdHO0FBQ0gsTUFBYSxFQUFHLFNBQVEsMENBQW1CO0lBQ3pDLFlBQVksSUFBWSxFQUFFLEtBQVU7UUFDbEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFKRCxnQkFJQztBQUVEOzs7R0FHRztBQUNILE1BQWEsV0FBWSxTQUFRLEVBQUU7SUFDakM7Ozs7O09BS0c7SUFDSCxZQUFZLE9BQWUsRUFBRSxXQUFnQixFQUFFLGNBQW1CO1FBQ2hFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBVkQsa0NBVUM7QUFFRDs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLEVBQUU7SUFDOUI7Ozs7T0FJRztJQUNILFlBQVkscUJBQTZCLEVBQUUsYUFBcUI7UUFDOUQsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBVEQsNEJBU0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxFQUFFO0lBQzlCOzs7Ozs7T0FNRztJQUNILFlBQVksTUFBZTtRQUN6QixLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFYRCw0QkFXQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxFQUFFO0lBQ25DOzs7T0FHRztJQUNILFlBQVksbUJBQTJCO1FBQ3JDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIs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LENBQUMsRUFBRSxjQUFjLENBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQVRELHdDQVNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxXQUFXO0lBQ3ZDOzs7OztPQUtHO0lBQ0gsWUFBWSxhQUFxQjtRQUMvQixLQUFLLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQVZELDRCQVVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxXQUFXO0lBQ3hDOzs7O09BSUc7SUFDSCxZQUFZLG9CQUE0QixFQUFFLFNBQWlCO1FBQ3pELEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBRSxvQkFBb0IsRUFBRSxTQUFTLENBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRjtBQVRELDhCQVNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxXQUFXO0lBQzNDOzs7O09BSUc7SUFDSCxZQUFZLGFBQXFCLEVBQUUsU0FBaUI7UUFDbEQsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNGO0FBVEQsb0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuLCBpc0ludHJpbnNpYyB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljIGZ1bmN0aW9ucy5cbiAqIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBGbiBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBzdXBlcigoKSA9PiAoeyBbbmFtZV06IHZhbHVlIH0pKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6RmluZEluTWFwYGAgcmV0dXJucyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBrZXlzIGluIGEgdHdvLWxldmVsXG4gKiBtYXAgdGhhdCBpcyBkZWNsYXJlZCBpbiB0aGUgTWFwcGluZ3Mgc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuRmluZEluTWFwIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpGaW5kSW5NYXBgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIG1hcE5hbWUgVGhlIGxvZ2ljYWwgbmFtZSBvZiBhIG1hcHBpbmcgZGVjbGFyZWQgaW4gdGhlIE1hcHBpbmdzIHNlY3Rpb24gdGhhdCBjb250YWlucyB0aGUga2V5cyBhbmQgdmFsdWVzLlxuICAgKiBAcGFyYW0gdG9wTGV2ZWxLZXkgVGhlIHRvcC1sZXZlbCBrZXkgbmFtZS4gSXRzIHZhbHVlIGlzIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAqIEBwYXJhbSBzZWNvbmRMZXZlbEtleSBUaGUgc2Vjb25kLWxldmVsIGtleSBuYW1lLCB3aGljaCBpcyBzZXQgdG8gb25lIG9mIHRoZSBrZXlzIGZyb20gdGhlIGxpc3QgYXNzaWduZWQgdG8gVG9wTGV2ZWxLZXkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXBOYW1lOiBzdHJpbmcsIHRvcExldmVsS2V5OiBhbnksIHNlY29uZExldmVsS2V5OiBhbnkpIHtcbiAgICBzdXBlcignRm46OkZpbmRJbk1hcCcsIFsgbWFwTmFtZSwgdG9wTGV2ZWxLZXksIHNlY29uZExldmVsS2V5IF0pO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGBgRm46OkdldEF0dGBgIGludHJpbnNpYyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZnJvbSBhIHJlc291cmNlIGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuR2V0QXR0IGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGBgRm46OkdldEF0dGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbG9naWNhbE5hbWVPZlJlc291cmNlIFRoZSBsb2dpY2FsIG5hbWUgKGFsc28gY2FsbGVkIGxvZ2ljYWwgSUQpIG9mIHRoZSByZXNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdGhhdCB5b3Ugd2FudC5cbiAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlLXNwZWNpZmljIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSB5b3Ugd2FudC4gU2VlIHRoZSByZXNvdXJjZSdzIHJlZmVyZW5jZSBwYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZSBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBmb3IgdGhhdCByZXNvdXJjZSB0eXBlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobG9naWNhbE5hbWVPZlJlc291cmNlOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6R2V0QXR0JywgWyBsb2dpY2FsTmFtZU9mUmVzb3VyY2UsIGF0dHJpYnV0ZU5hbWUgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkdldEFac2BgIHJldHVybnMgYW4gYXJyYXkgdGhhdCBsaXN0cyBBdmFpbGFiaWxpdHkgWm9uZXMgZm9yIGFcbiAqIHNwZWNpZmllZCByZWdpb24uIEJlY2F1c2UgY3VzdG9tZXJzIGhhdmUgYWNjZXNzIHRvIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXMsIHRoZSBpbnRyaW5zaWNcbiAqIGZ1bmN0aW9uIGBgRm46OkdldEFac2BgIGVuYWJsZXMgdGVtcGxhdGUgYXV0aG9ycyB0byB3cml0ZSB0ZW1wbGF0ZXMgdGhhdCBhZGFwdCB0byB0aGUgY2FsbGluZ1xuICogdXNlcidzIGFjY2Vzcy4gVGhhdCB3YXkgeW91IGRvbid0IGhhdmUgdG8gaGFyZC1jb2RlIGEgZnVsbCBsaXN0IG9mIEF2YWlsYWJpbGl0eSBab25lcyBmb3IgYVxuICogc3BlY2lmaWVkIHJlZ2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuR2V0QVpzIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpHZXRBWnNgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgbmFtZSBvZiB0aGUgcmVnaW9uIGZvciB3aGljaCB5b3Ugd2FudCB0byBnZXQgdGhlIEF2YWlsYWJpbGl0eSBab25lcy5cbiAgICogICAgICAgICBZb3UgY2FuIHVzZSB0aGUgQVdTOjpSZWdpb24gcHNldWRvIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSByZWdpb24gaW5cbiAgICogICAgICAgICB3aGljaCB0aGUgc3RhY2sgaXMgY3JlYXRlZC4gU3BlY2lmeWluZyBhbiBlbXB0eSBzdHJpbmcgaXMgZXF1aXZhbGVudCB0b1xuICAgKiAgICAgICAgIHNwZWNpZnlpbmcgQVdTOjpSZWdpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyZWdpb24/OiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OkdldEFacycsIHJlZ2lvbiB8fCAnJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkltcG9ydFZhbHVlYGAgcmV0dXJucyB0aGUgdmFsdWUgb2YgYW4gb3V0cHV0IGV4cG9ydGVkIGJ5IGFub3RoZXIgc3RhY2suXG4gKiBZb3UgdHlwaWNhbGx5IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSBjcm9zcy1zdGFjayByZWZlcmVuY2VzLiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVcbiAqIHRlbXBsYXRlIHNuaXBwZXRzLCBTdGFjayBBIGV4cG9ydHMgVlBDIHNlY3VyaXR5IGdyb3VwIHZhbHVlcyBhbmQgU3RhY2sgQiBpbXBvcnRzIHRoZW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkltcG9ydFZhbHVlIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpJbXBvcnRWYWx1ZWBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gc2hhcmVkVmFsdWVUb0ltcG9ydCBUaGUgc3RhY2sgb3V0cHV0IHZhbHVlIHRoYXQgeW91IHdhbnQgdG8gaW1wb3J0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2hhcmVkVmFsdWVUb0ltcG9ydDogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ0ZuOjpJbXBvcnRWYWx1ZScsIHNoYXJlZFZhbHVlVG9JbXBvcnQpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpKb2luYGAgYXBwZW5kcyBhIHNldCBvZiB2YWx1ZXMgaW50byBhIHNpbmdsZSB2YWx1ZSwgc2VwYXJhdGVkIGJ5XG4gKiB0aGUgc3BlY2lmaWVkIGRlbGltaXRlci4gSWYgYSBkZWxpbWl0ZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlIHNldCBvZiB2YWx1ZXMgYXJlIGNvbmNhdGVuYXRlZFxuICogd2l0aCBubyBkZWxpbWl0ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkpvaW4gZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkpvaW5gYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGRlbGltaXRlciBUaGUgdmFsdWUgeW91IHdhbnQgdG8gb2NjdXIgYmV0d2VlbiBmcmFnbWVudHMuIFRoZSBkZWxpbWl0ZXIgd2lsbCBvY2N1ciBiZXR3ZWVuIGZyYWdtZW50cyBvbmx5LlxuICAgKiAgICAgICAgICBJdCB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGZpbmFsIHZhbHVlLlxuICAgKiBAcGFyYW0gbGlzdE9mVmFsdWVzIFRoZSBsaXN0IG9mIHZhbHVlcyB5b3Ugd2FudCBjb21iaW5lZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlbGltaXRlcjogc3RyaW5nLCBsaXN0T2ZWYWx1ZXM6IGFueVtdKSB7XG4gICAgaWYgKGxpc3RPZlZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm5Kb2luIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSB2YWx1ZSB0byBiZSBwcm92aWRlZGApO1xuICAgIH1cbiAgICBzdXBlcignRm46OkpvaW4nLCBbIGRlbGltaXRlciwgbGlzdE9mVmFsdWVzIF0pO1xuICB9XG59XG5cbi8qKlxuICogQWxpYXMgZm9yIGBgRm5Kb2luKCcnLCBsaXN0T2ZWYWx1ZXMpYGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkNvbmNhdCBleHRlbmRzIEZuSm9pbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdE9mVmFsdWVzOiBhbnlbXTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpKb2luYGAgZnVuY3Rpb24gd2l0aCBhbiBlbXB0eSBkZWxpbWl0ZXIuXG4gICAqIEBwYXJhbSBsaXN0T2ZWYWx1ZXMgVGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGNvbmNhdGVuYXRlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoLi4ubGlzdE9mVmFsdWVzOiBhbnlbXSkge1xuICAgIC8vIE9wdGltaXphdGlvbjogaWYgYW55IG9mIHRoZSBpbnB1dCBhcmd1bWVudHMgaXMgYWxzbyBhIEZuQ29uY2F0LFxuICAgIC8vIHNwbGljZSB0aGVpciBsaXN0IG9mIHZhbHVlcyBpbnRvIHRoZSBjdXJyZW50IEZuQ29uY2F0LiAnaW5zdGFuY2VvZidcbiAgICAvLyBjYW4gZmFpbCwgYnV0IHdlIGRvIG5vdCBkZXBlbmQgZGVwZW5kIG9uIHRoaXMgZm9yIGNvcnJlY3RuZXNzLlxuICAgIC8vXG4gICAgLy8gRG8gdGhlIHNhbWUgZm9yIHJlc29sdmVkIGludHJpbnNpY3MsIHNvIHdlIGNhbiBkZXRlY3QgdGhpc1xuICAgIC8vIGhhcHBlbmluZyBib3RoIGF0IFRva2VuIGFzIHdlbGwgYXMgYXQgQ2xvdWRGb3JtYXRpb24gbGV2ZWwuXG5cbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBsaXN0T2ZWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbCA9IGxpc3RPZlZhbHVlc1tpXTtcbiAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEZuQ29uY2F0KSB7XG4gICAgICAgIGxpc3RPZlZhbHVlcy5zcGxpY2UoaSwgMSwgLi4uZWwubGlzdE9mVmFsdWVzKTtcbiAgICAgICAgaSArPSBlbC5saXN0T2ZWYWx1ZXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChpc0NvbmNhdEludHJpbnNpYyhlbCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY29uY2F0SW50cmluc2ljVmFsdWVzKGVsKTtcbiAgICAgICAgbGlzdE9mVmFsdWVzLnNwbGljZShpLCAxLCAuLi52YWx1ZXMpO1xuICAgICAgICBpICs9IHZhbHVlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcignJywgbGlzdE9mVmFsdWVzKTtcbiAgICB0aGlzLmxpc3RPZlZhbHVlcyA9IGxpc3RPZlZhbHVlcztcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgcmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIGludHJpbnNpYyB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYSBGbkNvbmNhdCByZXNvbHV0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29uY2F0SW50cmluc2ljKHg6IGFueSkge1xuICByZXR1cm4gaXNJbnRyaW5zaWMoeCkgJiYgT2JqZWN0LmtleXMoeClbMF0gPT09ICdGbjo6Sm9pbicgJiYgeFsnRm46OkpvaW4nXVswXSA9PT0gJyc7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBjb25jYXR0ZWQgdmFsdWVzIG9mIHRoZSBjb25jYXQgaW50cmluc2ljXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdEludHJpbnNpY1ZhbHVlcyh4OiBhbnkpIHtcbiAgcmV0dXJuIHhbJ0ZuOjpKb2luJ11bMV07XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpTZWxlY3RgYCByZXR1cm5zIGEgc2luZ2xlIG9iamVjdCBmcm9tIGEgbGlzdCBvZiBvYmplY3RzIGJ5IGluZGV4LlxuICovXG5leHBvcnQgY2xhc3MgRm5TZWxlY3QgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OlNlbGVjdGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBvYmplY3QgdG8gcmV0cmlldmUuIFRoaXMgbXVzdCBiZSBhIHZhbHVlIGZyb20gemVybyB0byBOLTEsIHdoZXJlIE4gcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS5cbiAgICogQHBhcmFtIGFycmF5IFRoZSBsaXN0IG9mIG9iamVjdHMgdG8gc2VsZWN0IGZyb20uIFRoaXMgbGlzdCBtdXN0IG5vdCBiZSBudWxsLCBub3IgY2FuIGl0IGhhdmUgbnVsbCBlbnRyaWVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5kZXg6IG51bWJlciwgYXJyYXk6IGFueSkge1xuICAgIHN1cGVyKCdGbjo6U2VsZWN0JywgWyBpbmRleCwgYXJyYXkgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUbyBzcGxpdCBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBzdHJpbmcgdmFsdWVzIHNvIHRoYXQgeW91IGNhbiBzZWxlY3QgYW4gZWxlbWVudCBmcm9tIHRoZVxuICogcmVzdWx0aW5nIHN0cmluZyBsaXN0LCB1c2UgdGhlIGBgRm46OlNwbGl0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBzcGxpdHNcbiAqIHdpdGggYSBkZWxpbWl0ZXIsIHN1Y2ggYXMgLCAoYSBjb21tYSkuIEFmdGVyIHlvdSBzcGxpdCBhIHN0cmluZywgdXNlIHRoZSBgYEZuOjpTZWxlY3RgYCBmdW5jdGlvblxuICogdG8gcGljayBhIHNwZWNpZmljIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBGblNwbGl0IGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGBgRm46OlNwbGl0YGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBkZWxpbWl0ZXIgQSBzdHJpbmcgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHdoZXJlIHRoZSBzb3VyY2Ugc3RyaW5nIGlzIGRpdmlkZWQuXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHN0cmluZyB2YWx1ZSB0aGF0IHlvdSB3YW50IHRvIHNwbGl0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGVsaW1pdGVyOiBzdHJpbmcsIHNvdXJjZTogYW55KSB7XG4gICAgc3VwZXIoJ0ZuOjpTcGxpdCcsIFsgZGVsaW1pdGVyLCBzb3VyY2UgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OlN1YmBgIHN1YnN0aXR1dGVzIHZhcmlhYmxlcyBpbiBhbiBpbnB1dCBzdHJpbmcgd2l0aCB2YWx1ZXMgdGhhdFxuICogeW91IHNwZWNpZnkuIEluIHlvdXIgdGVtcGxhdGVzLCB5b3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbnN0cnVjdCBjb21tYW5kcyBvciBvdXRwdXRzXG4gKiB0aGF0IGluY2x1ZGUgdmFsdWVzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSB1bnRpbCB5b3UgY3JlYXRlIG9yIHVwZGF0ZSBhIHN0YWNrLlxuICovXG5leHBvcnQgY2xhc3MgRm5TdWIgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OlN1YmBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gYm9keSBBIHN0cmluZyB3aXRoIHZhcmlhYmxlcyB0aGF0IEFXUyBDbG91ZEZvcm1hdGlvbiBzdWJzdGl0dXRlcyB3aXRoIHRoZWlyXG4gICAqICAgICAgIGFzc29jaWF0ZWQgdmFsdWVzIGF0IHJ1bnRpbWUuIFdyaXRlIHZhcmlhYmxlcyBhcyAke015VmFyTmFtZX0uIFZhcmlhYmxlc1xuICAgKiAgICAgICBjYW4gYmUgdGVtcGxhdGUgcGFyYW1ldGVyIG5hbWVzLCByZXNvdXJjZSBsb2dpY2FsIElEcywgcmVzb3VyY2UgYXR0cmlidXRlcyxcbiAgICogICAgICAgb3IgYSB2YXJpYWJsZSBpbiBhIGtleS12YWx1ZSBtYXAuIElmIHlvdSBzcGVjaWZ5IG9ubHkgdGVtcGxhdGUgcGFyYW1ldGVyIG5hbWVzLFxuICAgKiAgICAgICByZXNvdXJjZSBsb2dpY2FsIElEcywgYW5kIHJlc291cmNlIGF0dHJpYnV0ZXMsIGRvbid0IHNwZWNpZnkgYSBrZXktdmFsdWUgbWFwLlxuICAgKiBAcGFyYW0gdmFyaWFibGVzIFRoZSBuYW1lIG9mIGEgdmFyaWFibGUgdGhhdCB5b3UgaW5jbHVkZWQgaW4gdGhlIFN0cmluZyBwYXJhbWV0ZXIuXG4gICAqICAgICAgICAgIFRoZSB2YWx1ZSB0aGF0IEFXUyBDbG91ZEZvcm1hdGlvbiBzdWJzdGl0dXRlcyBmb3IgdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUgbmFtZSBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keTogc3RyaW5nLCB2YXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgc3VwZXIoJ0ZuOjpTdWInLCB2YXJpYWJsZXMgPyBbYm9keSwgdmFyaWFibGVzXSA6IGJvZHkpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpCYXNlNjRgYCByZXR1cm5zIHRoZSBCYXNlNjQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0IHN0cmluZy5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgdG8gcGFzcyBlbmNvZGVkIGRhdGEgdG8gQW1hem9uIEVDMiBpbnN0YW5jZXMgYnkgd2F5IG9mXG4gKiB0aGUgVXNlckRhdGEgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkJhc2U2NCBleHRlbmRzIEZuIHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpCYXNlNjRgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGRhdGEgVGhlIHN0cmluZyB2YWx1ZSB5b3Ugd2FudCB0byBjb252ZXJ0IHRvIEJhc2U2NC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGE6IGFueSkge1xuICAgIHN1cGVyKCdGbjo6QmFzZTY0JywgZGF0YSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkNpZHJgYCByZXR1cm5zIHRoZSBzcGVjaWZpZWQgQ2lkciBhZGRyZXNzIGJsb2NrLlxuICovXG5leHBvcnQgY2xhc3MgRm5DaWRyIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpDaWRyYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBpcEJsb2NrICBUaGUgdXNlci1zcGVjaWZpZWQgZGVmYXVsdCBDaWRyIGFkZHJlc3MgYmxvY2suXG4gICAqIEBwYXJhbSBjb3VudCAgVGhlIG51bWJlciBvZiBzdWJuZXRzJyBDaWRyIGJsb2NrIHdhbnRlZC4gQ291bnQgY2FuIGJlIDEgdG8gMjU2LlxuICAgKiBAcGFyYW0gc2l6ZU1hc2sgVGhlIGRpZ2l0IGNvdmVyZWQgaW4gdGhlIHN1Ym5ldC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGlwQmxvY2s6IGFueSwgY291bnQ6IGFueSwgc2l6ZU1hc2s/OiBhbnkpIHtcbiAgICBpZiAoY291bnQgPCAxIHx8IGNvdW50ID4gMjU2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZuOjpDaWRyJ3MgY291bnQgYXR0cmlidXRlIG11c3QgYmUgYmV0d2VuIDEgYW5kIDI1NiwgJHtjb3VudH0gd2FzIHByb3ZpZGVkLmApO1xuICAgIH1cbiAgICBzdXBlcignRm46OkNpZHInLCBbaXBCbG9jaywgY291bnQsIHNpemVNYXNrXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIHVzZSBpbnRyaW5zaWMgZnVuY3Rpb25zLCBzdWNoIGFzIGBgRm46OklmYGAsIGBgRm46OkVxdWFsc2BgLCBhbmQgYGBGbjo6Tm90YGAsIHRvIGNvbmRpdGlvbmFsbHlcbiAqIGNyZWF0ZSBzdGFjayByZXNvdXJjZXMuIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGV2YWx1YXRlZCBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzIHRoYXQgeW91XG4gKiBkZWNsYXJlIHdoZW4geW91IGNyZWF0ZSBvciB1cGRhdGUgYSBzdGFjay4gQWZ0ZXIgeW91IGRlZmluZSBhbGwgeW91ciBjb25kaXRpb25zLCB5b3UgY2FuXG4gKiBhc3NvY2lhdGUgdGhlbSB3aXRoIHJlc291cmNlcyBvciByZXNvdXJjZSBwcm9wZXJ0aWVzIGluIHRoZSBSZXNvdXJjZXMgYW5kIE91dHB1dHMgc2VjdGlvbnNcbiAqIG9mIGEgdGVtcGxhdGUuXG4gKlxuICogWW91IGRlZmluZSBhbGwgY29uZGl0aW9ucyBpbiB0aGUgQ29uZGl0aW9ucyBzZWN0aW9uIG9mIGEgdGVtcGxhdGUgZXhjZXB0IGZvciBgYEZuOjpJZmBgIGNvbmRpdGlvbnMuXG4gKiBZb3UgY2FuIHVzZSB0aGUgYGBGbjo6SWZgYCBjb25kaXRpb24gaW4gdGhlIG1ldGFkYXRhIGF0dHJpYnV0ZSwgdXBkYXRlIHBvbGljeSBhdHRyaWJ1dGUsIGFuZCBwcm9wZXJ0eVxuICogdmFsdWVzIGluIHRoZSBSZXNvdXJjZXMgc2VjdGlvbiBhbmQgT3V0cHV0cyBzZWN0aW9ucyBvZiBhIHRlbXBsYXRlLlxuICpcbiAqIFlvdSBtaWdodCB1c2UgY29uZGl0aW9ucyB3aGVuIHlvdSB3YW50IHRvIHJldXNlIGEgdGVtcGxhdGUgdGhhdCBjYW4gY3JlYXRlIHJlc291cmNlcyBpbiBkaWZmZXJlbnRcbiAqIGNvbnRleHRzLCBzdWNoIGFzIGEgdGVzdCBlbnZpcm9ubWVudCB2ZXJzdXMgYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LiBJbiB5b3VyIHRlbXBsYXRlLCB5b3UgY2FuXG4gKiBhZGQgYW4gRW52aXJvbm1lbnRUeXBlIGlucHV0IHBhcmFtZXRlciwgd2hpY2ggYWNjZXB0cyBlaXRoZXIgcHJvZCBvciB0ZXN0IGFzIGlucHV0cy4gRm9yIHRoZVxuICogcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IGluY2x1ZGUgQW1hem9uIEVDMiBpbnN0YW5jZXMgd2l0aCBjZXJ0YWluIGNhcGFiaWxpdGllcztcbiAqIGhvd2V2ZXIsIGZvciB0aGUgdGVzdCBlbnZpcm9ubWVudCwgeW91IHdhbnQgdG8gdXNlIGxlc3MgY2FwYWJpbGl0aWVzIHRvIHNhdmUgY29zdHMuIFdpdGhcbiAqIGNvbmRpdGlvbnMsIHlvdSBjYW4gZGVmaW5lIHdoaWNoIHJlc291cmNlcyBhcmUgY3JlYXRlZCBhbmQgaG93IHRoZXkncmUgY29uZmlndXJlZCBmb3IgZWFjaFxuICogZW52aXJvbm1lbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQ29uZGl0aW9uIGV4dGVuZHMgRm4ge1xuXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFsbCB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbnMgZXZhbHVhdGUgdG8gdHJ1ZSwgb3IgcmV0dXJucyBmYWxzZSBpZiBhbnkgb25lXG4gKiAgb2YgdGhlIGNvbmRpdGlvbnMgZXZhbHVhdGVzIHRvIGZhbHNlLiBgYEZuOjpBbmRgYCBhY3RzIGFzIGFuIEFORCBvcGVyYXRvci4gVGhlIG1pbmltdW0gbnVtYmVyIG9mXG4gKiBjb25kaXRpb25zIHRoYXQgeW91IGNhbiBpbmNsdWRlIGlzIDIsIGFuZCB0aGUgbWF4aW11bSBpcyAxMC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQW5kIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICBjb25zdHJ1Y3RvciguLi5jb25kaXRpb246IEZuQ29uZGl0aW9uW10pIHtcbiAgICBzdXBlcignRm46OkFuZCcsIGNvbmRpdGlvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlcyBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbC4gUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gdmFsdWVzIGFyZSBlcXVhbCBvciBmYWxzZVxuICogaWYgdGhleSBhcmVuJ3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkVxdWFscyBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6RXF1YWxzYGAgY29uZGl0aW9uIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbGhzIEEgdmFsdWUgb2YgYW55IHR5cGUgdGhhdCB5b3Ugd2FudCB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0gcmhzIEEgdmFsdWUgb2YgYW55IHR5cGUgdGhhdCB5b3Ugd2FudCB0byBjb21wYXJlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGhzOiBhbnksIHJoczogYW55KSB7XG4gICAgc3VwZXIoJ0ZuOjpFcXVhbHMnLCBbIGxocywgcmhzIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBvbmUgdmFsdWUgaWYgdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgYW5kIGFub3RoZXIgdmFsdWUgaWYgdGhlXG4gKiBzcGVjaWZpZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBmYWxzZS4gQ3VycmVudGx5LCBBV1MgQ2xvdWRGb3JtYXRpb24gc3VwcG9ydHMgdGhlIGBgRm46OklmYGBcbiAqIGludHJpbnNpYyBmdW5jdGlvbiBpbiB0aGUgbWV0YWRhdGEgYXR0cmlidXRlLCB1cGRhdGUgcG9saWN5IGF0dHJpYnV0ZSwgYW5kIHByb3BlcnR5IHZhbHVlc1xuICogaW4gdGhlIFJlc291cmNlcyBzZWN0aW9uIGFuZCBPdXRwdXRzIHNlY3Rpb25zIG9mIGEgdGVtcGxhdGUuIFlvdSBjYW4gdXNlIHRoZSBBV1M6Ok5vVmFsdWVcbiAqIHBzZXVkbyBwYXJhbWV0ZXIgYXMgYSByZXR1cm4gdmFsdWUgdG8gcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5LlxuICovXG5leHBvcnQgY2xhc3MgRm5JZiBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6SWZgYCBjb25kaXRpb24gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBjb25kaXRpb24gQSByZWZlcmVuY2UgdG8gYSBjb25kaXRpb24gaW4gdGhlIENvbmRpdGlvbnMgc2VjdGlvbi4gVXNlIHRoZSBjb25kaXRpb24ncyBuYW1lIHRvIHJlZmVyZW5jZSBpdC5cbiAgICogQHBhcmFtIHZhbHVlSWZUcnVlIEEgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG4gICAqIEBwYXJhbSB2YWx1ZUlmRmFsc2UgQSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25kaXRpb246IHN0cmluZywgdmFsdWVJZlRydWU6IGFueSwgdmFsdWVJZkZhbHNlOiBhbnkpIHtcbiAgICBzdXBlcignRm46OklmJywgWyBjb25kaXRpb24sIHZhbHVlSWZUcnVlLCB2YWx1ZUlmRmFsc2UgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgZm9yIGEgY29uZGl0aW9uIHRoYXQgZXZhbHVhdGVzIHRvIGZhbHNlIG9yIHJldHVybnMgZmFsc2UgZm9yIGEgY29uZGl0aW9uIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUuXG4gKiBgYEZuOjpOb3RgYCBhY3RzIGFzIGEgTk9UIG9wZXJhdG9yLlxuICovXG5leHBvcnQgY2xhc3MgRm5Ob3QgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46Ok5vdGBgIGNvbmRpdGlvbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbmRpdGlvbiBBIGNvbmRpdGlvbiBzdWNoIGFzIGBgRm46OkVxdWFsc2BgIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUgb3IgZmFsc2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25kaXRpb246IEZuQ29uZGl0aW9uKSB7XG4gICAgc3VwZXIoJ0ZuOjpOb3QnLCBbIGNvbmRpdGlvbiBdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgb25lIG9mIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9ucyBldmFsdWF0ZSB0byB0cnVlLCBvciByZXR1cm5zIGZhbHNlIGlmXG4gKiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMgZXZhbHVhdGVzIHRvIGZhbHNlLiBgYEZuOjpPcmBgIGFjdHMgYXMgYW4gT1Igb3BlcmF0b3IuIFRoZSBtaW5pbXVtIG51bWJlclxuICogb2YgY29uZGl0aW9ucyB0aGF0IHlvdSBjYW4gaW5jbHVkZSBpcyAyLCBhbmQgdGhlIG1heGltdW0gaXMgMTAuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbk9yIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpPcmBgIGNvbmRpdGlvbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbmRpdGlvbiBBIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlIG9yIGZhbHNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoLi4uY29uZGl0aW9uOiBGbkNvbmRpdGlvbltdKSB7XG4gICAgc3VwZXIoJ0ZuOjpPcicsIGNvbmRpdGlvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBzcGVjaWZpZWQgc3RyaW5nIG1hdGNoZXMgYXQgbGVhc3Qgb25lIHZhbHVlIGluIGEgbGlzdCBvZiBzdHJpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgRm5Db250YWlucyBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6Q29udGFpbnNgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGxpc3RPZlN0cmluZ3MgQSBsaXN0IG9mIHN0cmluZ3MsIHN1Y2ggYXMgXCJBXCIsIFwiQlwiLCBcIkNcIi5cbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nLCBzdWNoIGFzIFwiQVwiLCB0aGF0IHlvdSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zdCBhIGxpc3Qgb2Ygc3RyaW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGxpc3RPZlN0cmluZ3M6IGFueSwgdmFsdWU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6Q29udGFpbnMnLCBbIGxpc3RPZlN0cmluZ3MsIHZhbHVlIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgc3BlY2lmaWVkIHN0cmluZyBtYXRjaGVzIGFsbCB2YWx1ZXMgaW4gYSBsaXN0LlxuICovXG5leHBvcnQgY2xhc3MgRm5FYWNoTWVtYmVyRXF1YWxzIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpFYWNoTWVtYmVyRXF1YWxzYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBsaXN0T2ZTdHJpbmdzIEEgbGlzdCBvZiBzdHJpbmdzLCBzdWNoIGFzIFwiQVwiLCBcIkJcIiwgXCJDXCIuXG4gICAqIEBwYXJhbSB2YWx1ZSBBIHN0cmluZywgc3VjaCBhcyBcIkFcIiwgdGhhdCB5b3Ugd2FudCB0byBjb21wYXJlIGFnYWluc3QgYSBsaXN0IG9mIHN0cmluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsaXN0T2ZTdHJpbmdzOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OkVhY2hNZW1iZXJFcXVhbHMnLCBbIGxpc3RPZlN0cmluZ3MsIHZhbHVlIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGVhY2ggbWVtYmVyIGluIGEgbGlzdCBvZiBzdHJpbmdzIG1hdGNoZXMgYXQgbGVhc3Qgb25lIHZhbHVlIGluIGEgc2Vjb25kXG4gKiBsaXN0IG9mIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkVhY2hNZW1iZXJJbiBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6RWFjaE1lbWJlckluYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBzdHJpbmdzVG9DaGVjayBBIGxpc3Qgb2Ygc3RyaW5ncywgc3VjaCBhcyBcIkFcIiwgXCJCXCIsIFwiQ1wiLiBBV1MgQ2xvdWRGb3JtYXRpb24gY2hlY2tzIHdoZXRoZXIgZWFjaCBtZW1iZXIgaW4gdGhlIHN0cmluZ3NfdG9fY2hlY2sgcGFyYW1ldGVyIGlzIGluIHRoZSBzdHJpbmdzX3RvX21hdGNoIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHN0cmluZ3NUb01hdGNoIEEgbGlzdCBvZiBzdHJpbmdzLCBzdWNoIGFzIFwiQVwiLCBcIkJcIiwgXCJDXCIuIEVhY2ggbWVtYmVyIGluIHRoZSBzdHJpbmdzX3RvX21hdGNoIHBhcmFtZXRlciBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBtZW1iZXJzIG9mIHRoZSBzdHJpbmdzX3RvX2NoZWNrIHBhcmFtZXRlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0cmluZ3NUb0NoZWNrOiBhbnksIHN0cmluZ3NUb01hdGNoOiBhbnkpIHtcbiAgICBzdXBlcignRm46OkVhY2hNZW1iZXJJbicsIFsgW3N0cmluZ3NUb0NoZWNrXSwgc3RyaW5nc1RvTWF0Y2ggXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCB2YWx1ZXMgZm9yIGEgc3BlY2lmaWVkIHBhcmFtZXRlciB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgRm5SZWZBbGwgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OlJlZkFsbGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyVHlwZSBBbiBBV1Mtc3BlY2lmaWMgcGFyYW1ldGVyIHR5cGUsIHN1Y2ggYXMgQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXA6OklkIG9yXG4gICAqICAgICAgICAgICAgQVdTOjpFQzI6OlZQQzo6SWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUGFyYW1ldGVycyBpbiB0aGUgQVdTXG4gICAqICAgICAgICAgICAgQ2xvdWRGb3JtYXRpb24gVXNlciBHdWlkZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlclR5cGU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6UmVmQWxsJywgcGFyYW1ldGVyVHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSBvciBsaXN0IG9mIHZhbHVlcyBmb3IgYSBzcGVjaWZpYyBwYXJhbWV0ZXIgYW5kIGF0dHJpYnV0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuVmFsdWVPZiBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6VmFsdWVPZmBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyT3JMb2dpY2FsSWQgVGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHJldHJpZXZlIGF0dHJpYnV0ZSB2YWx1ZXMuIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBkZWNsYXJlZCBpbiB0aGUgUGFyYW1ldGVycyBzZWN0aW9uIG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIGF0dHJpYnV0ZSBUaGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgZnJvbSB3aGljaCB5b3Ugd2FudCB0byByZXRyaWV2ZSBhIHZhbHVlLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1ldGVyT3JMb2dpY2FsSWQ6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OlZhbHVlT2YnLCBbIHBhcmFtZXRlck9yTG9naWNhbElkLCBhdHRyaWJ1dGUgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgYXR0cmlidXRlIHZhbHVlcyBmb3IgYSBnaXZlbiBwYXJhbWV0ZXIgdHlwZSBhbmQgYXR0cmlidXRlLlxuICovXG5leHBvcnQgY2xhc3MgRm5WYWx1ZU9mQWxsIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpWYWx1ZU9mQWxsYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJUeXBlIEFuIEFXUy1zcGVjaWZpYyBwYXJhbWV0ZXIgdHlwZSwgc3VjaCBhcyBBV1M6OkVDMjo6U2VjdXJpdHlHcm91cDo6SWQgb3IgQVdTOjpFQzI6OlZQQzo6SWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUGFyYW1ldGVycyBpbiB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIFVzZXIgR3VpZGUuXG4gICAqIEBwYXJhbSBhdHRyaWJ1dGUgVGhlIG5hbWUgb2YgYW4gYXR0cmlidXRlIGZyb20gd2hpY2ggeW91IHdhbnQgdG8gcmV0cmlldmUgYSB2YWx1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXR0cmlidXRlcywgc2VlIFN1cHBvcnRlZCBBdHRyaWJ1dGVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1ldGVyVHlwZTogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6VmFsdWVPZkFsbCcsIFsgcGFyYW1ldGVyVHlwZSwgYXR0cmlidXRlIF0pO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUE0RDtBQUM1RCxpRUFBMEU7QUFDMUUsaUNBQWlDO0FBRWpDOzs7R0FHRztBQUNILE1BQWEsRUFBRyxTQUFRLDBDQUFtQjtJQUN6QyxZQUFZLElBQVksRUFBRSxLQUFVO1FBQ2xDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBSkQsZ0JBSUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxFQUFFO0lBQ2pDOzs7OztPQUtHO0lBQ0gsWUFBWSxPQUFlLEVBQUUsV0FBZ0IsRUFBRSxjQUFtQjtRQUNoRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRjtBQVZELGtDQVVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxFQUFFO0lBQzlCOzs7O09BSUc7SUFDSCxZQUFZLHFCQUE2QixFQUFFLGFBQXFCO1FBQzlELEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7Q0FDRjtBQVRELDRCQVNDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBYSxRQUFTLFNBQVEsRUFBRTtJQUM5Qjs7Ozs7O09BTUc7SUFDSCxZQUFZLE1BQWU7UUFDekIsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBWEQsNEJBV0M7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsRUFBRTtJQUNuQzs7O09BR0c7SUFDSCxZQUFZLG1CQUEyQjtRQUNyQyxLQUFLLENBQUMsaUJBQWlC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O0lBQzVELENBQUM7Q0FDRjtBQVRELDhCQVNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxXQUFXO0lBQzNDOzs7O09BSUc7SUFDSCxZQUFZLGFBQXFCLEVBQUUsU0FBaUI7UUFDbEQsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNGO0FBVEQsb0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlLCBUb2tlbiwgdW5yZXNvbHZlZCB9IGZyb20gJy4uL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4sIGlzSW50cmluc2ljIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi10b2tlbic7XG4vLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcblxuLyoqXG4gKiBDbG91ZEZvcm1hdGlvbiBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICogaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9pbnRyaW5zaWMtZnVuY3Rpb24tcmVmZXJlbmNlLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEZuIGV4dGVuZHMgQ2xvdWRGb3JtYXRpb25Ub2tlbiB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHN1cGVyKCgpID0+ICh7IFtuYW1lXTogdmFsdWUgfSkpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpGaW5kSW5NYXBgYCByZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGtleXMgaW4gYSB0d28tbGV2ZWxcbiAqIG1hcCB0aGF0IGlzIGRlY2xhcmVkIGluIHRoZSBNYXBwaW5ncyBzZWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRm5GaW5kSW5NYXAgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkZpbmRJbk1hcGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbWFwTmFtZSBUaGUgbG9naWNhbCBuYW1lIG9mIGEgbWFwcGluZyBkZWNsYXJlZCBpbiB0aGUgTWFwcGluZ3Mgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gICAqIEBwYXJhbSB0b3BMZXZlbEtleSBUaGUgdG9wLWxldmVsIGtleSBuYW1lLiBJdHMgdmFsdWUgaXMgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy5cbiAgICogQHBhcmFtIHNlY29uZExldmVsS2V5IFRoZSBzZWNvbmQtbGV2ZWwga2V5IG5hbWUsIHdoaWNoIGlzIHNldCB0byBvbmUgb2YgdGhlIGtleXMgZnJvbSB0aGUgbGlzdCBhc3NpZ25lZCB0byBUb3BMZXZlbEtleS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1hcE5hbWU6IHN0cmluZywgdG9wTGV2ZWxLZXk6IGFueSwgc2Vjb25kTGV2ZWxLZXk6IGFueSkge1xuICAgIHN1cGVyKCdGbjo6RmluZEluTWFwJywgWyBtYXBOYW1lLCB0b3BMZXZlbEtleSwgc2Vjb25kTGV2ZWxLZXkgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmcm9tIGEgcmVzb3VyY2UgaW4gdGhlIHRlbXBsYXRlLlxuICovXG5leHBvcnQgY2xhc3MgRm5HZXRBdHQgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYGBGbjo6R2V0QXR0YGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBsb2dpY2FsTmFtZU9mUmVzb3VyY2UgVGhlIGxvZ2ljYWwgbmFtZSAoYWxzbyBjYWxsZWQgbG9naWNhbCBJRCkgb2YgdGhlIHJlc291cmNlIHRoYXQgY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB0aGF0IHlvdSB3YW50LlxuICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2Utc3BlY2lmaWMgYXR0cmlidXRlIHdob3NlIHZhbHVlIHlvdSB3YW50LiBTZWUgdGhlIHJlc291cmNlJ3MgcmVmZXJlbmNlIHBhZ2UgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIGZvciB0aGF0IHJlc291cmNlIHR5cGUuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihsb2dpY2FsTmFtZU9mUmVzb3VyY2U6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ0ZuOjpHZXRBdHQnLCBbIGxvZ2ljYWxOYW1lT2ZSZXNvdXJjZSwgYXR0cmlidXRlTmFtZSBdKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6R2V0QVpzYGAgcmV0dXJucyBhbiBhcnJheSB0aGF0IGxpc3RzIEF2YWlsYWJpbGl0eSBab25lcyBmb3IgYVxuICogc3BlY2lmaWVkIHJlZ2lvbi4gQmVjYXVzZSBjdXN0b21lcnMgaGF2ZSBhY2Nlc3MgdG8gZGlmZmVyZW50IEF2YWlsYWJpbGl0eSBab25lcywgdGhlIGludHJpbnNpY1xuICogZnVuY3Rpb24gYGBGbjo6R2V0QVpzYGAgZW5hYmxlcyB0ZW1wbGF0ZSBhdXRob3JzIHRvIHdyaXRlIHRlbXBsYXRlcyB0aGF0IGFkYXB0IHRvIHRoZSBjYWxsaW5nXG4gKiB1c2VyJ3MgYWNjZXNzLiBUaGF0IHdheSB5b3UgZG9uJ3QgaGF2ZSB0byBoYXJkLWNvZGUgYSBmdWxsIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmVzIGZvciBhXG4gKiBzcGVjaWZpZWQgcmVnaW9uLlxuICovXG5leHBvcnQgY2xhc3MgRm5HZXRBWnMgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkdldEFac2BgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSBuYW1lIG9mIHRoZSByZWdpb24gZm9yIHdoaWNoIHlvdSB3YW50IHRvIGdldCB0aGUgQXZhaWxhYmlsaXR5IFpvbmVzLlxuICAgKiAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBBV1M6OlJlZ2lvbiBwc2V1ZG8gcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHJlZ2lvbiBpblxuICAgKiAgICAgICAgIHdoaWNoIHRoZSBzdGFjayBpcyBjcmVhdGVkLiBTcGVjaWZ5aW5nIGFuIGVtcHR5IHN0cmluZyBpcyBlcXVpdmFsZW50IHRvXG4gICAqICAgICAgICAgc3BlY2lmeWluZyBBV1M6OlJlZ2lvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJlZ2lvbj86IHN0cmluZykge1xuICAgIHN1cGVyKCdGbjo6R2V0QVpzJywgcmVnaW9uIHx8ICcnKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6SW1wb3J0VmFsdWVgYCByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBvdXRwdXQgZXhwb3J0ZWQgYnkgYW5vdGhlciBzdGFjay5cbiAqIFlvdSB0eXBpY2FsbHkgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIGNyb3NzLXN0YWNrIHJlZmVyZW5jZXMuIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZVxuICogdGVtcGxhdGUgc25pcHBldHMsIFN0YWNrIEEgZXhwb3J0cyBWUEMgc2VjdXJpdHkgZ3JvdXAgdmFsdWVzIGFuZCBTdGFjayBCIGltcG9ydHMgdGhlbS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuSW1wb3J0VmFsdWUgZXh0ZW5kcyBGbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkltcG9ydFZhbHVlYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBzaGFyZWRWYWx1ZVRvSW1wb3J0IFRoZSBzdGFjayBvdXRwdXQgdmFsdWUgdGhhdCB5b3Ugd2FudCB0byBpbXBvcnQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzaGFyZWRWYWx1ZVRvSW1wb3J0OiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OkltcG9ydFZhbHVlJywgc2hhcmVkVmFsdWVUb0ltcG9ydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50cmluc2ljIGZ1bmN0aW9uIGBgRm46OkpvaW5gYCBhcHBlbmRzIGEgc2V0IG9mIHZhbHVlcyBpbnRvIGEgc2luZ2xlIHZhbHVlLCBzZXBhcmF0ZWQgYnlcbiAqIHRoZSBzcGVjaWZpZWQgZGVsaW1pdGVyLiBJZiBhIGRlbGltaXRlciBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGUgc2V0IG9mIHZhbHVlcyBhcmUgY29uY2F0ZW5hdGVkXG4gKiB3aXRoIG5vIGRlbGltaXRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuSm9pbiBleHRlbmRzIEZuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWxpbWl0ZXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0T2ZWYWx1ZXM6IGFueVtdO1xuICAvLyBDYWNoZSBmb3IgdGhlIHJlc3VsdCBvZiByZXNvbHZlVmFsdWVzKCkgLSBzaW5jZSBpdCBvdGhlcndpc2Ugd291bGQgYmUgY29tcHV0ZWQgc2V2ZXJhbCB0aW1lc1xuICBwcml2YXRlIF9yZXNvbHZlZFZhbHVlcz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkpvaW5gYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGRlbGltaXRlciBUaGUgdmFsdWUgeW91IHdhbnQgdG8gb2NjdXIgYmV0d2VlbiBmcmFnbWVudHMuIFRoZSBkZWxpbWl0ZXIgd2lsbCBvY2N1ciBiZXR3ZWVuIGZyYWdtZW50cyBvbmx5LlxuICAgKiAgICAgICAgICBJdCB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGZpbmFsIHZhbHVlLlxuICAgKiBAcGFyYW0gbGlzdE9mVmFsdWVzIFRoZSBsaXN0IG9mIHZhbHVlcyB5b3Ugd2FudCBjb21iaW5lZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlbGltaXRlcjogc3RyaW5nLCBsaXN0T2ZWYWx1ZXM6IGFueVtdKSB7XG4gICAgaWYgKGxpc3RPZlZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm5Kb2luIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSB2YWx1ZSB0byBiZSBwcm92aWRlZGApO1xuICAgIH1cbiAgICAvLyBQYXNzaW5nIHRoZSB2YWx1ZXMgYXMgYSB0b2tlbiwgb3B0aW1pemF0aW9uIHJlcXVpcmVzIHJlc29sdmluZyBzdHJpbmdpZmllZCB0b2tlbnMsIHdlIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbFxuICAgIC8vIHRoaXMgdG9rZW4gaXMgaXRzZWxmIGJlaW5nIHJlc29sdmVkLlxuICAgIHN1cGVyKCdGbjo6Sm9pbicsIFsgZGVsaW1pdGVyLCBuZXcgVG9rZW4oKCkgPT4gdGhpcy5yZXNvbHZlVmFsdWVzKCkpIF0pO1xuICAgIHRoaXMuZGVsaW1pdGVyID0gZGVsaW1pdGVyO1xuICAgIHRoaXMubGlzdE9mVmFsdWVzID0gbGlzdE9mVmFsdWVzO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmUoKTogYW55IHtcbiAgICBpZiAodGhpcy5yZXNvbHZlVmFsdWVzKCkubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVmFsdWVzKClbMF07XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5yZXNvbHZlKCk7XG4gIH1cblxuICAvKipcbiAgICogT3B0aW1pemF0aW9uOiBpZiBhbiBGbjo6Sm9pbiBpcyBuZXN0ZWQgaW4gYW5vdGhlciBvbmUgYW5kIHRoZXkgc2hhcmUgdGhlIHNhbWUgZGVsaW1pdGVyLCB0aGVuIGZsYXR0ZW4gaXQgdXAuIEFsc28sXG4gICAqIGlmIHR3byBjb25jYXRlbmF0ZWQgZWxlbWVudHMgYXJlIGxpdGVyYWwgc3RyaW5ncyAobm90IHRva2VucyksIHRoZW4gcHJlLWNvbmNhdGVuYXRlIHRoZW0gd2l0aCB0aGUgZGVsaW1pdGVyLCB0b1xuICAgKiBnZW5lcmF0ZSBzaG9ydGVyIG91dHB1dC5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZVZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWRWYWx1ZXMpIHsgcmV0dXJuIHRoaXMuX3Jlc29sdmVkVmFsdWVzOyB9XG5cbiAgICBjb25zdCByZXNvbHZlZFZhbHVlcyA9IFsuLi50aGlzLmxpc3RPZlZhbHVlcy5tYXAoZSA9PiByZXNvbHZlKGUpKV07XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgcmVzb2x2ZWRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbCA9IHJlc29sdmVkVmFsdWVzW2ldO1xuICAgICAgaWYgKGlzRm5Kb2luSW50cmluc2ljV2l0aFNhbWVEZWxpbWl0ZXIuY2FsbCh0aGlzLCBlbCkpIHtcbiAgICAgICAgcmVzb2x2ZWRWYWx1ZXMuc3BsaWNlKGksIDEsIC4uLmVsWydGbjo6Sm9pbiddWzFdKTtcbiAgICAgIH0gZWxzZSBpZiAoaSA+IDAgJiYgaXNQbGFpblN0cmluZyhyZXNvbHZlZFZhbHVlc1tpIC0gMV0pICYmIGlzUGxhaW5TdHJpbmcocmVzb2x2ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgIHJlc29sdmVkVmFsdWVzW2kgLSAxXSArPSB0aGlzLmRlbGltaXRlciArIHJlc29sdmVkVmFsdWVzW2ldO1xuICAgICAgICByZXNvbHZlZFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpICs9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkVmFsdWVzID0gcmVzb2x2ZWRWYWx1ZXM7XG5cbiAgICBmdW5jdGlvbiBpc0ZuSm9pbkludHJpbnNpY1dpdGhTYW1lRGVsaW1pdGVyKHRoaXM6IEZuSm9pbiwgb2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBpc0ludHJpbnNpYyhvYmopXG4gICAgICAgICYmIE9iamVjdC5rZXlzKG9iailbMF0gPT09ICdGbjo6Sm9pbidcbiAgICAgICAgJiYgb2JqWydGbjo6Sm9pbiddWzBdID09PSB0aGlzLmRlbGltaXRlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1BsYWluU3RyaW5nKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgIXVucmVzb2x2ZWQob2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBbGlhcyBmb3IgYGBGbkpvaW4oJycsIGxpc3RPZlZhbHVlcylgYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQ29uY2F0IGV4dGVuZHMgRm5Kb2luIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6Sm9pbmBgIGZ1bmN0aW9uIHdpdGggYW4gZW1wdHkgZGVsaW1pdGVyLlxuICAgKiBAcGFyYW0gbGlzdE9mVmFsdWVzIFRoZSBsaXN0IG9mIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKC4uLmxpc3RPZlZhbHVlczogYW55W10pIHtcbiAgICBzdXBlcignJywgbGlzdE9mVmFsdWVzKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6U2VsZWN0YGAgcmV0dXJucyBhIHNpbmdsZSBvYmplY3QgZnJvbSBhIGxpc3Qgb2Ygb2JqZWN0cyBieSBpbmRleC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuU2VsZWN0IGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpTZWxlY3RgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgb2JqZWN0IHRvIHJldHJpZXZlLiBUaGlzIG11c3QgYmUgYSB2YWx1ZSBmcm9tIHplcm8gdG8gTi0xLCB3aGVyZSBOIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkuXG4gICAqIEBwYXJhbSBhcnJheSBUaGUgbGlzdCBvZiBvYmplY3RzIHRvIHNlbGVjdCBmcm9tLiBUaGlzIGxpc3QgbXVzdCBub3QgYmUgbnVsbCwgbm9yIGNhbiBpdCBoYXZlIG51bGwgZW50cmllcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGluZGV4OiBudW1iZXIsIGFycmF5OiBhbnkpIHtcbiAgICBzdXBlcignRm46OlNlbGVjdCcsIFsgaW5kZXgsIGFycmF5IF0pO1xuICB9XG59XG5cbi8qKlxuICogVG8gc3BsaXQgYSBzdHJpbmcgaW50byBhIGxpc3Qgb2Ygc3RyaW5nIHZhbHVlcyBzbyB0aGF0IHlvdSBjYW4gc2VsZWN0IGFuIGVsZW1lbnQgZnJvbSB0aGVcbiAqIHJlc3VsdGluZyBzdHJpbmcgbGlzdCwgdXNlIHRoZSBgYEZuOjpTcGxpdGBgIGludHJpbnNpYyBmdW5jdGlvbi4gU3BlY2lmeSB0aGUgbG9jYXRpb24gb2Ygc3BsaXRzXG4gKiB3aXRoIGEgZGVsaW1pdGVyLCBzdWNoIGFzICwgKGEgY29tbWEpLiBBZnRlciB5b3Ugc3BsaXQgYSBzdHJpbmcsIHVzZSB0aGUgYGBGbjo6U2VsZWN0YGAgZnVuY3Rpb25cbiAqIHRvIHBpY2sgYSBzcGVjaWZpYyBlbGVtZW50LlxuICovXG5leHBvcnQgY2xhc3MgRm5TcGxpdCBleHRlbmRzIEZuIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBgYEZuOjpTcGxpdGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gZGVsaW1pdGVyIEEgc3RyaW5nIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB3aGVyZSB0aGUgc291cmNlIHN0cmluZyBpcyBkaXZpZGVkLlxuICAgKiBAcGFyYW0gc291cmNlIFRoZSBzdHJpbmcgdmFsdWUgdGhhdCB5b3Ugd2FudCB0byBzcGxpdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlbGltaXRlcjogc3RyaW5nLCBzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyKCdGbjo6U3BsaXQnLCBbIGRlbGltaXRlciwgc291cmNlIF0pO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpTdWJgYCBzdWJzdGl0dXRlcyB2YXJpYWJsZXMgaW4gYW4gaW5wdXQgc3RyaW5nIHdpdGggdmFsdWVzIHRoYXRcbiAqIHlvdSBzcGVjaWZ5LiBJbiB5b3VyIHRlbXBsYXRlcywgeW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBjb25zdHJ1Y3QgY29tbWFuZHMgb3Igb3V0cHV0c1xuICogdGhhdCBpbmNsdWRlIHZhbHVlcyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgdW50aWwgeW91IGNyZWF0ZSBvciB1cGRhdGUgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuU3ViIGV4dGVuZHMgRm4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpTdWJgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGJvZHkgQSBzdHJpbmcgd2l0aCB2YXJpYWJsZXMgdGhhdCBBV1MgQ2xvdWRGb3JtYXRpb24gc3Vic3RpdHV0ZXMgd2l0aCB0aGVpclxuICAgKiAgICAgICBhc3NvY2lhdGVkIHZhbHVlcyBhdCBydW50aW1lLiBXcml0ZSB2YXJpYWJsZXMgYXMgJHtNeVZhck5hbWV9LiBWYXJpYWJsZXNcbiAgICogICAgICAgY2FuIGJlIHRlbXBsYXRlIHBhcmFtZXRlciBuYW1lcywgcmVzb3VyY2UgbG9naWNhbCBJRHMsIHJlc291cmNlIGF0dHJpYnV0ZXMsXG4gICAqICAgICAgIG9yIGEgdmFyaWFibGUgaW4gYSBrZXktdmFsdWUgbWFwLiBJZiB5b3Ugc3BlY2lmeSBvbmx5IHRlbXBsYXRlIHBhcmFtZXRlciBuYW1lcyxcbiAgICogICAgICAgcmVzb3VyY2UgbG9naWNhbCBJRHMsIGFuZCByZXNvdXJjZSBhdHRyaWJ1dGVzLCBkb24ndCBzcGVjaWZ5IGEga2V5LXZhbHVlIG1hcC5cbiAgICogQHBhcmFtIHZhcmlhYmxlcyBUaGUgbmFtZSBvZiBhIHZhcmlhYmxlIHRoYXQgeW91IGluY2x1ZGVkIGluIHRoZSBTdHJpbmcgcGFyYW1ldGVyLlxuICAgKiAgICAgICAgICBUaGUgdmFsdWUgdGhhdCBBV1MgQ2xvdWRGb3JtYXRpb24gc3Vic3RpdHV0ZXMgZm9yIHRoZSBhc3NvY2lhdGVkIHZhcmlhYmxlIG5hbWUgYXQgcnVudGltZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHk6IHN0cmluZywgdmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHN1cGVyKCdGbjo6U3ViJywgdmFyaWFibGVzID8gW2JvZHksIHZhcmlhYmxlc10gOiBib2R5KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRyaW5zaWMgZnVuY3Rpb24gYGBGbjo6QmFzZTY0YGAgcmV0dXJucyB0aGUgQmFzZTY0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dCBzdHJpbmcuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkIHRvIHBhc3MgZW5jb2RlZCBkYXRhIHRvIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGJ5IHdheSBvZlxuICogdGhlIFVzZXJEYXRhIHByb3BlcnR5LlxuICovXG5leHBvcnQgY2xhc3MgRm5CYXNlNjQgZXh0ZW5kcyBGbiB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6QmFzZTY0YGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdHJpbmcgdmFsdWUgeW91IHdhbnQgdG8gY29udmVydCB0byBCYXNlNjQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhOiBhbnkpIHtcbiAgICBzdXBlcignRm46OkJhc2U2NCcsIGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGludHJpbnNpYyBmdW5jdGlvbiBgYEZuOjpDaWRyYGAgcmV0dXJucyB0aGUgc3BlY2lmaWVkIENpZHIgYWRkcmVzcyBibG9jay5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQ2lkciBleHRlbmRzIEZuIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6Q2lkcmBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gaXBCbG9jayAgVGhlIHVzZXItc3BlY2lmaWVkIGRlZmF1bHQgQ2lkciBhZGRyZXNzIGJsb2NrLlxuICAgKiBAcGFyYW0gY291bnQgIFRoZSBudW1iZXIgb2Ygc3VibmV0cycgQ2lkciBibG9jayB3YW50ZWQuIENvdW50IGNhbiBiZSAxIHRvIDI1Ni5cbiAgICogQHBhcmFtIHNpemVNYXNrIFRoZSBkaWdpdCBjb3ZlcmVkIGluIHRoZSBzdWJuZXQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpcEJsb2NrOiBhbnksIGNvdW50OiBhbnksIHNpemVNYXNrPzogYW55KSB7XG4gICAgaWYgKGNvdW50IDwgMSB8fCBjb3VudCA+IDI1Nikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGbjo6Q2lkcidzIGNvdW50IGF0dHJpYnV0ZSBtdXN0IGJlIGJldHdlbiAxIGFuZCAyNTYsICR7Y291bnR9IHdhcyBwcm92aWRlZC5gKTtcbiAgICB9XG4gICAgc3VwZXIoJ0ZuOjpDaWRyJywgW2lwQmxvY2ssIGNvdW50LCBzaXplTWFza10pO1xuICB9XG59XG5cbi8qKlxuICogWW91IGNhbiB1c2UgaW50cmluc2ljIGZ1bmN0aW9ucywgc3VjaCBhcyBgYEZuOjpJZmBgLCBgYEZuOjpFcXVhbHNgYCwgYW5kIGBgRm46Ok5vdGBgLCB0byBjb25kaXRpb25hbGx5XG4gKiBjcmVhdGUgc3RhY2sgcmVzb3VyY2VzLiBUaGVzZSBjb25kaXRpb25zIGFyZSBldmFsdWF0ZWQgYmFzZWQgb24gaW5wdXQgcGFyYW1ldGVycyB0aGF0IHlvdVxuICogZGVjbGFyZSB3aGVuIHlvdSBjcmVhdGUgb3IgdXBkYXRlIGEgc3RhY2suIEFmdGVyIHlvdSBkZWZpbmUgYWxsIHlvdXIgY29uZGl0aW9ucywgeW91IGNhblxuICogYXNzb2NpYXRlIHRoZW0gd2l0aCByZXNvdXJjZXMgb3IgcmVzb3VyY2UgcHJvcGVydGllcyBpbiB0aGUgUmVzb3VyY2VzIGFuZCBPdXRwdXRzIHNlY3Rpb25zXG4gKiBvZiBhIHRlbXBsYXRlLlxuICpcbiAqIFlvdSBkZWZpbmUgYWxsIGNvbmRpdGlvbnMgaW4gdGhlIENvbmRpdGlvbnMgc2VjdGlvbiBvZiBhIHRlbXBsYXRlIGV4Y2VwdCBmb3IgYGBGbjo6SWZgYCBjb25kaXRpb25zLlxuICogWW91IGNhbiB1c2UgdGhlIGBgRm46OklmYGAgY29uZGl0aW9uIGluIHRoZSBtZXRhZGF0YSBhdHRyaWJ1dGUsIHVwZGF0ZSBwb2xpY3kgYXR0cmlidXRlLCBhbmQgcHJvcGVydHlcbiAqIHZhbHVlcyBpbiB0aGUgUmVzb3VyY2VzIHNlY3Rpb24gYW5kIE91dHB1dHMgc2VjdGlvbnMgb2YgYSB0ZW1wbGF0ZS5cbiAqXG4gKiBZb3UgbWlnaHQgdXNlIGNvbmRpdGlvbnMgd2hlbiB5b3Ugd2FudCB0byByZXVzZSBhIHRlbXBsYXRlIHRoYXQgY2FuIGNyZWF0ZSByZXNvdXJjZXMgaW4gZGlmZmVyZW50XG4gKiBjb250ZXh0cywgc3VjaCBhcyBhIHRlc3QgZW52aXJvbm1lbnQgdmVyc3VzIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4gSW4geW91ciB0ZW1wbGF0ZSwgeW91IGNhblxuICogYWRkIGFuIEVudmlyb25tZW50VHlwZSBpbnB1dCBwYXJhbWV0ZXIsIHdoaWNoIGFjY2VwdHMgZWl0aGVyIHByb2Qgb3IgdGVzdCBhcyBpbnB1dHMuIEZvciB0aGVcbiAqIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBtaWdodCBpbmNsdWRlIEFtYXpvbiBFQzIgaW5zdGFuY2VzIHdpdGggY2VydGFpbiBjYXBhYmlsaXRpZXM7XG4gKiBob3dldmVyLCBmb3IgdGhlIHRlc3QgZW52aXJvbm1lbnQsIHlvdSB3YW50IHRvIHVzZSBsZXNzIGNhcGFiaWxpdGllcyB0byBzYXZlIGNvc3RzLiBXaXRoXG4gKiBjb25kaXRpb25zLCB5b3UgY2FuIGRlZmluZSB3aGljaCByZXNvdXJjZXMgYXJlIGNyZWF0ZWQgYW5kIGhvdyB0aGV5J3JlIGNvbmZpZ3VyZWQgZm9yIGVhY2hcbiAqIGVudmlyb25tZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkNvbmRpdGlvbiBleHRlbmRzIEZuIHtcblxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgdGhlIHNwZWNpZmllZCBjb25kaXRpb25zIGV2YWx1YXRlIHRvIHRydWUsIG9yIHJldHVybnMgZmFsc2UgaWYgYW55IG9uZVxuICogIG9mIHRoZSBjb25kaXRpb25zIGV2YWx1YXRlcyB0byBmYWxzZS4gYGBGbjo6QW5kYGAgYWN0cyBhcyBhbiBBTkQgb3BlcmF0b3IuIFRoZSBtaW5pbXVtIG51bWJlciBvZlxuICogY29uZGl0aW9ucyB0aGF0IHlvdSBjYW4gaW5jbHVkZSBpcyAyLCBhbmQgdGhlIG1heGltdW0gaXMgMTAuXG4gKi9cbmV4cG9ydCBjbGFzcyBGbkFuZCBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgY29uc3RydWN0b3IoLi4uY29uZGl0aW9uOiBGbkNvbmRpdGlvbltdKSB7XG4gICAgc3VwZXIoJ0ZuOjpBbmQnLCBjb25kaXRpb24pO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGFyZXMgaWYgdHdvIHZhbHVlcyBhcmUgZXF1YWwuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHZhbHVlcyBhcmUgZXF1YWwgb3IgZmFsc2VcbiAqIGlmIHRoZXkgYXJlbid0LlxuICovXG5leHBvcnQgY2xhc3MgRm5FcXVhbHMgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkVxdWFsc2BgIGNvbmRpdGlvbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGxocyBBIHZhbHVlIG9mIGFueSB0eXBlIHRoYXQgeW91IHdhbnQgdG8gY29tcGFyZS5cbiAgICogQHBhcmFtIHJocyBBIHZhbHVlIG9mIGFueSB0eXBlIHRoYXQgeW91IHdhbnQgdG8gY29tcGFyZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGxoczogYW55LCByaHM6IGFueSkge1xuICAgIHN1cGVyKCdGbjo6RXF1YWxzJywgWyBsaHMsIHJocyBdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgb25lIHZhbHVlIGlmIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlIGFuZCBhbm90aGVyIHZhbHVlIGlmIHRoZVxuICogc3BlY2lmaWVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UuIEN1cnJlbnRseSwgQVdTIENsb3VkRm9ybWF0aW9uIHN1cHBvcnRzIHRoZSBgYEZuOjpJZmBgXG4gKiBpbnRyaW5zaWMgZnVuY3Rpb24gaW4gdGhlIG1ldGFkYXRhIGF0dHJpYnV0ZSwgdXBkYXRlIHBvbGljeSBhdHRyaWJ1dGUsIGFuZCBwcm9wZXJ0eSB2YWx1ZXNcbiAqIGluIHRoZSBSZXNvdXJjZXMgc2VjdGlvbiBhbmQgT3V0cHV0cyBzZWN0aW9ucyBvZiBhIHRlbXBsYXRlLiBZb3UgY2FuIHVzZSB0aGUgQVdTOjpOb1ZhbHVlXG4gKiBwc2V1ZG8gcGFyYW1ldGVyIGFzIGEgcmV0dXJuIHZhbHVlIHRvIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuSWYgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OklmYGAgY29uZGl0aW9uIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gY29uZGl0aW9uIEEgcmVmZXJlbmNlIHRvIGEgY29uZGl0aW9uIGluIHRoZSBDb25kaXRpb25zIHNlY3Rpb24uIFVzZSB0aGUgY29uZGl0aW9uJ3MgbmFtZSB0byByZWZlcmVuY2UgaXQuXG4gICAqIEBwYXJhbSB2YWx1ZUlmVHJ1ZSBBIHZhbHVlIHRvIGJlIHJldHVybmVkIGlmIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuICAgKiBAcGFyYW0gdmFsdWVJZkZhbHNlIEEgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZGl0aW9uOiBzdHJpbmcsIHZhbHVlSWZUcnVlOiBhbnksIHZhbHVlSWZGYWxzZTogYW55KSB7XG4gICAgc3VwZXIoJ0ZuOjpJZicsIFsgY29uZGl0aW9uLCB2YWx1ZUlmVHJ1ZSwgdmFsdWVJZkZhbHNlIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGZvciBhIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byBmYWxzZSBvciByZXR1cm5zIGZhbHNlIGZvciBhIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlLlxuICogYGBGbjo6Tm90YGAgYWN0cyBhcyBhIE5PVCBvcGVyYXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuTm90IGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpOb3RgYCBjb25kaXRpb24gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBjb25kaXRpb24gQSBjb25kaXRpb24gc3VjaCBhcyBgYEZuOjpFcXVhbHNgYCB0aGF0IGV2YWx1YXRlcyB0byB0cnVlIG9yIGZhbHNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZGl0aW9uOiBGbkNvbmRpdGlvbikge1xuICAgIHN1cGVyKCdGbjo6Tm90JywgWyBjb25kaXRpb24gXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYW55IG9uZSBvZiB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbnMgZXZhbHVhdGUgdG8gdHJ1ZSwgb3IgcmV0dXJucyBmYWxzZSBpZlxuICogYWxsIG9mIHRoZSBjb25kaXRpb25zIGV2YWx1YXRlcyB0byBmYWxzZS4gYGBGbjo6T3JgYCBhY3RzIGFzIGFuIE9SIG9wZXJhdG9yLiBUaGUgbWluaW11bSBudW1iZXJcbiAqIG9mIGNvbmRpdGlvbnMgdGhhdCB5b3UgY2FuIGluY2x1ZGUgaXMgMiwgYW5kIHRoZSBtYXhpbXVtIGlzIDEwLlxuICovXG5leHBvcnQgY2xhc3MgRm5PciBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6T3JgYCBjb25kaXRpb24gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBjb25kaXRpb24gQSBjb25kaXRpb24gdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBvciBmYWxzZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKC4uLmNvbmRpdGlvbjogRm5Db25kaXRpb25bXSkge1xuICAgIHN1cGVyKCdGbjo6T3InLCBjb25kaXRpb24pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgc3BlY2lmaWVkIHN0cmluZyBtYXRjaGVzIGF0IGxlYXN0IG9uZSB2YWx1ZSBpbiBhIGxpc3Qgb2Ygc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuQ29udGFpbnMgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkNvbnRhaW5zYGAgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBsaXN0T2ZTdHJpbmdzIEEgbGlzdCBvZiBzdHJpbmdzLCBzdWNoIGFzIFwiQVwiLCBcIkJcIiwgXCJDXCIuXG4gICAqIEBwYXJhbSB2YWx1ZSBBIHN0cmluZywgc3VjaCBhcyBcIkFcIiwgdGhhdCB5b3Ugd2FudCB0byBjb21wYXJlIGFnYWluc3QgYSBsaXN0IG9mIHN0cmluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsaXN0T2ZTdHJpbmdzOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OkNvbnRhaW5zJywgWyBsaXN0T2ZTdHJpbmdzLCB2YWx1ZSBdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIHNwZWNpZmllZCBzdHJpbmcgbWF0Y2hlcyBhbGwgdmFsdWVzIGluIGEgbGlzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuRWFjaE1lbWJlckVxdWFscyBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6RWFjaE1lbWJlckVxdWFsc2BgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbGlzdE9mU3RyaW5ncyBBIGxpc3Qgb2Ygc3RyaW5ncywgc3VjaCBhcyBcIkFcIiwgXCJCXCIsIFwiQ1wiLlxuICAgKiBAcGFyYW0gdmFsdWUgQSBzdHJpbmcsIHN1Y2ggYXMgXCJBXCIsIHRoYXQgeW91IHdhbnQgdG8gY29tcGFyZSBhZ2FpbnN0IGEgbGlzdCBvZiBzdHJpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGlzdE9mU3RyaW5nczogYW55LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ0ZuOjpFYWNoTWVtYmVyRXF1YWxzJywgWyBsaXN0T2ZTdHJpbmdzLCB2YWx1ZSBdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBlYWNoIG1lbWJlciBpbiBhIGxpc3Qgb2Ygc3RyaW5ncyBtYXRjaGVzIGF0IGxlYXN0IG9uZSB2YWx1ZSBpbiBhIHNlY29uZFxuICogbGlzdCBvZiBzdHJpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgRm5FYWNoTWVtYmVySW4gZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OkVhY2hNZW1iZXJJbmBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gc3RyaW5nc1RvQ2hlY2sgQSBsaXN0IG9mIHN0cmluZ3MsIHN1Y2ggYXMgXCJBXCIsIFwiQlwiLCBcIkNcIi4gQVdTIENsb3VkRm9ybWF0aW9uIGNoZWNrcyB3aGV0aGVyIGVhY2ggbWVtYmVyIGluIHRoZSBzdHJpbmdzX3RvX2NoZWNrIHBhcmFtZXRlciBpcyBpbiB0aGUgc3RyaW5nc190b19tYXRjaCBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSBzdHJpbmdzVG9NYXRjaCBBIGxpc3Qgb2Ygc3RyaW5ncywgc3VjaCBhcyBcIkFcIiwgXCJCXCIsIFwiQ1wiLiBFYWNoIG1lbWJlciBpbiB0aGUgc3RyaW5nc190b19tYXRjaCBwYXJhbWV0ZXIgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbWVtYmVycyBvZiB0aGUgc3RyaW5nc190b19jaGVjayBwYXJhbWV0ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdHJpbmdzVG9DaGVjazogYW55LCBzdHJpbmdzVG9NYXRjaDogYW55KSB7XG4gICAgc3VwZXIoJ0ZuOjpFYWNoTWVtYmVySW4nLCBbIFtzdHJpbmdzVG9DaGVja10sIHN0cmluZ3NUb01hdGNoIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgdmFsdWVzIGZvciBhIHNwZWNpZmllZCBwYXJhbWV0ZXIgdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuUmVmQWxsIGV4dGVuZHMgRm5Db25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBgYEZuOjpSZWZBbGxgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHBhcmFtZXRlclR5cGUgQW4gQVdTLXNwZWNpZmljIHBhcmFtZXRlciB0eXBlLCBzdWNoIGFzIEFXUzo6RUMyOjpTZWN1cml0eUdyb3VwOjpJZCBvclxuICAgKiAgICAgICAgICAgIEFXUzo6RUMyOjpWUEM6OklkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBhcmFtZXRlcnMgaW4gdGhlIEFXU1xuICAgKiAgICAgICAgICAgIENsb3VkRm9ybWF0aW9uIFVzZXIgR3VpZGUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJUeXBlOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OlJlZkFsbCcsIHBhcmFtZXRlclR5cGUpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhdHRyaWJ1dGUgdmFsdWUgb3IgbGlzdCBvZiB2YWx1ZXMgZm9yIGEgc3BlY2lmaWMgcGFyYW1ldGVyIGFuZCBhdHRyaWJ1dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBGblZhbHVlT2YgZXh0ZW5kcyBGbkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBgRm46OlZhbHVlT2ZgYCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHBhcmFtZXRlck9yTG9naWNhbElkIFRoZSBuYW1lIG9mIGEgcGFyYW1ldGVyIGZvciB3aGljaCB5b3Ugd2FudCB0byByZXRyaWV2ZSBhdHRyaWJ1dGUgdmFsdWVzLiBUaGUgcGFyYW1ldGVyIG11c3QgYmUgZGVjbGFyZWQgaW4gdGhlIFBhcmFtZXRlcnMgc2VjdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSBhdHRyaWJ1dGUgVGhlIG5hbWUgb2YgYW4gYXR0cmlidXRlIGZyb20gd2hpY2ggeW91IHdhbnQgdG8gcmV0cmlldmUgYSB2YWx1ZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlck9yTG9naWNhbElkOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ0ZuOjpWYWx1ZU9mJywgWyBwYXJhbWV0ZXJPckxvZ2ljYWxJZCwgYXR0cmlidXRlIF0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gcGFyYW1ldGVyIHR5cGUgYW5kIGF0dHJpYnV0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZuVmFsdWVPZkFsbCBleHRlbmRzIEZuQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYGBGbjo6VmFsdWVPZkFsbGBgIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyVHlwZSBBbiBBV1Mtc3BlY2lmaWMgcGFyYW1ldGVyIHR5cGUsIHN1Y2ggYXMgQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXA6OklkIG9yIEFXUzo6RUMyOjpWUEM6OklkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBhcmFtZXRlcnMgaW4gdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBVc2VyIEd1aWRlLlxuICAgKiBAcGFyYW0gYXR0cmlidXRlIFRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZSBmcm9tIHdoaWNoIHlvdSB3YW50IHRvIHJldHJpZXZlIGEgdmFsdWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGF0dHJpYnV0ZXMsIHNlZSBTdXBwb3J0ZWQgQXR0cmlidXRlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlclR5cGU6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRm46OlZhbHVlT2ZBbGwnLCBbIHBhcmFtZXRlclR5cGUsIGF0dHJpYnV0ZSBdKTtcbiAgfVxufVxuIl19

@@ -41,7 +41,2 @@ "use strict";

this.properties = props.properties || {};
// 'name' is a special property included for resource constructs and passed
// as 'name', but we don't want it to be serialized into the template.
if (this.properties.name) {
delete this.properties.name;
}
}

@@ -225,2 +220,2 @@ /**

exports.deepMerge = deepMerge;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVDQUFvRTtBQUNwRSxpRUFBNkQ7QUFHN0QsbUNBQW1FO0FBY25FOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEscUJBQWE7SUFxRHpDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBb0I7UUFDL0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQXpDdEI7O1dBRUc7UUFDYSxZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQU85Qzs7Ozs7Ozs7O1dBU0c7UUFDZ0IsNkJBQXdCLEdBQVEsRUFBRyxDQUFDO1FBU3ZEOztXQUVHO1FBQ2MsaUJBQVksR0FBUSxFQUFHLENBQUM7UUFFakMsY0FBUyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFTM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUcsQ0FBQztRQUUxQywyRUFBMkU7UUFDM0Usc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztTQUM3QjtJQUNILENBQUM7SUF2RUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBbUI7UUFDekMsT0FBTyxDQUFDLFNBQWMsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxVQUFVLElBQUksR0FBRyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsR0FBRztvQkFDRCxPQUFRLElBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFDSixDQUFDO0lBMkREOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQXFCO1FBQ2pDLE9BQU8sSUFBSSwwQ0FBbUIsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQztJQUMxSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLEdBQUcsS0FBb0I7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksV0FBVyxDQUFDLElBQVksRUFBRSxLQUFVO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUVsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUcsQ0FBQztZQUUzQiw4REFBOEQ7WUFDOUQsc0NBQXNDO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksT0FBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEcsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRyxDQUFDO2FBQ2pCO1lBRUQsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQjtRQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUcsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxtQkFBbUIsQ0FBQyxJQUFZO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksbUJBQW1CLENBQUMsWUFBb0IsRUFBRSxLQUFVO1FBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxZQUFZLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksMkJBQTJCLENBQUMsWUFBb0I7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsSUFBSTtZQUNGLDJFQUEyRTtZQUMzRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFFM0csT0FBTztnQkFDTCxTQUFTLEVBQUU7b0JBQ1QsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDO3dCQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7d0JBQ3ZCLFVBQVUsRUFBRSxrQkFBVyxDQUFDLFVBQVUsQ0FBQzt3QkFDbkMsU0FBUyxFQUFFLGtCQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUM5QyxjQUFjLEVBQUcsOEJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7d0JBQ3JFLFlBQVksRUFBRSw4QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQzt3QkFDaEUsY0FBYyxFQUFFLDhCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO3dCQUNwRSxRQUFRLEVBQUUsa0JBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzt3QkFDNUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVM7cUJBQ3RFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztpQkFDdEI7YUFDRixDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLGlCQUFpQjtZQUNqQixDQUFDLENBQUMsT0FBTyxHQUFHLHNCQUFzQixJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM1RCwrREFBK0Q7WUFDL0QsTUFBTSxhQUFhLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRixDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sT0FBTyxhQUFhLG9DQUFvQyxZQUFZLEVBQUUsQ0FBQztZQUM3RixXQUFXO1lBQ1gsTUFBTSxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxVQUFlO1FBQ3hDLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzlCLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQjtRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU5QixTQUFTLGFBQWEsQ0FBQyxDQUFjO1lBQ25DLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sU0FBUyxHQUFJLEdBQW9CLENBQUMsU0FBUyxDQUFDO2dCQUNsRCxJQUFJLFNBQVMsRUFBRTtvQkFDYixVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMzQjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsbUZBQW1GO1lBQ25GLElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEUsT0FBTzthQUNSO2lCQUFNO2dCQUNMLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN6RDtRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyTkQsNEJBcU5DO0FBd0NEOzs7R0FHRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxNQUFXLEVBQUUsTUFBVztJQUNoRCxJQUFJLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUNsSTtJQUVELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hFLG1FQUFtRTtZQUNuRSwwQ0FBMEM7WUFDMUMsSUFBSSxPQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRyxDQUFDO2FBQ25CO1lBRUQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUU5QixrRUFBa0U7WUFDbEUsOERBQThEO1lBQzlELGlFQUFpRTtZQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxPQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDbkUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEI7U0FDRjthQUFNLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjthQUFNO1lBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNyQjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQS9CRCw4QkErQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplUHJvcGVydHlOYW1lcywgaWdub3JlRW1wdHkgfSBmcm9tICcuLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25Ub2tlbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgQ3JlYXRpb25Qb2xpY3ksIERlbGV0aW9uUG9saWN5LCBVcGRhdGVQb2xpY3kgfSBmcm9tICcuL3Jlc291cmNlLXBvbGljeSc7XG5pbXBvcnQgeyBJRGVwZW5kYWJsZSwgUmVmZXJlbmNlYWJsZSwgU3RhY2tFbGVtZW50IH0gZnJvbSAnLi9zdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlLlxuICAgKi9cbiAgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHJvcGVydGllcz86IGFueTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZSBleHRlbmRzIFJlZmVyZW5jZWFibGUge1xuICAvKipcbiAgICogQSBkZWNvcmF0aW9uIHVzZWQgdG8gY3JlYXRlIGEgQ2xvdWRGb3JtYXRpb24gYXR0cmlidXRlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gY3VzdG9tTmFtZSBDdXN0b20gbmFtZSBmb3IgdGhlIGF0dHJpYnV0ZSAoZGVmYXVsdCBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkpXG4gICAqIE5PVEU6IHdlIHJldHVybiBcImFueVwiIGhlcmUgdG8gc2F0aXN0ZnkganNpaSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IGxhbWJkYXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF0dHJpYnV0ZShjdXN0b21OYW1lPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gKHByb3RvdHlwZTogYW55LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGN1c3RvbU5hbWUgfHwga2V5O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5nZXRBdHQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhpcyByZXNvdXJjZSwgc3VjaCBhcyBjb25kaXRpb24sIHVwZGF0ZSBwb2xpY3kgZXRjLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IFJlc291cmNlT3B0aW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBBV1MgcmVzb3VyY2UgdHlwZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIHJlc291cmNlIHByb3BlcnR5IG92ZXJyaWRlcy5cbiAgICpcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgdGhlIG1ldGhvZCBcInJlbmRlclByb3BlcnRpZXModGhpcy5vdmVycmlkZXMpXCIgaXMgY2FsbGVkXG4gICAqIHdpdGggdGhpcyBvYmplY3QsIGFuZCBtZXJnZWQgb24gdG9wIG9mIHRoZSBvdXRwdXQgb2ZcbiAgICogXCJyZW5kZXJQcm9wZXJ0aWVzKHRoaXMucHJvcGVydGllcylcIi5cbiAgICpcbiAgICogRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBleHBvc2UgYSBzdHJvbmdseS10eXBlZCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0IGFzXG4gICAqIGEgcHVibGljIHByb3BlcnR5IGNhbGxlZCBgcHJvcGVydHlPdmVycmlkZXNgLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHVudHlwZWRQcm9wZXJ0eU92ZXJyaWRlczogYW55ID0geyB9O1xuXG4gIC8qKlxuICAgKiBBV1MgcmVzb3VyY2UgcHJvcGVydGllcy5cbiAgICpcbiAgICogVGhpcyBvYmplY3QgaXMgcmVuZGVyZWQgdmlhIGEgY2FsbCB0byBcInJlbmRlclByb3BlcnRpZXModGhpcy5wcm9wZXJ0aWVzKVwiLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb3BlcnRpZXM6IGFueTtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHRvIGJlIG1lcmdlZCBvbiB0b3Agb2YgdGhlIGVudGlyZSByZXNvdXJjZSBkZWZpbml0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByYXdPdmVycmlkZXM6IGFueSA9IHsgfTtcblxuICBwcml2YXRlIGRlcGVuZHNPbiA9IG5ldyBBcnJheTxJRGVwZW5kYWJsZT4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlc291cmNlIGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIHJlc291cmNlVHlwZSBUaGUgQ2xvdWRGb3JtYXRpb24gdHlwZSBvZiB0aGlzIHJlc291cmNlIChlLmcuIEFXUzo6RHluYW1vREI6OlRhYmxlKVxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFJlc291cmNlUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgaWYgKCFwcm9wcy50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgdHlwZWAgcHJvcGVydHkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlVHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHMucHJvcGVydGllcyB8fCB7IH07XG5cbiAgICAvLyAnbmFtZScgaXMgYSBzcGVjaWFsIHByb3BlcnR5IGluY2x1ZGVkIGZvciByZXNvdXJjZSBjb25zdHJ1Y3RzIGFuZCBwYXNzZWRcbiAgICAvLyBhcyAnbmFtZScsIGJ1dCB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgdGVtcGxhdGUuXG4gICAgaWYgKHRoaXMucHJvcGVydGllcy5uYW1lKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB0b2tlbiBmb3IgYW4gcnVudGltZSBhdHRyaWJ1dGUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICogSWRlYWxseSwgdXNlIGdlbmVyYXRlZCBhdHRyaWJ1dGUgYWNjZXNzb3JzIChlLmcuIGByZXNvdXJjZS5hcm5gKSwgYnV0IHRoaXMgY2FuIGJlIHVzZWQgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5XG4gICAqIGluIGNhc2UgdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXRBdHQoYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHsgJ0ZuOjpHZXRBdHQnOiBbdGhpcy5sb2dpY2FsSWQsIGF0dHJpYnV0ZU5hbWVdIH0sIGAke3RoaXMubG9naWNhbElkfS4ke2F0dHJpYnV0ZU5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRlcGVuZGVuY3kgb24gYW5vdGhlciByZXNvdXJjZS5cbiAgICogQHBhcmFtIG90aGVyIFRoZSBvdGhlciByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLm90aGVyOiBJRGVwZW5kYWJsZVtdKSB7XG4gICAgdGhpcy5kZXBlbmRzT24ucHVzaCguLi5vdGhlcik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBvdmVycmlkZSB0byB0aGUgc3ludGhlc2l6ZWQgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuIFRvIGFkZCBhXG4gICAqIHByb3BlcnR5IG92ZXJyaWRlLCBlaXRoZXIgdXNlIGBhZGRQcm9wZXJ0eU92ZXJyaWRlYCBvciBwcmVmaXggYHBhdGhgIHdpdGhcbiAgICogXCJQcm9wZXJ0aWVzLlwiIChpLmUuIGBQcm9wZXJ0aWVzLlRvcGljTmFtZWApLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAgVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5LCB5b3UgY2FuIHVzZSBkb3Qgbm90YXRpb24gdG9cbiAgICogICAgICAgIG92ZXJyaWRlIHZhbHVlcyBpbiBjb21wbGV4IHR5cGVzLiBBbnkgaW50ZXJtZGVkaWF0ZSBrZXlzXG4gICAqICAgICAgICB3aWxsIGJlIGNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlLiBDb3VsZCBiZSBwcmltaXRpdmUgb3IgY29tcGxleC5cbiAgICovXG4gIHB1YmxpYyBhZGRPdmVycmlkZShwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycjogYW55ID0gdGhpcy5yYXdPdmVycmlkZXM7XG5cbiAgICB3aGlsZSAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3Qga2V5ID0gcGFydHMuc2hpZnQoKSE7XG5cbiAgICAgIC8vIGlmIHdlIGNhbid0IHJlY3Vyc2UgZnVydGhlciBvciB0aGUgcHJldmlvdXMgdmFsdWUgaXMgbm90IGFuXG4gICAgICAvLyBvYmplY3Qgb3ZlcndyaXRlIGl0IHdpdGggYW4gb2JqZWN0LlxuICAgICAgY29uc3QgaXNPYmplY3QgPSBjdXJyW2tleV0gIT0gbnVsbCAmJiB0eXBlb2YoY3VycltrZXldKSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY3VycltrZXldKTtcbiAgICAgIGlmICghaXNPYmplY3QpIHtcbiAgICAgICAgY3VycltrZXldID0geyB9O1xuICAgICAgfVxuXG4gICAgICBjdXJyID0gY3VycltrZXldO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RLZXkgPSBwYXJ0cy5zaGlmdCgpITtcbiAgICBjdXJyW2xhc3RLZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU3ludGFjdGljIHN1Z2FyIGZvciBgYWRkT3ZlcnJpZGUocGF0aCwgdW5kZWZpbmVkKWAuXG4gICAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSB2YWx1ZSB0byBkZWxldGVcbiAgICovXG4gIHB1YmxpYyBhZGREZWxldGlvbk92ZXJyaWRlKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYWRkT3ZlcnJpZGUocGF0aCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIG92ZXJyaWRlIHRvIGEgcmVzb3VyY2UgcHJvcGVydHkuXG4gICAqXG4gICAqIFN5bnRhY3RpYyBzdWdhciBmb3IgYGFkZE92ZXJyaWRlKFwiUHJvcGVydGllcy48Li4uPlwiLCB2YWx1ZSlgLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgYWRkUHJvcGVydHlPdmVycmlkZShwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuYWRkT3ZlcnJpZGUoYFByb3BlcnRpZXMuJHtwcm9wZXJ0eVBhdGh9YCwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gb3ZlcnJpZGUgdGhhdCBkZWxldGVzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGZyb20gdGhlIHJlc291cmNlIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGFkZFByb3BlcnR5RGVsZXRpb25PdmVycmlkZShwcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYWRkUHJvcGVydHlPdmVycmlkZShwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgQ2xvdWRGb3JtYXRpb24gZm9yIHRoaXMgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgIHRyeSB7XG4gICAgICAvLyBtZXJnZSBwcm9wZXJ0eSBvdmVycmlkZXMgb250byBwcm9wZXJ0aWVzIGFuZCB0aGVuIHJlbmRlciAoYW5kIHZhbGlkYXRlKS5cbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnJlbmRlclByb3BlcnRpZXMoZGVlcE1lcmdlKHRoaXMucHJvcGVydGllcyB8fCB7IH0sIHRoaXMudW50eXBlZFByb3BlcnR5T3ZlcnJpZGVzKSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IGRlZXBNZXJnZSh7XG4gICAgICAgICAgICBUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgIFByb3BlcnRpZXM6IGlnbm9yZUVtcHR5KHByb3BlcnRpZXMpLFxuICAgICAgICAgICAgRGVwZW5kc09uOiBpZ25vcmVFbXB0eSh0aGlzLnJlbmRlckRlcGVuZHNPbigpKSxcbiAgICAgICAgICAgIENyZWF0aW9uUG9saWN5OiAgY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLmNyZWF0aW9uUG9saWN5KSxcbiAgICAgICAgICAgIFVwZGF0ZVBvbGljeTogY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLnVwZGF0ZVBvbGljeSksXG4gICAgICAgICAgICBEZWxldGlvblBvbGljeTogY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLmRlbGV0aW9uUG9saWN5KSxcbiAgICAgICAgICAgIE1ldGFkYXRhOiBpZ25vcmVFbXB0eSh0aGlzLm9wdGlvbnMubWV0YWRhdGEpLFxuICAgICAgICAgICAgQ29uZGl0aW9uOiB0aGlzLm9wdGlvbnMuY29uZGl0aW9uICYmIHRoaXMub3B0aW9ucy5jb25kaXRpb24ubG9naWNhbElkXG4gICAgICAgICAgfSwgdGhpcy5yYXdPdmVycmlkZXMpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2hhbmdlIG1lc3NhZ2VcbiAgICAgIGUubWVzc2FnZSA9IGBXaGlsZSBzeW50aGVzaXppbmcgJHt0aGlzLnBhdGh9OiAke2UubWVzc2FnZX1gO1xuICAgICAgLy8gQWRqdXN0IHN0YWNrIHRyYWNlIChtYWtlIGl0IGxvb2sgbGlrZSBub2RlIGJ1aWx0IGl0LCB0b28uLi4pXG4gICAgICBjb25zdCBjcmVhdGlvblN0YWNrID0gWyctLS0gcmVzb3VyY2UgY3JlYXRlZCBhdCAtLS0nLCAuLi50aGlzLmNyZWF0aW9uU3RhY2tUcmFjZV0uam9pbignXFxuICBhdCAnKTtcbiAgICAgIGNvbnN0IHByb2JsZW1UcmFjZSA9IGUuc3RhY2suc3Vic3RyKGUuc3RhY2suaW5kZXhPZihlLm1lc3NhZ2UpICsgZS5tZXNzYWdlLmxlbmd0aCk7XG4gICAgICBlLnN0YWNrID0gYCR7ZS5tZXNzYWdlfVxcbiAgJHtjcmVhdGlvblN0YWNrfVxcbiAgLS0tIHByb2JsZW0gZGlzY292ZXJlZCBhdCAtLS0ke3Byb2JsZW1UcmFjZX1gO1xuICAgICAgLy8gUmUtdGhyb3dcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclByb3BlcnRpZXMocHJvcGVydGllczogYW55KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRlcGVuZHNPbigpIHtcbiAgICBjb25zdCBsb2dpY2FsSURzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBkIG9mIHRoaXMuZGVwZW5kc09uKSB7XG4gICAgICBhZGREZXBlbmRlbmN5KGQpO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGxvZ2ljYWxJRHMpO1xuXG4gICAgZnVuY3Rpb24gYWRkRGVwZW5kZW5jeShkOiBJRGVwZW5kYWJsZSkge1xuICAgICAgZC5kZXBlbmRlbmN5RWxlbWVudHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICBjb25zdCBsb2dpY2FsSWQgPSAoZGVwIGFzIFN0YWNrRWxlbWVudCkubG9naWNhbElkO1xuICAgICAgICBpZiAobG9naWNhbElkKSB7XG4gICAgICAgICAgbG9naWNhbElEcy5hZGQobG9naWNhbElkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGJyZWFrIGlmIGRlcGVuZGVuY3lFbGVtZW50cyBpbmNsdWRlIG9ubHkgJ2QnLCB3aGljaCBtZWFucyB3ZSByZWFjaGVkIGEgdGVybWluYWwuXG4gICAgICBpZiAoZC5kZXBlbmRlbmN5RWxlbWVudHMubGVuZ3RoID09PSAxICYmIGQuZGVwZW5kZW5jeUVsZW1lbnRzWzBdID09PSBkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQuZGVwZW5kZW5jeUVsZW1lbnRzLmZvckVhY2goZGVwID0+IGFkZERlcGVuZGVuY3koZGVwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY29uZGl0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcmVzb3VyY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmx5IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvICd0cnVlJyB3aGVuIHRoZSBzdGFja1xuICAgKiBpcyBkZXBsb3llZCwgdGhlIHJlc291cmNlIHdpbGwgYmUgaW5jbHVkZWQuIFRoaXMgaXMgcHJvdmlkZWQgdG8gYWxsb3cgQ0RLIHByb2plY3RzIHRvIHByb2R1Y2UgbGVnYWN5IHRlbXBsYXRlcywgYnV0IG5vcmFtbGx5XG4gICAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGl0IGluIENESyBwcm9qZWN0cy5cbiAgICovXG4gIGNvbmRpdGlvbj86IENvbmRpdGlvbjtcblxuICAvKipcbiAgICogQXNzb2NpYXRlIHRoZSBDcmVhdGlvblBvbGljeSBhdHRyaWJ1dGUgd2l0aCBhIHJlc291cmNlIHRvIHByZXZlbnQgaXRzIHN0YXR1cyBmcm9tIHJlYWNoaW5nIGNyZWF0ZSBjb21wbGV0ZSB1bnRpbFxuICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gcmVjZWl2ZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHN1Y2Nlc3Mgc2lnbmFscyBvciB0aGUgdGltZW91dCBwZXJpb2QgaXMgZXhjZWVkZWQuIFRvIHNpZ25hbCBhXG4gICAqIHJlc291cmNlLCB5b3UgY2FuIHVzZSB0aGUgY2ZuLXNpZ25hbCBoZWxwZXIgc2NyaXB0IG9yIFNpZ25hbFJlc291cmNlIEFQSS4gQVdTIENsb3VkRm9ybWF0aW9uIHB1Ymxpc2hlcyB2YWxpZCBzaWduYWxzXG4gICAqIHRvIHRoZSBzdGFjayBldmVudHMgc28gdGhhdCB5b3UgdHJhY2sgdGhlIG51bWJlciBvZiBzaWduYWxzIHNlbnQuXG4gICAqL1xuICBjcmVhdGlvblBvbGljeT86IENyZWF0aW9uUG9saWN5O1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgeW91IGNhbiBwcmVzZXJ2ZSBvciAoaW4gc29tZSBjYXNlcykgYmFja3VwIGEgcmVzb3VyY2Ugd2hlbiBpdHMgc3RhY2sgaXMgZGVsZXRlZC5cbiAgICogWW91IHNwZWNpZnkgYSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCB5b3Ugd2FudCB0byBjb250cm9sLiBJZiBhIHJlc291cmNlIGhhcyBubyBEZWxldGlvblBvbGljeVxuICAgKiBhdHRyaWJ1dGUsIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzIHRoZSByZXNvdXJjZSBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGFsc28gYXBwbGllcyB0byB1cGRhdGUgb3BlcmF0aW9uc1xuICAgKiB0aGF0IGxlYWQgdG8gcmVzb3VyY2VzIGJlaW5nIHJlbW92ZWQuXG4gICAqL1xuICBkZWxldGlvblBvbGljeT86IERlbGV0aW9uUG9saWN5O1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIFVwZGF0ZVBvbGljeSBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdXBkYXRlcyB0byB0aGUgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxuICAgKiByZXNvdXJjZS4gQVdTIENsb3VkRm9ybWF0aW9uIGludm9rZXMgb25lIG9mIHRocmVlIHVwZGF0ZSBwb2xpY2llcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY2hhbmdlIHlvdSBtYWtlIG9yIHdoZXRoZXIgYVxuICAgKiBzY2hlZHVsZWQgYWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICAgKi9cbiAgdXBkYXRlUG9saWN5PzogVXBkYXRlUG9saWN5O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29uc3RydWN0IG1ldGFkYXRhIHdoaWNoIGNhbiBiZSBhZGRlZFxuICAgKiB1c2luZyBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoKSwgYnV0IHdvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogTWVyZ2VzIGBzb3VyY2VgIGludG8gYHRhcmdldGAsIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIHZhbHVlcy5cbiAqIGBudWxsYHMgd2lsbCBjYXVzZSBhIHZhbHVlIHRvIGJlIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2UodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55KSB7XG4gIGlmICh0eXBlb2Yoc291cmNlKSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mKHRhcmdldCkgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVzYWdlLiBCb3RoIHNvdXJjZSAoJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpfSkgYW5kIHRhcmdldCAoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfSkgbXVzdCBiZSBvYmplY3RzYCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzb3VyY2UpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGlmIHRoZSB2YWx1ZSBhdCB0aGUgdGFyZ2V0IGlzIG5vdCBhbiBvYmplY3QsIG92ZXJyaWRlIGl0IHdpdGggYW5cbiAgICAgIC8vIG9iamVjdCBzbyB3ZSBjYW4gY29udGludWUgdGhlIHJlY3Vyc2lvblxuICAgICAgaWYgKHR5cGVvZih0YXJnZXRba2V5XSkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0geyB9O1xuICAgICAgfVxuXG4gICAgICBkZWVwTWVyZ2UodGFyZ2V0W2tleV0sIHZhbHVlKTtcblxuICAgICAgLy8gaWYgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UgaXMgYW4gZW1wdHkgb2JqZWN0LCBpdCdzIGJlY2F1c2UgdGhlXG4gICAgICAvLyBldmVudHVhbCB2YWx1ZSB3ZSBhc3NpZ25lZCBpcyBgdW5kZWZpbmVkYCwgYW5kIHRoZXJlIGFyZSBub1xuICAgICAgLy8gc2libGluZyBjb25jcmV0ZSB2YWx1ZXMgYWxvbmdzaWRlLCBzbyB3ZSBjYW4gZGVsZXRlIHRoaXMgdHJlZS5cbiAgICAgIGNvbnN0IG91dHB1dCA9IHRhcmdldFtrZXldO1xuICAgICAgaWYgKHR5cGVvZihvdXRwdXQpID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvdXRwdXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVDQUFvRTtBQUNwRSxpRUFBNkQ7QUFHN0QsbUNBQW1FO0FBY25FOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEscUJBQWE7SUFxRHpDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBb0I7UUFDL0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQXpDdEI7O1dBRUc7UUFDYSxZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQU85Qzs7Ozs7Ozs7O1dBU0c7UUFDZ0IsNkJBQXdCLEdBQVEsRUFBRyxDQUFDO1FBU3ZEOztXQUVHO1FBQ2MsaUJBQVksR0FBUSxFQUFHLENBQUM7UUFFakMsY0FBUyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFTM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUcsQ0FBQztJQUM1QyxDQUFDO0lBakVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQW1CO1FBQ3pDLE9BQU8sQ0FBQyxTQUFjLEVBQUUsR0FBVyxFQUFFLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcsVUFBVSxJQUFJLEdBQUcsQ0FBQztZQUMvQixNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ3BDLEdBQUc7b0JBQ0QsT0FBUSxJQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lB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SyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4RSxtRUFBbUU7WUFDbkUsMENBQTBDO1lBQzFDLElBQUksT0FBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDcEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUcsQ0FBQzthQUNuQjtZQUVELFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFOUIsa0VBQWtFO1lBQ2xFLDhEQUE4RDtZQUM5RCxpRUFBaUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksT0FBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ25FLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7YUFBTSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDOUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEI7YUFBTTtZQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDckI7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUEvQkQsOEJBK0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMsIGlnbm9yZUVtcHR5IH0gZnJvbSAnLi4vY29yZS91dGlsJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4gfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uLXRva2VuJztcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gJy4vY29uZGl0aW9uJztcbmltcG9ydCB7IENyZWF0aW9uUG9saWN5LCBEZWxldGlvblBvbGljeSwgVXBkYXRlUG9saWN5IH0gZnJvbSAnLi9yZXNvdXJjZS1wb2xpY3knO1xuaW1wb3J0IHsgSURlcGVuZGFibGUsIFJlZmVyZW5jZWFibGUsIFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZS5cbiAgICovXG4gIHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllcy5cbiAgICovXG4gIHByb3BlcnRpZXM/OiBhbnk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBSZWZlcmVuY2VhYmxlIHtcbiAgLyoqXG4gICAqIEEgZGVjb3JhdGlvbiB1c2VkIHRvIGNyZWF0ZSBhIENsb3VkRm9ybWF0aW9uIGF0dHJpYnV0ZSBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIGN1c3RvbU5hbWUgQ3VzdG9tIG5hbWUgZm9yIHRoZSBhdHRyaWJ1dGUgKGRlZmF1bHQgaXMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5KVxuICAgKiBOT1RFOiB3ZSByZXR1cm4gXCJhbnlcIiBoZXJlIHRvIHNhdGlzdGZ5IGpzaWksIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBsYW1iZGFzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhdHRyaWJ1dGUoY3VzdG9tTmFtZT86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIChwcm90b3R5cGU6IGFueSwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBjdXN0b21OYW1lIHx8IGtleTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuZ2V0QXR0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoaXMgcmVzb3VyY2UsIHN1Y2ggYXMgY29uZGl0aW9uLCB1cGRhdGUgcG9saWN5IGV0Yy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBSZXNvdXJjZU9wdGlvbnMgPSB7fTtcblxuICAvKipcbiAgICogQVdTIHJlc291cmNlIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFXUyByZXNvdXJjZSBwcm9wZXJ0eSBvdmVycmlkZXMuXG4gICAqXG4gICAqIER1cmluZyBzeW50aGVzaXMsIHRoZSBtZXRob2QgXCJyZW5kZXJQcm9wZXJ0aWVzKHRoaXMub3ZlcnJpZGVzKVwiIGlzIGNhbGxlZFxuICAgKiB3aXRoIHRoaXMgb2JqZWN0LCBhbmQgbWVyZ2VkIG9uIHRvcCBvZiB0aGUgb3V0cHV0IG9mXG4gICAqIFwicmVuZGVyUHJvcGVydGllcyh0aGlzLnByb3BlcnRpZXMpXCIuXG4gICAqXG4gICAqIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgZXhwb3NlIGEgc3Ryb25nbHktdHlwZWQgdmVyc2lvbiBvZiB0aGlzIG9iamVjdCBhc1xuICAgKiBhIHB1YmxpYyBwcm9wZXJ0eSBjYWxsZWQgYHByb3BlcnR5T3ZlcnJpZGVzYC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB1bnR5cGVkUHJvcGVydHlPdmVycmlkZXM6IGFueSA9IHsgfTtcblxuICAvKipcbiAgICogQVdTIHJlc291cmNlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIFRoaXMgb2JqZWN0IGlzIHJlbmRlcmVkIHZpYSBhIGNhbGwgdG8gXCJyZW5kZXJQcm9wZXJ0aWVzKHRoaXMucHJvcGVydGllcylcIi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCB0byBiZSBtZXJnZWQgb24gdG9wIG9mIHRoZSBlbnRpcmUgcmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3T3ZlcnJpZGVzOiBhbnkgPSB7IH07XG5cbiAgcHJpdmF0ZSBkZXBlbmRzT24gPSBuZXcgQXJyYXk8SURlcGVuZGFibGU+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZXNvdXJjZSBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSByZXNvdXJjZVR5cGUgVGhlIENsb3VkRm9ybWF0aW9uIHR5cGUgb2YgdGhpcyByZXNvdXJjZSAoZS5nLiBBV1M6OkR5bmFtb0RCOjpUYWJsZSlcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBSZXNvdXJjZVByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIGlmICghcHJvcHMudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHR5cGVgIHByb3BlcnR5IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZVR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BzLnByb3BlcnRpZXMgfHwgeyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB0b2tlbiBmb3IgYW4gcnVudGltZSBhdHRyaWJ1dGUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICogSWRlYWxseSwgdXNlIGdlbmVyYXRlZCBhdHRyaWJ1dGUgYWNjZXNzb3JzIChlLmcuIGByZXNvdXJjZS5hcm5gKSwgYnV0IHRoaXMgY2FuIGJlIHVzZWQgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5XG4gICAqIGluIGNhc2UgdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXRBdHQoYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHsgJ0ZuOjpHZXRBdHQnOiBbdGhpcy5sb2dpY2FsSWQsIGF0dHJpYnV0ZU5hbWVdIH0sIGAke3RoaXMubG9naWNhbElkfS4ke2F0dHJpYnV0ZU5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRlcGVuZGVuY3kgb24gYW5vdGhlciByZXNvdXJjZS5cbiAgICogQHBhcmFtIG90aGVyIFRoZSBvdGhlciByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLm90aGVyOiBJRGVwZW5kYWJsZVtdKSB7XG4gICAgdGhpcy5kZXBlbmRzT24ucHVzaCguLi5vdGhlcik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBvdmVycmlkZSB0byB0aGUgc3ludGhlc2l6ZWQgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuIFRvIGFkZCBhXG4gICAqIHByb3BlcnR5IG92ZXJyaWRlLCBlaXRoZXIgdXNlIGBhZGRQcm9wZXJ0eU92ZXJyaWRlYCBvciBwcmVmaXggYHBhdGhgIHdpdGhcbiAgICogXCJQcm9wZXJ0aWVzLlwiIChpLmUuIGBQcm9wZXJ0aWVzLlRvcGljTmFtZWApLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAgVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5LCB5b3UgY2FuIHVzZSBkb3Qgbm90YXRpb24gdG9cbiAgICogICAgICAgIG92ZXJyaWRlIHZhbHVlcyBpbiBjb21wbGV4IHR5cGVzLiBBbnkgaW50ZXJtZGVkaWF0ZSBrZXlzXG4gICAqICAgICAgICB3aWxsIGJlIGNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlLiBDb3VsZCBiZSBwcmltaXRpdmUgb3IgY29tcGxleC5cbiAgICovXG4gIHB1YmxpYyBhZGRPdmVycmlkZShwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycjogYW55ID0gdGhpcy5yYXdPdmVycmlkZXM7XG5cbiAgICB3aGlsZSAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3Qga2V5ID0gcGFydHMuc2hpZnQoKSE7XG5cbiAgICAgIC8vIGlmIHdlIGNhbid0IHJlY3Vyc2UgZnVydGhlciBvciB0aGUgcHJldmlvdXMgdmFsdWUgaXMgbm90IGFuXG4gICAgICAvLyBvYmplY3Qgb3ZlcndyaXRlIGl0IHdpdGggYW4gb2JqZWN0LlxuICAgICAgY29uc3QgaXNPYmplY3QgPSBjdXJyW2tleV0gIT0gbnVsbCAmJiB0eXBlb2YoY3VycltrZXldKSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY3VycltrZXldKTtcbiAgICAgIGlmICghaXNPYmplY3QpIHtcbiAgICAgICAgY3VycltrZXldID0geyB9O1xuICAgICAgfVxuXG4gICAgICBjdXJyID0gY3VycltrZXldO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RLZXkgPSBwYXJ0cy5zaGlmdCgpITtcbiAgICBjdXJyW2xhc3RLZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU3ludGFjdGljIHN1Z2FyIGZvciBgYWRkT3ZlcnJpZGUocGF0aCwgdW5kZWZpbmVkKWAuXG4gICAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSB2YWx1ZSB0byBkZWxldGVcbiAgICovXG4gIHB1YmxpYyBhZGREZWxldGlvbk92ZXJyaWRlKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYWRkT3ZlcnJpZGUocGF0aCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIG92ZXJyaWRlIHRvIGEgcmVzb3VyY2UgcHJvcGVydHkuXG4gICAqXG4gICAqIFN5bnRhY3RpYyBzdWdhciBmb3IgYGFkZE92ZXJyaWRlKFwiUHJvcGVydGllcy48Li4uPlwiLCB2YWx1ZSlgLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgYWRkUHJvcGVydHlPdmVycmlkZShwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuYWRkT3ZlcnJpZGUoYFByb3BlcnRpZXMuJHtwcm9wZXJ0eVBhdGh9YCwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gb3ZlcnJpZGUgdGhhdCBkZWxldGVzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGZyb20gdGhlIHJlc291cmNlIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGFkZFByb3BlcnR5RGVsZXRpb25PdmVycmlkZShwcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYWRkUHJvcGVydHlPdmVycmlkZShwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgQ2xvdWRGb3JtYXRpb24gZm9yIHRoaXMgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgIHRyeSB7XG4gICAgICAvLyBtZXJnZSBwcm9wZXJ0eSBvdmVycmlkZXMgb250byBwcm9wZXJ0aWVzIGFuZCB0aGVuIHJlbmRlciAoYW5kIHZhbGlkYXRlKS5cbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnJlbmRlclByb3BlcnRpZXMoZGVlcE1lcmdlKHRoaXMucHJvcGVydGllcyB8fCB7IH0sIHRoaXMudW50eXBlZFByb3BlcnR5T3ZlcnJpZGVzKSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IGRlZXBNZXJnZSh7XG4gICAgICAgICAgICBUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgIFByb3BlcnRpZXM6IGlnbm9yZUVtcHR5KHByb3BlcnRpZXMpLFxuICAgICAgICAgICAgRGVwZW5kc09uOiBpZ25vcmVFbXB0eSh0aGlzLnJlbmRlckRlcGVuZHNPbigpKSxcbiAgICAgICAgICAgIENyZWF0aW9uUG9saWN5OiAgY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLmNyZWF0aW9uUG9saWN5KSxcbiAgICAgICAgICAgIFVwZGF0ZVBvbGljeTogY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLnVwZGF0ZVBvbGljeSksXG4gICAgICAgICAgICBEZWxldGlvblBvbGljeTogY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zLmRlbGV0aW9uUG9saWN5KSxcbiAgICAgICAgICAgIE1ldGFkYXRhOiBpZ25vcmVFbXB0eSh0aGlzLm9wdGlvbnMubWV0YWRhdGEpLFxuICAgICAgICAgICAgQ29uZGl0aW9uOiB0aGlzLm9wdGlvbnMuY29uZGl0aW9uICYmIHRoaXMub3B0aW9ucy5jb25kaXRpb24ubG9naWNhbElkXG4gICAgICAgICAgfSwgdGhpcy5yYXdPdmVycmlkZXMpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2hhbmdlIG1lc3NhZ2VcbiAgICAgIGUubWVzc2FnZSA9IGBXaGlsZSBzeW50aGVzaXppbmcgJHt0aGlzLnBhdGh9OiAke2UubWVzc2FnZX1gO1xuICAgICAgLy8gQWRqdXN0IHN0YWNrIHRyYWNlIChtYWtlIGl0IGxvb2sgbGlrZSBub2RlIGJ1aWx0IGl0LCB0b28uLi4pXG4gICAgICBjb25zdCBjcmVhdGlvblN0YWNrID0gWyctLS0gcmVzb3VyY2UgY3JlYXRlZCBhdCAtLS0nLCAuLi50aGlzLmNyZWF0aW9uU3RhY2tUcmFjZV0uam9pbignXFxuICBhdCAnKTtcbiAgICAgIGNvbnN0IHByb2JsZW1UcmFjZSA9IGUuc3RhY2suc3Vic3RyKGUuc3RhY2suaW5kZXhPZihlLm1lc3NhZ2UpICsgZS5tZXNzYWdlLmxlbmd0aCk7XG4gICAgICBlLnN0YWNrID0gYCR7ZS5tZXNzYWdlfVxcbiAgJHtjcmVhdGlvblN0YWNrfVxcbiAgLS0tIHByb2JsZW0gZGlzY292ZXJlZCBhdCAtLS0ke3Byb2JsZW1UcmFjZX1gO1xuICAgICAgLy8gUmUtdGhyb3dcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclByb3BlcnRpZXMocHJvcGVydGllczogYW55KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRlcGVuZHNPbigpIHtcbiAgICBjb25zdCBsb2dpY2FsSURzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBkIG9mIHRoaXMuZGVwZW5kc09uKSB7XG4gICAgICBhZGREZXBlbmRlbmN5KGQpO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGxvZ2ljYWxJRHMpO1xuXG4gICAgZnVuY3Rpb24gYWRkRGVwZW5kZW5jeShkOiBJRGVwZW5kYWJsZSkge1xuICAgICAgZC5kZXBlbmRlbmN5RWxlbWVudHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICBjb25zdCBsb2dpY2FsSWQgPSAoZGVwIGFzIFN0YWNrRWxlbWVudCkubG9naWNhbElkO1xuICAgICAgICBpZiAobG9naWNhbElkKSB7XG4gICAgICAgICAgbG9naWNhbElEcy5hZGQobG9naWNhbElkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGJyZWFrIGlmIGRlcGVuZGVuY3lFbGVtZW50cyBpbmNsdWRlIG9ubHkgJ2QnLCB3aGljaCBtZWFucyB3ZSByZWFjaGVkIGEgdGVybWluYWwuXG4gICAgICBpZiAoZC5kZXBlbmRlbmN5RWxlbWVudHMubGVuZ3RoID09PSAxICYmIGQuZGVwZW5kZW5jeUVsZW1lbnRzWzBdID09PSBkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQuZGVwZW5kZW5jeUVsZW1lbnRzLmZvckVhY2goZGVwID0+IGFkZERlcGVuZGVuY3koZGVwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY29uZGl0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcmVzb3VyY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmx5IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvICd0cnVlJyB3aGVuIHRoZSBzdGFja1xuICAgKiBpcyBkZXBsb3llZCwgdGhlIHJlc291cmNlIHdpbGwgYmUgaW5jbHVkZWQuIFRoaXMgaXMgcHJvdmlkZWQgdG8gYWxsb3cgQ0RLIHByb2plY3RzIHRvIHByb2R1Y2UgbGVnYWN5IHRlbXBsYXRlcywgYnV0IG5vcmFtbGx5XG4gICAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGl0IGluIENESyBwcm9qZWN0cy5cbiAgICovXG4gIGNvbmRpdGlvbj86IENvbmRpdGlvbjtcblxuICAvKipcbiAgICogQXNzb2NpYXRlIHRoZSBDcmVhdGlvblBvbGljeSBhdHRyaWJ1dGUgd2l0aCBhIHJlc291cmNlIHRvIHByZXZlbnQgaXRzIHN0YXR1cyBmcm9tIHJlYWNoaW5nIGNyZWF0ZSBjb21wbGV0ZSB1bnRpbFxuICAgKiBBV1MgQ2xvdWRGb3JtYXRpb24gcmVjZWl2ZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHN1Y2Nlc3Mgc2lnbmFscyBvciB0aGUgdGltZW91dCBwZXJpb2QgaXMgZXhjZWVkZWQuIFRvIHNpZ25hbCBhXG4gICAqIHJlc291cmNlLCB5b3UgY2FuIHVzZSB0aGUgY2ZuLXNpZ25hbCBoZWxwZXIgc2NyaXB0IG9yIFNpZ25hbFJlc291cmNlIEFQSS4gQVdTIENsb3VkRm9ybWF0aW9uIHB1Ymxpc2hlcyB2YWxpZCBzaWduYWxzXG4gICAqIHRvIHRoZSBzdGFjayBldmVudHMgc28gdGhhdCB5b3UgdHJhY2sgdGhlIG51bWJlciBvZiBzaWduYWxzIHNlbnQuXG4gICAqL1xuICBjcmVhdGlvblBvbGljeT86IENyZWF0aW9uUG9saWN5O1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgeW91IGNhbiBwcmVzZXJ2ZSBvciAoaW4gc29tZSBjYXNlcykgYmFja3VwIGEgcmVzb3VyY2Ugd2hlbiBpdHMgc3RhY2sgaXMgZGVsZXRlZC5cbiAgICogWW91IHNwZWNpZnkgYSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCB5b3Ugd2FudCB0byBjb250cm9sLiBJZiBhIHJlc291cmNlIGhhcyBubyBEZWxldGlvblBvbGljeVxuICAgKiBhdHRyaWJ1dGUsIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzIHRoZSByZXNvdXJjZSBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGFsc28gYXBwbGllcyB0byB1cGRhdGUgb3BlcmF0aW9uc1xuICAgKiB0aGF0IGxlYWQgdG8gcmVzb3VyY2VzIGJlaW5nIHJlbW92ZWQuXG4gICAqL1xuICBkZWxldGlvblBvbGljeT86IERlbGV0aW9uUG9saWN5O1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIFVwZGF0ZVBvbGljeSBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdXBkYXRlcyB0byB0aGUgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxuICAgKiByZXNvdXJjZS4gQVdTIENsb3VkRm9ybWF0aW9uIGludm9rZXMgb25lIG9mIHRocmVlIHVwZGF0ZSBwb2xpY2llcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY2hhbmdlIHlvdSBtYWtlIG9yIHdoZXRoZXIgYVxuICAgKiBzY2hlZHVsZWQgYWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICAgKi9cbiAgdXBkYXRlUG9saWN5PzogVXBkYXRlUG9saWN5O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29uc3RydWN0IG1ldGFkYXRhIHdoaWNoIGNhbiBiZSBhZGRlZFxuICAgKiB1c2luZyBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoKSwgYnV0IHdvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogTWVyZ2VzIGBzb3VyY2VgIGludG8gYHRhcmdldGAsIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIHZhbHVlcy5cbiAqIGBudWxsYHMgd2lsbCBjYXVzZSBhIHZhbHVlIHRvIGJlIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2UodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55KSB7XG4gIGlmICh0eXBlb2Yoc291cmNlKSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mKHRhcmdldCkgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVzYWdlLiBCb3RoIHNvdXJjZSAoJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpfSkgYW5kIHRhcmdldCAoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfSkgbXVzdCBiZSBvYmplY3RzYCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzb3VyY2UpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGlmIHRoZSB2YWx1ZSBhdCB0aGUgdGFyZ2V0IGlzIG5vdCBhbiBvYmplY3QsIG92ZXJyaWRlIGl0IHdpdGggYW5cbiAgICAgIC8vIG9iamVjdCBzbyB3ZSBjYW4gY29udGludWUgdGhlIHJlY3Vyc2lvblxuICAgICAgaWYgKHR5cGVvZih0YXJnZXRba2V5XSkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0geyB9O1xuICAgICAgfVxuXG4gICAgICBkZWVwTWVyZ2UodGFyZ2V0W2tleV0sIHZhbHVlKTtcblxuICAgICAgLy8gaWYgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UgaXMgYW4gZW1wdHkgb2JqZWN0LCBpdCdzIGJlY2F1c2UgdGhlXG4gICAgICAvLyBldmVudHVhbCB2YWx1ZSB3ZSBhc3NpZ25lZCBpcyBgdW5kZWZpbmVkYCwgYW5kIHRoZXJlIGFyZSBub1xuICAgICAgLy8gc2libGluZyBjb25jcmV0ZSB2YWx1ZXMgYWxvbmdzaWRlLCBzbyB3ZSBjYW4gZGVsZXRlIHRoaXMgdHJlZS5cbiAgICAgIGNvbnN0IG91dHB1dCA9IHRhcmdldFtrZXldO1xuICAgICAgaWYgKHR5cGVvZihvdXRwdXQpID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvdXRwdXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbiJdfQ==
import { Construct } from './core/construct';
declare type ContextProviderProps = {
[key: string]: any;
};
/**

@@ -12,25 +15,22 @@ * Base class for the model side of context providers

export declare class ContextProvider {
private context;
private readonly context;
private readonly provider;
private readonly stack;
constructor(context: Construct);
private readonly props;
constructor(context: Construct, provider: string, props?: ContextProviderProps);
readonly key: string;
/**
* Read a provider value and verify it is not `null`
*/
getValue(defaultValue: any): any;
/**
* Read a provider value, verifying it's a string
* @param provider The name of the context provider
* @param scope The scope (e.g. account/region) for the value
* @param args Any arguments
* @param defaultValue The value to return if there is no value defined for this context key
*/
getStringValue(provider: string, scope: undefined | string[], args: string[], defaultValue: string): string;
getStringValue(defaultValue: string): string;
/**
* Read a provider value, verifying it's a list
* @param provider The name of the context provider
* @param scope The scope (e.g. account/region) for the value
* @param args Any arguments
* @param defaultValue The value to return if there is no value defined for this context key
*/
getStringListValue(provider: string, scope: undefined | string[], args: string[], defaultValue: string[]): string[];
/**
* Helper function to wrap up account and region into a scope tuple
*/
accountRegionScope(providerDescription: string): undefined | string[];
getStringListValue(defaultValue: string[]): string[];
}

@@ -48,2 +48,8 @@ /**

}
export interface SSMParameterProviderProps {
/**
* The name of the parameter to lookup
*/
parameterName: string;
}
/**

@@ -54,7 +60,8 @@ * Context provider that will read values from the SSM parameter store in the indicated account and region

private provider;
constructor(context: Construct);
constructor(context: Construct, props: SSMParameterProviderProps);
/**
* Return the SSM parameter string with the indicated key
*/
getString(parameterName: string, defaultValue?: string): any;
parameterValue(): any;
}
export {};

@@ -16,29 +16,54 @@ "use strict";

class ContextProvider {
constructor(context) {
constructor(context, provider, props = {}) {
this.context = context;
this.provider = provider;
this.stack = stack_1.Stack.find(context);
this.props = Object.assign({ account: this.stack.env.account, region: this.stack.env.region }, props);
}
get key() {
const propStrings = propsToArray(this.props);
return `${this.provider}:${propStrings.join(':')}`;
}
/**
* Read a provider value and verify it is not `null`
*/
getValue(defaultValue) {
// if account or region is not defined this is probably a test mode, so we just
// return the default value
if (!this.props.account || !this.props.region) {
this.context.addError(formatMissingScopeError(this.provider, this.props));
return defaultValue;
}
const value = this.context.getContext(this.key);
if (value != null) {
return value;
}
this.stack.reportMissingContext(this.key, {
provider: this.provider,
props: this.props,
});
return defaultValue;
}
/**
* Read a provider value, verifying it's a string
* @param provider The name of the context provider
* @param scope The scope (e.g. account/region) for the value
* @param args Any arguments
* @param defaultValue The value to return if there is no value defined for this context key
*/
getStringValue(provider, scope, args, defaultValue) {
getStringValue(defaultValue) {
// if scope is undefined, this is probably a test mode, so we just
// return the default value
if (!scope) {
this.context.addError(formatMissingScopeError(provider, args));
if (!this.props.account || !this.props.region) {
this.context.addError(formatMissingScopeError(this.provider, this.props));
return defaultValue;
}
const key = colonQuote([provider].concat(scope).concat(args)).join(':');
const value = this.context.getContext(key);
const value = this.context.getContext(this.key);
if (value != null) {
if (typeof value !== 'string') {
throw new TypeError(`Expected context parameter '${key}' to be a string, but got '${value}'`);
throw new TypeError(`Expected context parameter '${this.key}' to be a string, but got '${JSON.stringify(value)}'`);
}
return value;
}
this.stack.reportMissingContext(key, { provider, scope, args });
this.stack.reportMissingContext(this.key, {
provider: this.provider,
props: this.props,
});
return defaultValue;

@@ -48,42 +73,25 @@ }

* Read a provider value, verifying it's a list
* @param provider The name of the context provider
* @param scope The scope (e.g. account/region) for the value
* @param args Any arguments
* @param defaultValue The value to return if there is no value defined for this context key
*/
getStringListValue(provider, scope, args, defaultValue) {
getStringListValue(defaultValue) {
// if scope is undefined, this is probably a test mode, so we just
// return the default value and report an error so this in not accidentally used
// in the toolkit
if (!scope) {
// tslint:disable-next-line:max-line-length
this.context.addError(formatMissingScopeError(provider, args));
if (!this.props.account || !this.props.region) {
this.context.addError(formatMissingScopeError(this.provider, this.props));
return defaultValue;
}
const key = colonQuote([provider].concat(scope).concat(args)).join(':');
const value = this.context.getContext(key);
const value = this.context.getContext(this.key);
if (value != null) {
if (!value.map) {
throw new Error(`Context value '${key}' is supposed to be a list, got '${value}'`);
throw new Error(`Context value '${this.key}' is supposed to be a list, got '${JSON.stringify(value)}'`);
}
return value;
}
this.stack.reportMissingContext(key, { provider, scope, args });
this.stack.reportMissingContext(this.key, {
provider: this.provider,
props: this.props,
});
return defaultValue;
}
/**
* Helper function to wrap up account and region into a scope tuple
*/
accountRegionScope(providerDescription) {
const stack = stack_1.Stack.find(this.context);
if (!stack) {
throw new Error(`${providerDescription}: construct must be in a stack`);
}
const account = stack.env.account;
const region = stack.env.region;
if (account == null || region == null) {
return undefined;
}
return [account, region];
}
}

@@ -98,3 +106,3 @@ exports.ContextProvider = ContextProvider;

function colonQuote(xs) {
return xs.map(x => x.replace('$', '$$').replace(':', '$:'));
return xs.replace('$', '$$').replace(':', '$:');
}

@@ -106,3 +114,3 @@ /**

constructor(context) {
this.provider = new ContextProvider(context);
this.provider = new ContextProvider(context, AVAILABILITY_ZONES_PROVIDER);
}

@@ -113,3 +121,3 @@ /**

get availabilityZones() {
return this.provider.getStringListValue(AVAILABILITY_ZONES_PROVIDER, this.provider.accountRegionScope('AvailabilityZoneProvider'), [], ['dummy1a', 'dummy1b', 'dummy1c']);
return this.provider.getStringListValue(['dummy1a', 'dummy1b', 'dummy1c']);
}

@@ -122,4 +130,4 @@ }

class SSMParameterProvider {
constructor(context) {
this.provider = new ContextProvider(context);
constructor(context, props) {
this.provider = new ContextProvider(context, SSM_PARAMETER_PROVIDER, props);
}

@@ -129,14 +137,11 @@ /**

*/
getString(parameterName, defaultValue = "dummy") {
const scope = this.provider.accountRegionScope('SSMParameterProvider');
return this.provider.getStringValue(SSM_PARAMETER_PROVIDER, scope, [parameterName], defaultValue);
parameterValue() {
return this.provider.getStringValue('dummy');
}
}
exports.SSMParameterProvider = SSMParameterProvider;
function formatMissingScopeError(provider, args) {
function formatMissingScopeError(provider, props) {
let s = `Cannot determine scope for context provider ${provider}`;
if (args.length > 0) {
s += JSON.stringify(args);
}
s += '.';
const propsString = Object.keys(props).map(key => (`${key}=${props[key]}`));
s += ` with props: ${propsString}.`;
s += '\n';

@@ -146,2 +151,26 @@ s += 'This usually happens when AWS credentials are not available and the default account/region cannot be determined.';

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFBK0M7QUFHL0MsTUFBTSwyQkFBMkIsR0FBRyxvQkFBb0IsQ0FBQztBQUN6RCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQztBQUVyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsZUFBZTtJQUkxQixZQUFvQixPQUFrQjtRQUFsQixZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYyxDQUNuQixRQUFnQixFQUNoQixLQUEyQixFQUMzQixJQUFjLEVBQ2QsWUFBb0I7UUFDcEIsa0VBQWtFO1FBQ2xFLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxZQUFZLENBQUM7U0FDckI7UUFDRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQywrQkFBK0IsR0FBRyw4QkFBOEIsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUMvRjtZQUNELE9BQU8s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QUN6RCxDQUFDO0NBQ0Y7QUFoQkQsNERBZ0JDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLG9CQUFvQjtJQUcvQixZQUFZLE9BQWtCO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLGFBQXFCLEVBQUUsZUFBdUIsT0FBTztRQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNwRyxDQUFDO0NBQ0Y7QUFkRCxvREFjQztBQUVELFNBQVMsdUJBQXVCLENBQUMsUUFBZ0IsRUFBRSxJQUFjO0lBQy9ELElBQUksQ0FBQyxHQUFHLCtDQUErQyxRQUFRLEVBQUUsQ0FBQztJQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNCO0lBQ0QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNULENBQUMsSUFBSSxJQUFJLENBQUM7SUFDVixDQUFDLElBQUksa0hBQWtILENBQUM7SUFDeEgsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uL3N0YWNrJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4vY29yZS9jb25zdHJ1Y3QnO1xuXG5jb25zdCBBVkFJTEFCSUxJVFlfWk9ORVNfUFJPVklERVIgPSAnYXZhaWxhYmlsaXR5LXpvbmVzJztcbmNvbnN0IFNTTV9QQVJBTUVURVJfUFJPVklERVIgPSAnc3NtJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciB0aGUgbW9kZWwgc2lkZSBvZiBjb250ZXh0IHByb3ZpZGVyc1xuICpcbiAqIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNvbW11bmljYXRlIHdpdGggY29udGV4dCBwcm92aWRlciBwbHVnaW5zIGluIHRoZSAnY2RrXG4gKiB0b29sa2l0JyB2aWEgY29udGV4dCB2YXJpYWJsZXMgKGlucHV0KSwgb3V0cHV0dGluZyBzcGVjaWFsaXplZCBxdWVyaWVzIGZvclxuICogbW9yZSBjb250ZXh0IHZhcmlhYmxlcyAob3V0cHV0KS5cbiAqXG4gKiBDb250ZXh0UHJvdmlkZXIgbmVlZHMgYWNjZXNzIHRvIGEgQ29uc3RydWN0IHRvIGhvb2sgaW50byB0aGUgY29udGV4dCBtZWNoYW5pc20uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZXh0UHJvdmlkZXIge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2s6IFN0YWNrO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGV4dDogQ29uc3RydWN0KSB7XG4gICAgdGhpcy5zdGFjayA9IFN0YWNrLmZpbmQoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBhIHByb3ZpZGVyIHZhbHVlLCB2ZXJpZnlpbmcgaXQncyBhIHN0cmluZ1xuICAgKiBAcGFyYW0gcHJvdmlkZXIgVGhlIG5hbWUgb2YgdGhlIGNvbnRleHQgcHJvdmlkZXJcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSAoZS5nLiBhY2NvdW50L3JlZ2lvbikgZm9yIHRoZSB2YWx1ZVxuICAgKiBAcGFyYW0gYXJncyBBbnkgYXJndW1lbnRzXG4gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGVyZSBpcyBubyB2YWx1ZSBkZWZpbmVkIGZvciB0aGlzIGNvbnRleHQga2V5XG4gICAqL1xuICBwdWJsaWMgZ2V0U3RyaW5nVmFsdWUoXG4gICAgcHJvdmlkZXI6IHN0cmluZyxcbiAgICBzY29wZTogdW5kZWZpbmVkIHwgc3RyaW5nW10sXG4gICAgYXJnczogc3RyaW5nW10sXG4gICAgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIGlmIHNjb3BlIGlzIHVuZGVmaW5lZCwgdGhpcyBpcyBwcm9iYWJseSBhIHRlc3QgbW9kZSwgc28gd2UganVzdFxuICAgIC8vIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIHRoaXMuY29udGV4dC5hZGRFcnJvcihmb3JtYXRNaXNzaW5nU2NvcGVFcnJvcihwcm92aWRlciwgYXJncykpO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gY29sb25RdW90ZShbcHJvdmlkZXJdLmNvbmNhdChzY29wZSkuY29uY2F0KGFyZ3MpKS5qb2luKCc6Jyk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dChrZXkpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBjb250ZXh0IHBhcmFtZXRlciAnJHtrZXl9JyB0byBiZSBhIHN0cmluZywgYnV0IGdvdCAnJHt2YWx1ZX0nYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFjay5yZXBvcnRNaXNzaW5nQ29udGV4dChrZXksIHsgcHJvdmlkZXIsIHNjb3BlLCBhcmdzIH0pO1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBhIHByb3ZpZGVyIHZhbHVlLCB2ZXJpZnlpbmcgaXQncyBhIGxpc3RcbiAgICogQHBhcmFtIHByb3ZpZGVyIFRoZSBuYW1lIG9mIHRoZSBjb250ZXh0IHByb3ZpZGVyXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgKGUuZy4gYWNjb3VudC9yZWdpb24pIGZvciB0aGUgdmFsdWVcbiAgICogQHBhcmFtIGFyZ3MgQW55IGFyZ3VtZW50c1xuICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlcmUgaXMgbm8gdmFsdWUgZGVmaW5lZCBmb3IgdGhpcyBjb250ZXh0IGtleVxuICAgKi9cbiAgcHVibGljIGdldFN0cmluZ0xpc3RWYWx1ZShcbiAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgIHNjb3BlOiB1bmRlZmluZWQgfCBzdHJpbmdbXSxcbiAgICBhcmdzOiBzdHJpbmdbXSxcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIC8vIGlmIHNjb3BlIGlzIHVuZGVmaW5lZCwgdGhpcyBpcyBwcm9iYWJseSBhIHRlc3QgbW9kZSwgc28gd2UganVzdFxuICAgIC8vIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgcmVwb3J0IGFuIGVycm9yIHNvIHRoaXMgaW4gbm90IGFjY2lkZW50YWxseSB1c2VkXG4gICAgLy8gaW4gdGhlIHRvb2xraXRcbiAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICB0aGlzLmNvbnRleHQuYWRkRXJyb3IoZm9ybWF0TWlzc2luZ1Njb3BlRXJyb3IocHJvdmlkZXIsIGFyZ3MpKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gY29sb25RdW90ZShbcHJvdmlkZXJdLmNvbmNhdChzY29wZSkuY29uY2F0KGFyZ3MpKS5qb2luKCc6Jyk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dChrZXkpO1xuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICghdmFsdWUubWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGV4dCB2YWx1ZSAnJHtrZXl9JyBpcyBzdXBwb3NlZCB0byBiZSBhIGxpc3QsIGdvdCAnJHt2YWx1ZX0nYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFjay5yZXBvcnRNaXNzaW5nQ29udGV4dChrZXksIHsgcHJvdmlkZXIsIHNjb3BlLCBhcmdzIH0pO1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHdyYXAgdXAgYWNjb3VudCBhbmQgcmVnaW9uIGludG8gYSBzY29wZSB0dXBsZVxuICAgKi9cbiAgcHVibGljIGFjY291bnRSZWdpb25TY29wZShwcm92aWRlckRlc2NyaXB0aW9uOiBzdHJpbmcpOiB1bmRlZmluZWQgfCBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5maW5kKHRoaXMuY29udGV4dCk7XG4gICAgaWYgKCFzdGFjaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3ZpZGVyRGVzY3JpcHRpb259OiBjb25zdHJ1Y3QgbXVzdCBiZSBpbiBhIHN0YWNrYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudCA9IHN0YWNrLmVudi5hY2NvdW50O1xuICAgIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLmVudi5yZWdpb247XG5cbiAgICBpZiAoYWNjb3VudCA9PSBudWxsIHx8IHJlZ2lvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBbYWNjb3VudCwgcmVnaW9uXTtcbiAgfVxufVxuXG4vKipcbiAqIFF1b3RlIGNvbG9ucyBpbiBhbGwgc3RyaW5ncyBzbyB0aGF0IHdlIGNhbiB1bmRvIHRoZSBxdW90aW5nIGF0IGEgbGF0ZXIgcG9pbnRcbiAqXG4gKiBXZSdsbCB1c2UgJCBhcyBhIHF1b3RpbmcgY2hhcmFjdGVyLCBmb3Igbm8gcGFydGljdWxhcmx5IGdvb2QgcmVhc29uIG90aGVyXG4gKiB0aGFuIHRoYXQgXFwgaXMgZ29pbmcgdG8gbGVhZCB0byBxdW90aW5nIGhlbGwgd2hlbiB0aGUga2V5cyBhcmUgc3RvcmVkIGluIEpTT04uXG4gKi9cbmZ1bmN0aW9uIGNvbG9uUXVvdGUoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4geHMubWFwKHggPT4geC5yZXBsYWNlKCckJywgJyQkJykucmVwbGFjZSgnOicsICckOicpKTtcbn1cblxuLyoqXG4gKiBDb250ZXh0IHByb3ZpZGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGF2YWlsYWJpbGl0eSB6b25lcyBmb3IgdGhlIGN1cnJlbnQgYWNjb3VudCBhbmQgcmVnaW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIge1xuICBwcml2YXRlIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IoY29udGV4dDogQ29uc3RydWN0KSB7XG4gICAgdGhpcy5wcm92aWRlciA9IG5ldyBDb250ZXh0UHJvdmlkZXIoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIEFacyBmb3IgdGhlIGN1cnJlbnQgYWNjb3VudCBhbmQgcmVnaW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF2YWlsYWJpbGl0eVpvbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlci5nZXRTdHJpbmdMaXN0VmFsdWUoQVZBSUxBQklMSVRZX1pPTkVTX1BST1ZJREVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlci5hY2NvdW50UmVnaW9uU2NvcGUoJ0F2YWlsYWJpbGl0eVpvbmVQcm92aWRlcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJ10pO1xuICB9XG59XG5cbi8qKlxuICogQ29udGV4dCBwcm92aWRlciB0aGF0IHdpbGwgcmVhZCB2YWx1ZXMgZnJvbSB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZSBpbiB0aGUgaW5kaWNhdGVkIGFjY291bnQgYW5kIHJlZ2lvblxuICovXG5leHBvcnQgY2xhc3MgU1NNUGFyYW1ldGVyUHJvdmlkZXIge1xuICBwcml2YXRlIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IoY29udGV4dDogQ29uc3RydWN0KSB7XG4gICAgdGhpcy5wcm92aWRlciA9IG5ldyBDb250ZXh0UHJvdmlkZXIoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBTU00gcGFyYW1ldGVyIHN0cmluZyB3aXRoIHRoZSBpbmRpY2F0ZWQga2V5XG4gICAqL1xuICBwdWJsaWMgZ2V0U3RyaW5nKHBhcmFtZXRlck5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSBcImR1bW15XCIpOiBhbnkge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcm92aWRlci5hY2NvdW50UmVnaW9uU2NvcGUoJ1NTTVBhcmFtZXRlclByb3ZpZGVyJyk7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXIuZ2V0U3RyaW5nVmFsdWUoU1NNX1BBUkFNRVRFUl9QUk9WSURFUiwgc2NvcGUsIFtwYXJhbWV0ZXJOYW1lXSwgZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRNaXNzaW5nU2NvcGVFcnJvcihwcm92aWRlcjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSkge1xuICBsZXQgcyA9IGBDYW5ub3QgZGV0ZXJtaW5lIHNjb3BlIGZvciBjb250ZXh0IHByb3ZpZGVyICR7cHJvdmlkZXJ9YDtcbiAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgIHMgKz0gSlNPTi5zdHJpbmdpZnkoYXJncyk7XG4gIH1cbiAgcyArPSAnLic7XG4gIHMgKz0gJ1xcbic7XG4gIHMgKz0gJ1RoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gQVdTIGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxlIGFuZCB0aGUgZGVmYXVsdCBhY2NvdW50L3JlZ2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4nO1xuICByZXR1cm4gcztcbn1cbiJdfQ==
function propsToArray(props) {
const propArray = [];
const keys = Object.keys(props);
keys.sort();
for (const key of keys) {
switch (typeof props[key]) {
case 'object': {
const childObjStrs = propsToArray(props[key]);
const qualifiedChildStr = childObjStrs.map(child => (`${key}.${child}`)).join(':');
propArray.push(qualifiedChildStr);
break;
}
case 'string': {
propArray.push(`${key}=${colonQuote(props[key])}`);
break;
}
default: {
propArray.push(`${key}=${JSON.stringify(props[key])}`);
break;
}
}
}
return propArray;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFBK0M7QUFHL0MsTUFBTSwyQkFBMkIsR0FBRyxvQkFBb0IsQ0FBQztBQUN6RCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQztBQUdyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsZUFBZTtJQUsxQixZQUNtQixPQUFrQixFQUNsQixRQUFnQixFQUNqQyxRQUE4QixFQUFFO1FBRmYsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBRWpDLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxtQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUMxQixLQUFLLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLEdBQUc7UUFDWixNQUFNLFdBQVcsR0FBYSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsWUFBaUI7UUFDL0IsK0VBQStFO1FBQy9FLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxL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bkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi9zdGFjayc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuL2NvcmUvY29uc3RydWN0JztcblxuY29uc3QgQVZBSUxBQklMSVRZX1pPTkVTX1BST1ZJREVSID0gJ2F2YWlsYWJpbGl0eS16b25lcyc7XG5jb25zdCBTU01fUEFSQU1FVEVSX1BST1ZJREVSID0gJ3NzbSc7XG5cbnR5cGUgQ29udGV4dFByb3ZpZGVyUHJvcHMgPSB7W2tleTogc3RyaW5nXTogYW55fTtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgdGhlIG1vZGVsIHNpZGUgb2YgY29udGV4dCBwcm92aWRlcnNcbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjb21tdW5pY2F0ZSB3aXRoIGNvbnRleHQgcHJvdmlkZXIgcGx1Z2lucyBpbiB0aGUgJ2Nka1xuICogdG9vbGtpdCcgdmlhIGNvbnRleHQgdmFyaWFibGVzIChpbnB1dCksIG91dHB1dHRpbmcgc3BlY2lhbGl6ZWQgcXVlcmllcyBmb3JcbiAqIG1vcmUgY29udGV4dCB2YXJpYWJsZXMgKG91dHB1dCkuXG4gKlxuICogQ29udGV4dFByb3ZpZGVyIG5lZWRzIGFjY2VzcyB0byBhIENvbnN0cnVjdCB0byBob29rIGludG8gdGhlIGNvbnRleHQgbWVjaGFuaXNtLlxuICovXG5leHBvcnQgY2xhc3MgQ29udGV4dFByb3ZpZGVyIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBTdGFjaztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQ29udGV4dFByb3ZpZGVyUHJvcHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBDb25zdHJ1Y3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlcjogc3RyaW5nLFxuICAgIHByb3BzOiBDb250ZXh0UHJvdmlkZXJQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5zdGFjayA9IFN0YWNrLmZpbmQoY29udGV4dCk7XG4gICAgdGhpcy5wcm9wcyA9IHtcbiAgICAgIGFjY291bnQ6IHRoaXMuc3RhY2suZW52LmFjY291bnQsXG4gICAgICByZWdpb246IHRoaXMuc3RhY2suZW52LnJlZ2lvbixcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByb3BTdHJpbmdzOiBzdHJpbmdbXSA9IHByb3BzVG9BcnJheSh0aGlzLnByb3BzKTtcbiAgICByZXR1cm4gYCR7dGhpcy5wcm92aWRlcn06JHtwcm9wU3RyaW5ncy5qb2luKCc6Jyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGEgcHJvdmlkZXIgdmFsdWUgYW5kIHZlcmlmeSBpdCBpcyBub3QgYG51bGxgXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFsdWUoZGVmYXVsdFZhbHVlOiBhbnkpOiBhbnkge1xuICAgIC8vIGlmIGFjY291bnQgb3IgcmVnaW9uIGlzIG5vdCBkZWZpbmVkIHRoaXMgaXMgcHJvYmFibHkgYSB0ZXN0IG1vZGUsIHNvIHdlIGp1c3RcbiAgICAvLyByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAoIXRoaXMucHJvcHMuYWNjb3VudCB8fCAhdGhpcy5wcm9wcy5yZWdpb24pIHtcbiAgICAgIHRoaXMuY29udGV4dC5hZGRFcnJvcihmb3JtYXRNaXNzaW5nU2NvcGVFcnJvcih0aGlzLnByb3ZpZGVyLCB0aGlzLnByb3BzKSk7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQodGhpcy5rZXkpO1xuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWNrLnJlcG9ydE1pc3NpbmdDb250ZXh0KHRoaXMua2V5LCB7XG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgIH0pO1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFJlYWQgYSBwcm92aWRlciB2YWx1ZSwgdmVyaWZ5aW5nIGl0J3MgYSBzdHJpbmdcbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGRlZmluZWQgZm9yIHRoaXMgY29udGV4dCBrZXlcbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmdWYWx1ZSggZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIGlmIHNjb3BlIGlzIHVuZGVmaW5lZCwgdGhpcyBpcyBwcm9iYWJseSBhIHRlc3QgbW9kZSwgc28gd2UganVzdFxuICAgIC8vIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGlmICghdGhpcy5wcm9wcy5hY2NvdW50IHx8ICF0aGlzLnByb3BzLnJlZ2lvbikge1xuICAgICAgdGhpcy5jb250ZXh0LmFkZEVycm9yKGZvcm1hdE1pc3NpbmdTY29wZUVycm9yKHRoaXMucHJvdmlkZXIsIHRoaXMucHJvcHMpKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCh0aGlzLmtleSk7XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgY29udGV4dCBwYXJhbWV0ZXIgJyR7dGhpcy5rZXl9JyB0byBiZSBhIHN0cmluZywgYnV0IGdvdCAnJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9J2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuc3RhY2sucmVwb3J0TWlzc2luZ0NvbnRleHQodGhpcy5rZXksIHtcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGEgcHJvdmlkZXIgdmFsdWUsIHZlcmlmeWluZyBpdCdzIGEgbGlzdFxuICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlcmUgaXMgbm8gdmFsdWUgZGVmaW5lZCBmb3IgdGhpcyBjb250ZXh0IGtleVxuICAgKi9cbiAgcHVibGljIGdldFN0cmluZ0xpc3RWYWx1ZShcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgLy8gaWYgc2NvcGUgaXMgdW5kZWZpbmVkLCB0aGlzIGlzIHByb2JhYmx5IGEgdGVzdCBtb2RlLCBzbyB3ZSBqdXN0XG4gICAgICAvLyByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHJlcG9ydCBhbiBlcnJvciBzbyB0aGlzIGluIG5vdCBhY2NpZGVudGFsbHkgdXNlZFxuICAgICAgLy8gaW4gdGhlIHRvb2xraXRcbiAgICAgIGlmICghdGhpcy5wcm9wcy5hY2NvdW50IHx8ICF0aGlzLnByb3BzLnJlZ2lvbikge1xuICAgICAgICB0aGlzLmNvbnRleHQuYWRkRXJyb3IoZm9ybWF0TWlzc2luZ1Njb3BlRXJyb3IodGhpcy5wcm92aWRlciwgdGhpcy5wcm9wcykpO1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KHRoaXMua2V5KTtcblxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5tYXApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRleHQgdmFsdWUgJyR7dGhpcy5rZXl9JyBpcyBzdXBwb3NlZCB0byBiZSBhIGxpc3QsIGdvdCAnJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjay5yZXBvcnRNaXNzaW5nQ29udGV4dCh0aGlzLmtleSwge1xuICAgICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogUXVvdGUgY29sb25zIGluIGFsbCBzdHJpbmdzIHNvIHRoYXQgd2UgY2FuIHVuZG8gdGhlIHF1b3RpbmcgYXQgYSBsYXRlciBwb2ludFxuICpcbiAqIFdlJ2xsIHVzZSAkIGFzIGEgcXVvdGluZyBjaGFyYWN0ZXIsIGZvciBubyBwYXJ0aWN1bGFybHkgZ29vZCByZWFzb24gb3RoZXJcbiAqIHRoYW4gdGhhdCBcXCBpcyBnb2luZyB0byBsZWFkIHRvIHF1b3RpbmcgaGVsbCB3aGVuIHRoZSBrZXlzIGFyZSBzdG9yZWQgaW4gSlNPTi5cbiAqL1xuZnVuY3Rpb24gY29sb25RdW90ZSh4czogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHhzLnJlcGxhY2UoJyQnLCAnJCQnKS5yZXBsYWNlKCc6JywgJyQ6Jyk7XG59XG5cbi8qKlxuICogQ29udGV4dCBwcm92aWRlciB0aGF0IHdpbGwgcmV0dXJuIHRoZSBhdmFpbGFiaWxpdHkgem9uZXMgZm9yIHRoZSBjdXJyZW50IGFjY291bnQgYW5kIHJlZ2lvblxuICovXG5leHBvcnQgY2xhc3MgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSBwcm92aWRlcjogQ29udGV4dFByb3ZpZGVyO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnN0cnVjdCkge1xuICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgQ29udGV4dFByb3ZpZGVyKGNvbnRleHQsIEFWQUlMQUJJTElUWV9aT05FU19QUk9WSURFUik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIEFacyBmb3IgdGhlIGN1cnJlbnQgYWNjb3VudCBhbmQgcmVnaW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF2YWlsYWJpbGl0eVpvbmVzKCk6IHN0cmluZ1tdIHtcblxuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmdldFN0cmluZ0xpc3RWYWx1ZShbJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJ10pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1NNUGFyYW1ldGVyUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHRvIGxvb2t1cFxuICAgKi9cbiAgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xufVxuLyoqXG4gKiBDb250ZXh0IHByb3ZpZGVyIHRoYXQgd2lsbCByZWFkIHZhbHVlcyBmcm9tIHRoZSBTU00gcGFyYW1ldGVyIHN0b3JlIGluIHRoZSBpbmRpY2F0ZWQgYWNjb3VudCBhbmQgcmVnaW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBTU01QYXJhbWV0ZXJQcm92aWRlciB7XG4gIHByaXZhdGUgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlcjtcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb25zdHJ1Y3QsIHByb3BzOiBTU01QYXJhbWV0ZXJQcm92aWRlclByb3BzKSB7XG4gICAgdGhpcy5wcm92aWRlciA9IG5ldyBDb250ZXh0UHJvdmlkZXIoY29udGV4dCwgU1NNX1BBUkFNRVRFUl9QUk9WSURFUiwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgU1NNIHBhcmFtZXRlciBzdHJpbmcgd2l0aCB0aGUgaW5kaWNhdGVkIGtleVxuICAgKi9cbiAgcHVibGljIHBhcmFtZXRlclZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXIuZ2V0U3RyaW5nVmFsdWUoJ2R1bW15Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlzc2luZ1Njb3BlRXJyb3IocHJvdmlkZXI6IHN0cmluZywgcHJvcHM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gIGxldCBzID0gYENhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgJHtwcm92aWRlcn1gO1xuICBjb25zdCBwcm9wc1N0cmluZyA9IE9iamVjdC5rZXlzKHByb3BzKS5tYXAoIGtleSA9PiAoYCR7a2V5fT0ke3Byb3BzW2tleV19YCkpO1xuICBzICs9IGAgd2l0aCBwcm9wczogJHtwcm9wc1N0cmluZ30uYDtcbiAgcyArPSAnXFxuJztcbiAgcyArPSAnVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiBBV1MgY3JlZGVudGlhbHMgYXJlIG5vdCBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0IGFjY291bnQvcmVnaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLic7XG4gIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBwcm9wc1RvQXJyYXkocHJvcHM6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogc3RyaW5nW10ge1xuICBjb25zdCBwcm9wQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG4gIGtleXMuc29ydCgpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcHNba2V5XSkge1xuICAgICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgICBjb25zdCBjaGlsZE9ialN0cnMgPSBwcm9wc1RvQXJyYXkocHJvcHNba2V5XSk7XG4gICAgICAgIGNvbnN0IHF1YWxpZmllZENoaWxkU3RyID0gY2hpbGRPYmpTdHJzLm1hcCggY2hpbGQgPT4gKGAke2tleX0uJHtjaGlsZH1gKSkuam9pbignOicpO1xuICAgICAgICBwcm9wQXJyYXkucHVzaChxdWFsaWZpZWRDaGlsZFN0cik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3RyaW5nJzoge1xuICAgICAgICBwcm9wQXJyYXkucHVzaChgJHtrZXl9PSR7Y29sb25RdW90ZShwcm9wc1trZXldKX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHByb3BBcnJheS5wdXNoKGAke2tleX09JHtKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wQXJyYXk7XG59XG4iXX0=

@@ -76,3 +76,3 @@ /**

*/
export declare function unresolved(obj: any): obj is Token;
export declare function unresolved(obj: any): boolean;
/**

@@ -79,0 +79,0 @@ * Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays.

@@ -362,2 +362,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUV4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLEtBQUs7SUFHaEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILFlBQTZCLGVBQXFCLEVBQW1CLFdBQW9CO1FBQTVELG9CQUFlLEdBQWYsZUFBZSxDQUFNO1FBQW1CLGdCQUFXLEdBQVgsV0FBVyxDQUFTO0lBQ3pGLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2pDLElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUNoQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksUUFBUTtRQUNiLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxpRUFBaUU7UUFDakUsdUJBQXVCO1FBQ3ZCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDL0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU07UUFDWCwyQ0FBMkM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw2SEFBNkgsQ0FBQyxDQUFDO0lBQ2pKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxJQUFxQixFQUFFLEtBQXNCO1FBQ3pELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQW5GRCxzQkFtRkM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEdBQVE7SUFDakMsSUFBSSxPQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU8sZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDdkQ7U0FBTTtRQUNMLE9BQU8sT0FBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBYyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUM7S0FDbkQ7QUFDSCxDQUFDO0FBTkQsZ0NBTUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixPQUFPLENBQUMsR0FBUSxFQUFFLE1BQWlCO0lBQ2pELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxFQUFHLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEMsdURBQXVEO0lBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsR0FBRyxRQUFRLENBQUMsQ0FBQztLQUM3RjtJQUVELEVBQUU7SUFDRixZQUFZO0lBQ1osRUFBRTtJQUVGLElBQUksT0FBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsRUFBRTtRQUMvQixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELEVBQUU7SUFDRixPQUFPO0lBQ1AsRUFBRTtJQUVGLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtRQUNoQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsRUFBRTtJQUNGLHdEQUF3RDtJQUN4RCxFQUFFO0lBRUYsSUFBSSxPQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEZBQTRGLFFBQVEsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ3pJO0lBRUQsRUFBRTtJQUNGLHNEQUFzRDtJQUN0RCxFQUFFO0lBQ0YsSUFBSSxPQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEdBQWEsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsRUFBRTtJQUNGLHFCQUFxQjtJQUNyQixFQUFFO0lBRUYsSUFBSSxPQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLEdBQUcsWUFBWSxJQUFJLEVBQUU7UUFDbkQsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELEVBQUU7SUFDRixnRUFBZ0U7SUFDaEUsRUFBRTtJQUVGLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxzQkFBYyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFFRCxFQUFFO0lBQ0Ysd0VBQXdFO0lBQ3hFLEVBQUU7SUFFRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxHQUFHLEdBQUcsR0FBRzthQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3BELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQztRQUUxQyxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsRUFBRTtJQUNGLG9DQUFvQztJQUNwQyxFQUFFO0lBRUYsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSxxQ0FBcUM7SUFDckMsSUFBSSxHQUFHLFlBQVkscUJBQVMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0tBQ25FO0lBRUQsTUFBTSxNQUFNLEdBQVEsRUFBRyxDQUFDO0lBQ3hCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxPQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLDBCQUEwQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQzVIO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbEQsaUJBQWlCO1FBQ2pCLElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUNqQyxTQUFTO1NBQ1Y7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQzdCO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQWxHRCwwQkFrR0M7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sY0FBYztJQUdsQjtRQUNFLE1BQU0sSUFBSSxHQUFHLE1BQWEsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxRQUFRLENBQUMsS0FBWSxFQUFFLGtCQUEyQjtRQUN2RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbEQsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLElBQUksT0FBTyxDQUFDO1FBRXJELE1BQU0sR0FBRyxHQUFHLEdBQUcsY0FBYyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzNDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDM0IsT0FBTyxHQUFHLGtCQUFrQixHQUFHLEdBQUcsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLENBQVM7UUFDaEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxlQUFlLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxDQUFTO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLEdBQVc7UUFDNUIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQUVELE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQW9COUM7O0dBRUc7QUFDSCxNQUFNLFdBQVc7SUFHZixZQUNtQixHQUFXLEVBQ1gsV0FBbUIsRUFDbkIsU0FBaUIsRUFDakIsU0FBaUI7UUFIakIsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUNuRyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsTUFBNkI7UUFDeEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFFdkMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsT0FBTyxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFO2dCQUNsQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNsRDtZQUVELEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDcEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1QsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQVdEOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0I7SUFBMUI7UUFDbUIsY0FBUyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7SUE0Q3JELENBQUM7SUExQ1EsTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTSxTQUFTLENBQUMsR0FBVztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQVk7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztTQUFFO1FBQy9DLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQUU7UUFFL0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsQ0FBQztRQUNOLElBQUksS0FBWSxDQUFDO1FBRWpCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDMUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNQO2FBQU07WUFDTCxxQ0FBcUM7WUFDckMsS0FBSyxHQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1A7UUFFRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNoQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsRUFBRSxDQUFDO1NBQ0w7UUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWtCO0lBQ3pDLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUMzQixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCIuL2NvbnN0cnVjdFwiO1xuXG4vKipcbiAqIElmIG9iamVjdHMgaGFzIGEgZnVuY3Rpb24gcHJvcGVydHkgYnkgdGhpcyBuYW1lLCB0aGV5IHdpbGwgYmUgY29uc2lkZXJlZCB0b2tlbnMsIGFuZCB0aGlzXG4gKiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byByZXNvbHZlIHRoZSB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVNPTFZFX01FVEhPRCA9ICdyZXNvbHZlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3BlY2lhbCBvciBsYXppbHktZXZhbHVhdGVkIHZhbHVlLlxuICpcbiAqIENhbiBiZSB1c2VkIHRvIGRlbGF5IGV2YWx1YXRpb24gb2YgYSBjZXJ0YWluIHZhbHVlIGluIGNhc2UsIGZvciBleGFtcGxlLFxuICogdGhhdCBpdCByZXF1aXJlcyBzb21lIGNvbnRleHQgb3IgbGF0ZS1ib3VuZCBkYXRhLiBDYW4gYWxzbyBiZSB1c2VkIHRvXG4gKiBtYXJrIHZhbHVlcyB0aGF0IG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGF0IGRvY3VtZW50IHJlbmRlcmluZyB0aW1lLlxuICpcbiAqIFRva2VucyBjYW4gYmUgZW1iZWRkZWQgaW50byBzdHJpbmdzIHdoaWxlIHJldGFpbmluZyB0aGVpciBvcmlnaW5hbFxuICogc2VtYW50aWNzLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW4ge1xuICBwcml2YXRlIHRva2VuS2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdG9rZW4gdGhhdCByZXNvbHZlcyB0byBgdmFsdWVgLlxuICAgKlxuICAgKiBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIHVwb24gcmVzb2x1dGlvbiBhbmRcbiAgICogdGhlIHZhbHVlIGl0IHJldHVybnMgd2lsbCBiZSB1c2VkIGFzIHRoZSB0b2tlbidzIHZhbHVlLlxuICAgKlxuICAgKiBkaXNwbGF5TmFtZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgVG9rZW4gd2hlbiBpdCdzIGVtYmVkZGVkIGludG8gYSBzdHJpbmc7IGl0XG4gICAqIHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgKlxuICAgKiAgICBcImVtYmVkZGVkIGluIGEgbGFyZ2VyIHN0cmluZyBpcyAke1Rva2VuW0RJU1BMQVlfTkFNRS4xMjNdfVwiXG4gICAqXG4gICAqIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhIGhpbnQgdG8gaHVtYW5zIHdoYXQgdGhlIG1lYW5pbmcgb2YgdGhlIFRva2VuIGlzLFxuICAgKiBhbmQgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBNdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgYW5kIHNpbXBsZSBzZXBhcmF0b3IgY2hhcmFjdGVycyAoXy46LSkuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZU9yRnVuY3Rpb24gV2hhdCB0aGlzIHRva2VuIHdpbGwgZXZhbHVhdGUgdG8sIGxpdGVyYWwgb3IgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBkaXNwbGF5TmFtZSBBIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgaGludCBmb3IgdGhpcyBUb2tlblxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2YWx1ZU9yRnVuY3Rpb24/OiBhbnksIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZSgpOiBhbnkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVPckZ1bmN0aW9uO1xuICAgIGlmICh0eXBlb2YodmFsdWUpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJldmVyc2libGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdG9rZW5cbiAgICpcbiAgICogSWYgdGhlIFRva2VuIGlzIGluaXRpYWxpemVkIHdpdGggYSBsaXRlcmFsLCB0aGUgc3RyaW5naWZpZWQgdmFsdWUgb2YgdGhlXG4gICAqIGxpdGVyYWwgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBzcGVjaWFsIHF1b3RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIFRva2VuIGlzIHJldHVybmVkIHRoYXQgY2FuIGJlIGVtYmVkZGVkIGludG8gb3RoZXIgc3RyaW5ncy5cbiAgICpcbiAgICogU3RyaW5ncyB3aXRoIHF1b3RlZCBUb2tlbnMgaW4gdGhlbSBjYW4gYmUgcmVzdG9yZWQgYmFjayBpbnRvXG4gICAqIGNvbXBsZXggdmFsdWVzIHdpdGggdGhlIFRva2VucyByZXN0b3JlZCBieSBjYWxsaW5nIGByZXNvbHZlKClgXG4gICAqIG9uIHRoZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSB0eXBlb2YgdGhpcy52YWx1ZU9yRnVuY3Rpb247XG4gICAgLy8gT3B0aW1pemF0aW9uOiBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgcmVzb2x2ZSB0aGlzLCBkb24ndCBib3RoZXJcbiAgICAvLyByZWdpc3RlcmluZyBhIFRva2VuLlxuICAgIGlmICh2YWx1ZVR5cGUgPT09ICdzdHJpbmcnIHx8IHZhbHVlVHlwZSA9PT0gJ251bWJlcicgfHwgdmFsdWVUeXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlT3JGdW5jdGlvbi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2VuS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudG9rZW5LZXkgPSBUT0tFTl9TVFJJTkdfTUFQLnJlZ2lzdGVyKHRoaXMsIHRoaXMuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbktleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIHRoaXMgVG9rZW4gaW50byBKU09OXG4gICAqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgSlNPTi5zdHJpbmdpZnkoKS4gV2Ugd2FudCB0byBwcm9oaWJpdCB0aGlzLCBiZWNhdXNlXG4gICAqIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGRvIHRoaXMgcHJvcGVybHksIHNvIHdlIGp1c3QgdGhyb3cgYW4gZXJyb3IgaGVyZS5cbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeSgpIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHN0cnVjdHVyZSB3aXRoIGEgVG9rZW4gaW4gaXQuIFVzZSBhIGRvY3VtZW50LXNwZWNpZmljIHN0cmluZ2lmaWNhdGlvbiBtZXRob2QgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb25jYXRlZCB2ZXJzaW9uIG9mIHRoaXMgVG9rZW4gaW4gYSBzdHJpbmcgY29udGV4dFxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNvbWJpbmVzIHN0cmluZ3MsIGJ1dCBzcGVjaWFsaXplZFxuICAgKiBpbXBsZW1lbnRzIG9mIFRva2VuIGNhbiByZXR1cm4gYSBtb3JlIGFwcHJvcHJpYXRlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGNvbmNhdChsZWZ0OiBhbnkgfCB1bmRlZmluZWQsIHJpZ2h0OiBhbnkgfCB1bmRlZmluZWQpOiBUb2tlbiB7XG4gICAgY29uc3QgcGFydHMgPSBbbGVmdCwgcmVzb2x2ZSh0aGlzKSwgcmlnaHRdLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG5ldyBUb2tlbihwYXJ0cy5tYXAoeCA9PiBgJHt4fWApLmpvaW4oJycpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvYmogaXMgYSB0b2tlbiAoaS5lLiBoYXMgdGhlIHJlc29sdmUoKSBtZXRob2Qgb3IgaXMgYSBzdHJpbmdcbiAqIHRoYXQgaW5jbHVkZXMgdG9rZW4gbWFya2VycykuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVzb2x2ZWQob2JqOiBhbnkpOiBvYmogaXMgVG9rZW4ge1xuICBpZiAodHlwZW9mKG9iaikgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFRPS0VOX1NUUklOR19NQVAuY3JlYXRlVG9rZW5TdHJpbmcob2JqKS50ZXN0KCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHR5cGVvZihvYmpbUkVTT0xWRV9NRVRIT0RdKSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIG9iamVjdCBieSBldmFsdWF0aW5nIGFsbCB0b2tlbnMgYW5kIHJlbW92aW5nIGFueSB1bmRlZmluZWQgb3IgZW1wdHkgb2JqZWN0cyBvciBhcnJheXMuXG4gKiBWYWx1ZXMgY2FuIG9ubHkgYmUgcHJpbWl0aXZlcywgYXJyYXlzIG9yIHRva2Vucy4gT3RoZXIgb2JqZWN0cyAoaS5lLiB3aXRoIG1ldGhvZHMpIHdpbGwgYmUgcmVqZWN0ZWQuXG4gKlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gcHJlZml4IFByZWZpeCBrZXkgcGF0aCBjb21wb25lbnRzIGZvciBkaWFnbm9zdGljcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUob2JqOiBhbnksIHByZWZpeD86IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3QgcGF0aCA9IHByZWZpeCB8fCBbIF07XG4gIGNvbnN0IHBhdGhOYW1lID0gJy8nICsgcGF0aC5qb2luKCcvJyk7XG5cbiAgLy8gcHJvdGVjdCBhZ2FpbnN0IGN5Y2xpYyByZWZlcmVuY2VzIGJ5IGxpbWl0aW5nIGRlcHRoLlxuICBpZiAocGF0aC5sZW5ndGggPiAyMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIG9iamVjdCB0cmVlIHdpdGggY2lyY3VsYXIgcmVmZXJlbmNlLiBQYXRoOiAnICsgcGF0aE5hbWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gdW5kZWZpbmVkXG4gIC8vXG5cbiAgaWYgKHR5cGVvZihvYmopID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvL1xuICAvLyBudWxsXG4gIC8vXG5cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy9cbiAgLy8gZnVuY3Rpb25zIC0gbm90IHN1cHBvcnRlZCAob25seSB0b2tlbnMgYXJlIHN1cHBvcnRlZClcbiAgLy9cblxuICBpZiAodHlwZW9mKG9iaikgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byByZXNvbHZlIGEgbm9uLWRhdGEgb2JqZWN0LiBPbmx5IHRva2VuIGFyZSBzdXBwb3J0ZWQgZm9yIGxhenkgZXZhbHVhdGlvbi4gUGF0aDogJHtwYXRoTmFtZX0uIE9iamVjdDogJHtvYmp9YCk7XG4gIH1cblxuICAvL1xuICAvLyBzdHJpbmcgLSBwb3RlbnRpYWxseSByZXBsYWNlIGFsbCBzdHJpbmdpZmllZCBUb2tlbnNcbiAgLy9cbiAgaWYgKHR5cGVvZihvYmopID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBUT0tFTl9TVFJJTkdfTUFQLnJlc29sdmVNYXJrZXJzKG9iaiBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLy9cbiAgLy8gcHJpbWl0aXZlcyAtIGFzLWlzXG4gIC8vXG5cbiAgaWYgKHR5cGVvZihvYmopICE9PSAnb2JqZWN0JyB8fCBvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vXG4gIC8vIHRva2VucyAtIGludm9rZSAncmVzb2x2ZScgYW5kIGNvbnRpbnVlIHRvIHJlc29sdmUgcmVjdXJzaXZlbHlcbiAgLy9cblxuICBpZiAodW5yZXNvbHZlZChvYmopKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmpbUkVTT0xWRV9NRVRIT0RdKCk7XG4gICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgLy9cbiAgLy8gYXJyYXlzIC0gcmVzb2x2ZSBhbGwgdmFsdWVzLCByZW1vdmUgdW5kZWZpbmVkIGFuZCByZW1vdmUgZW1wdHkgYXJyYXlzXG4gIC8vXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGNvbnN0IGFyciA9IG9ialxuICAgICAgLm1hcCgoeCwgaSkgPT4gcmVzb2x2ZSh4LCBwYXRoLmNvbmNhdChpLnRvU3RyaW5nKCkpKSlcbiAgICAgIC5maWx0ZXIoeCA9PiB0eXBlb2YoeCkgIT09ICd1bmRlZmluZWQnKTtcblxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICAvL1xuICAvLyBvYmplY3RzIC0gZGVlcC1yZXNvbHZlIGFsbCB2YWx1ZXNcbiAgLy9cblxuICAvLyBNdXN0IG5vdCBiZSBhIENvbnN0cnVjdCBhdCB0aGlzIHBvaW50LCBvdGhlcndpc2UgeW91IHByb2JhYmx5IG1hZGUgYSB0eXBlXG4gIC8vIG1pc3Rha2Ugc29tZXdoZXJlIGFuZCByZXNvbHZlIHdpbGwgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCByZWN1cnNpbmcgaW50b1xuICAvLyBjaGlsZC5wYXJlbnQgPC0tLT4gcGFyZW50LmNoaWxkcmVuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBDb25zdHJ1Y3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byByZXNvbHZlKCkgYSBDb25zdHJ1Y3QgYXQgJyArIHBhdGhOYW1lKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogYW55ID0geyB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRLZXkgPSByZXNvbHZlKGtleSk7XG4gICAgaWYgKHR5cGVvZihyZXNvbHZlZEtleSkgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBrZXkgXCIke2tleX1cIiBoYXMgYmVlbiByZXNvbHZlZCB0byAke0pTT04uc3RyaW5naWZ5KHJlc29sdmVkS2V5KX0gYnV0IG11c3QgYmUgcmVzb2x2YWJsZSB0byBhIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZShvYmpba2V5XSwgcGF0aC5jb25jYXQoa2V5KSk7XG5cbiAgICAvLyBza2lwIHVuZGVmaW5lZFxuICAgIGlmICh0eXBlb2YodmFsdWUpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W3Jlc29sdmVkS2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDZW50cmFsIHBsYWNlIHdoZXJlIHdlIGtlZXAgYSBtYXBwaW5nIGZyb20gVG9rZW5zIHRvIHRoZWlyIFN0cmluZyByZXByZXNlbnRhdGlvblxuICpcbiAqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgdXNlZCB0byBlbWJlZCB0b2tlbiBpbnRvIHN0cmluZ3MsXG4gKiBhbmQgc3RvcmVkIHRvIGJlIGFibGUgdG9cbiAqXG4gKiBBbGwgaW5zdGFuY2VzIG9mIFRva2VuU3RyaW5nTWFwIHNoYXJlIHRoZSBzYW1lIHN0b3JhZ2UsIHNvIHRoYXQgdGhpcyBwcm9jZXNzXG4gKiB3b3JrcyBldmVuIHdoZW4gZGlmZmVyZW50IGNvcGllcyBvZiB0aGUgbGlicmFyeSBhcmUgbG9hZGVkLlxuICovXG5jbGFzcyBUb2tlblN0cmluZ01hcCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9rZW5NYXA6IHtba2V5OiBzdHJpbmddOiBUb2tlbn07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZ2xvYiA9IGdsb2JhbCBhcyBhbnk7XG4gICAgdGhpcy50b2tlbk1hcCA9IGdsb2IuX19jZGtUb2tlbk1hcCA9IGdsb2IuX19jZGtUb2tlbk1hcCB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0aW5nIGEgdW5pcXVlIHN0cmluZyBmb3IgdGhpcyBUb2tlbiwgcmV0dXJuaW5nIGEga2V5XG4gICAqXG4gICAqIEV2ZXJ5IGNhbGwgZm9yIHRoZSBzYW1lIFRva2VuIHdpbGwgcHJvZHVjZSBhIG5ldyB1bmlxdWUgc3RyaW5nLCBub1xuICAgKiBhdHRlbXB0IGlzIG1hZGUgdG8gZGVkdXBsaWNhdGUuIFRva2VuIG9iamVjdHMgc2hvdWxkIGNhY2hlIHRoZVxuICAgKiB2YWx1ZSB0aGVtc2VsdmVzLCBpZiByZXF1aXJlZC5cbiAgICpcbiAgICogVGhlIHRva2VuIGNhbiBjaG9vc2UgKHBhcnQgb2YpIGl0cyBvd24gcmVwcmVzZW50YXRpb24gc3RyaW5nIHdpdGggYVxuICAgKiBoaW50LiBUaGlzIG1heSBiZSB1c2VkIHRvIHByb2R1Y2UgYWVzdGhldGljYWxseSBwbGVhc2luZyBhbmRcbiAgICogcmVjb2duaXphYmxlIHRva2VuIHJlcHJlc2VudGF0aW9ucyBmb3IgaHVtYW5zLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyKHRva2VuOiBUb2tlbiwgcmVwcmVzZW50YXRpb25IaW50Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50b2tlbk1hcCkubGVuZ3RoO1xuICAgIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25IaW50IHx8IGBUT0tFTmA7XG5cbiAgICBjb25zdCBrZXkgPSBgJHtyZXByZXNlbnRhdGlvbn0uJHtjb3VudGVyfWA7XG4gICAgaWYgKG5ldyBSZWdFeHAoYFteJHtWQUxJRF9LRVlfQ0hBUlN9XWApLmV4ZWMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdG9rZW4gcmVwcmVzZW50YXRpb246ICR7a2V5fWApO1xuICAgIH1cblxuICAgIHRoaXMudG9rZW5NYXBba2V5XSA9IHRva2VuO1xuICAgIHJldHVybiBgJHtCRUdJTl9UT0tFTl9NQVJLRVJ9JHtrZXl9JHtFTkRfVE9LRU5fTUFSS0VSfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBUb2tlblN0cmluZ2AgZm9yIHRoaXMgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZVRva2VuU3RyaW5nKHM6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgVG9rZW5TdHJpbmcocywgQkVHSU5fVE9LRU5fTUFSS0VSLCBgWyR7VkFMSURfS0VZX0NIQVJTfV0rYCwgRU5EX1RPS0VOX01BUktFUik7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhbnkgVG9rZW4gbWFya2VycyBpbiB0aGlzIHN0cmluZyB3aXRoIHRoZWlyIHJlc29sdmVkIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHJlc29sdmVNYXJrZXJzKHM6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc3RyID0gdGhpcy5jcmVhdGVUb2tlblN0cmluZyhzKTtcbiAgICBjb25zdCBmcmFnbWVudHMgPSBzdHIuc3BsaXQodGhpcy5sb29rdXBUb2tlbi5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gZnJhZ21lbnRzLmpvaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgVG9rZW4gYnkga2V5XG4gICAqL1xuICBwdWJsaWMgbG9va3VwVG9rZW4oa2V5OiBzdHJpbmcpOiBUb2tlbiB7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMudG9rZW5NYXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0b2tlbiBrZXk6ICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRva2VuTWFwW2tleV07XG4gIH1cbn1cblxuY29uc3QgQkVHSU5fVE9LRU5fTUFSS0VSID0gJyR7VG9rZW5bJztcbmNvbnN0IEVORF9UT0tFTl9NQVJLRVIgPSAnXX0nO1xuY29uc3QgVkFMSURfS0VZX0NIQVJTID0gJ2EtekEtWjAtOTouXy0nO1xuXG4vKipcbiAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgdG9rZW4gc3RyaW5nIG1hcFxuICovXG5jb25zdCBUT0tFTl9TVFJJTkdfTUFQID0gbmV3IFRva2VuU3RyaW5nTWFwKCk7XG5cbi8qKlxuICogSW50ZXJmYWNlIHRoYXQgVG9rZW4gam9pbmVycyBpbXBsZW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9rZW5Kb2luZXIge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGpvaW5lci5cbiAgICpcbiAgICogTXVzdCBiZSB1bmlxdWUgcGVyIGpvaW5lcjogdGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gYXNzZXJ0IHRoYXQgdGhlcmVcbiAgICogaXMgZXhhY3RseSBvbmx5IHR5cGUgb2Ygam9pbmVyIGluIGEgam9pbiBvcGVyYXRpb24uXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxhbmd1YWdlIGludHJpbnNpYyB0aGF0IHdpbGwgY29tYmluZSB0aGUgc3RyaW5ncyBpbiB0aGUgZ2l2ZW4gZW5naW5lXG4gICAqL1xuICBqb2luKGZyYWdtZW50czogYW55W10pOiBhbnk7XG59XG5cbi8qKlxuICogQSBzdHJpbmcgd2l0aCBtYXJrZXJzIGluIGl0IHRoYXQgY2FuIGJlIHJlc29sdmVkIHRvIGV4dGVybmFsIHZhbHVlc1xuICovXG5jbGFzcyBUb2tlblN0cmluZyB7XG4gIHByaXZhdGUgcGF0dGVybjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiZWdpbk1hcmtlcjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRQYXR0ZXJuOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRNYXJrZXI6IHN0cmluZykge1xuICAgIHRoaXMucGF0dGVybiA9IGAke3JlZ2V4UXVvdGUodGhpcy5iZWdpbk1hcmtlcil9KCR7dGhpcy5pZFBhdHRlcm59KSR7cmVnZXhRdW90ZSh0aGlzLmVuZE1hcmtlcil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBzdHJpbmcgb24gbWFya2Vycywgc3Vic3RpdHV0aW5nIG1hcmtlcnMgd2l0aCBUb2tlbnNcbiAgICovXG4gIHB1YmxpYyBzcGxpdChsb29rdXA6IChpZDogc3RyaW5nKSA9PiBUb2tlbik6IFRva2VuU3RyaW5nRnJhZ21lbnRzIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuLCAnZycpO1xuICAgIGNvbnN0IHJldCA9IG5ldyBUb2tlblN0cmluZ0ZyYWdtZW50cygpO1xuXG4gICAgbGV0IHJlc3QgPSAwO1xuICAgIGxldCBtID0gcmUuZXhlYyh0aGlzLnN0cik7XG4gICAgd2hpbGUgKG0pIHtcbiAgICAgIGlmIChtLmluZGV4ID4gcmVzdCkge1xuICAgICAgICByZXQuYWRkU3RyaW5nKHRoaXMuc3RyLnN1YnN0cmluZyhyZXN0LCBtLmluZGV4KSk7XG4gICAgICB9XG5cbiAgICAgIHJldC5hZGRUb2tlbihsb29rdXAobVsxXSkpO1xuXG4gICAgICByZXN0ID0gcmUubGFzdEluZGV4O1xuICAgICAgbSA9IHJlLmV4ZWModGhpcy5zdHIpO1xuICAgIH1cblxuICAgIGlmIChyZXN0IDwgdGhpcy5zdHIubGVuZ3RoKSB7XG4gICAgICByZXQuYWRkU3RyaW5nKHRoaXMuc3RyLnN1YnN0cmluZyhyZXN0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBzdHJpbmcgaW5jbHVkZXMgdG9rZW5zLlxuICAgKi9cbiAgcHVibGljIHRlc3QoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybiwgJ2cnKTtcbiAgICByZXR1cm4gcmUudGVzdCh0aGlzLnN0cik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgdGhlIHNwbGl0IG9mIGEgc3RyaW5nIHdpdGggVG9rZW5zXG4gKlxuICogRWl0aGVyIGEgbGl0ZXJhbCBwYXJ0IG9mIHRoZSBzdHJpbmcsIG9yIGFuIHVucmVzb2x2ZWQgVG9rZW4uXG4gKi9cbnR5cGUgU3RyaW5nRnJhZ21lbnQgPSB7IHR5cGU6ICdzdHJpbmcnOyBzdHI6IHN0cmluZyB9O1xudHlwZSBUb2tlbkZyYWdtZW50ID0geyB0eXBlOiAndG9rZW4nOyB0b2tlbjogVG9rZW4gfTtcbnR5cGUgRnJhZ21lbnQgPSAgU3RyaW5nRnJhZ21lbnQgfCBUb2tlbkZyYWdtZW50O1xuXG4vKipcbiAqIEZyYWdtZW50cyBvZiBhIHN0cmluZyB3aXRoIG1hcmtlcnNcbiAqL1xuY2xhc3MgVG9rZW5TdHJpbmdGcmFnbWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGZyYWdtZW50cyA9IG5ldyBBcnJheTxGcmFnbWVudD4oKTtcblxuICBwdWJsaWMgdmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5mcmFnbWVudHMubWFwKGYgPT4gZi50eXBlID09PSAndG9rZW4nID8gcmVzb2x2ZShmLnRva2VuKSA6IGYuc3RyKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZyYWdtZW50cy5wdXNoKHsgdHlwZTogJ3N0cmluZycsIHN0ciB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb2tlbih0b2tlbjogVG9rZW4pIHtcbiAgICB0aGlzLmZyYWdtZW50cy5wdXNoKHsgdHlwZTogJ3Rva2VuJywgdG9rZW4gfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tYmluZSB0aGUgcmVzb2x2ZWQgc3RyaW5nIGZyYWdtZW50cyB1c2luZyB0aGUgVG9rZW5zIHRvIGpvaW4uXG4gICAqXG4gICAqIFJlc29sdmVzIHRoZSByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgam9pbigpOiBhbnkge1xuICAgIGlmICh0aGlzLmZyYWdtZW50cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgaWYgKHRoaXMuZnJhZ21lbnRzLmxlbmd0aCA9PT0gMSkgeyByZXR1cm4gcmVzb2x2ZUZyYWdtZW50KHRoaXMuZnJhZ21lbnRzWzBdKTsgfVxuXG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmZyYWdtZW50c1swXTtcblxuICAgIGxldCBpO1xuICAgIGxldCB0b2tlbjogVG9rZW47XG5cbiAgICBpZiAoZmlyc3QudHlwZSA9PT0gJ3Rva2VuJykge1xuICAgICAgdG9rZW4gPSBmaXJzdC50b2tlbjtcbiAgICAgIGkgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBuZXZlciBoYXZlIHR3byBzdHJpbmdzIGluIGEgcm93XG4gICAgICB0b2tlbiA9ICh0aGlzLmZyYWdtZW50c1sxXSBhcyBUb2tlbkZyYWdtZW50KS50b2tlbi5jb25jYXQoZmlyc3Quc3RyLCB1bmRlZmluZWQpO1xuICAgICAgaSA9IDI7XG4gICAgfVxuXG4gICAgd2hpbGUgKGkgPCB0aGlzLmZyYWdtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRva2VuID0gdG9rZW4uY29uY2F0KHVuZGVmaW5lZCwgcmVzb2x2ZUZyYWdtZW50KHRoaXMuZnJhZ21lbnRzW2ldKSk7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmUodG9rZW4pO1xuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgdmFsdWUgZnJvbSBhIHNpbmdsZSBmcmFnbWVudFxuICovXG5mdW5jdGlvbiByZXNvbHZlRnJhZ21lbnQoZnJhZ21lbnQ6IEZyYWdtZW50KTogYW55IHtcbiAgcmV0dXJuIGZyYWdtZW50LnR5cGUgPT09ICdzdHJpbmcnID8gZnJhZ21lbnQuc3RyIDogcmVzb2x2ZShmcmFnbWVudC50b2tlbik7XG59XG5cbi8qKlxuICogUXVvdGUgYSBzdHJpbmcgZm9yIHVzZSBpbiBhIHJlZ2V4XG4gKi9cbmZ1bmN0aW9uIHJlZ2V4UXVvdGUoczogc3RyaW5nKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1suPyorXiRbXFxdXFxcXCgpe318LV0vZywgXCJcXFxcJCZcIik7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUV4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLEtBQUs7SUFHaEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILFlBQTZCLGVBQXFCLEVBQW1CLFdBQW9CO1FBQTVELG9CQUFlLEdBQWYsZUFBZSxDQUFNO1FBQW1CLGdCQUFXLEdBQVgsV0FBVyxDQUFTO0lBQ3pGLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2pDLElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUNoQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksUUFBUTtRQUNiLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxpRUFBaUU7UUFDakUsdUJBQXVCO1FBQ3ZCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDL0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU07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QUFTLENBQUMsQ0FBQztZQUNoRixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1A7UUFFRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNoQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsRUFBRSxDQUFDO1NBQ0w7UUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWtCO0lBQ3pDLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUMzQixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCIuL2NvbnN0cnVjdFwiO1xuXG4vKipcbiAqIElmIG9iamVjdHMgaGFzIGEgZnVuY3Rpb24gcHJvcGVydHkgYnkgdGhpcyBuYW1lLCB0aGV5IHdpbGwgYmUgY29uc2lkZXJlZCB0b2tlbnMsIGFuZCB0aGlzXG4gKiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byByZXNvbHZlIHRoZSB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVNPTFZFX01FVEhPRCA9ICdyZXNvbHZlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3BlY2lhbCBvciBsYXppbHktZXZhbHVhdGVkIHZhbHVlLlxuICpcbiAqIENhbiBiZSB1c2VkIHRvIGRlbGF5IGV2YWx1YXRpb24gb2YgYSBjZXJ0YWluIHZhbHVlIGluIGNhc2UsIGZvciBleGFtcGxlLFxuICogdGhhdCBpdCByZXF1aXJlcyBzb21lIGNvbnRleHQgb3IgbGF0ZS1ib3VuZCBkYXRhLiBDYW4gYWxzbyBiZSB1c2VkIHRvXG4gKiBtYXJrIHZhbHVlcyB0aGF0IG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGF0IGRvY3VtZW50IHJlbmRlcmluZyB0aW1lLlxuICpcbiAqIFRva2VucyBjYW4gYmUgZW1iZWRkZWQgaW50byBzdHJpbmdzIHdoaWxlIHJldGFpbmluZyB0aGVpciBvcmlnaW5hbFxuICogc2VtYW50aWNzLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW4ge1xuICBwcml2YXRlIHRva2VuS2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdG9rZW4gdGhhdCByZXNvbHZlcyB0byBgdmFsdWVgLlxuICAgKlxuICAgKiBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIHVwb24gcmVzb2x1dGlvbiBhbmRcbiAgICogdGhlIHZhbHVlIGl0IHJldHVybnMgd2lsbCBiZSB1c2VkIGFzIHRoZSB0b2tlbidzIHZhbHVlLlxuICAgKlxuICAgKiBkaXNwbGF5TmFtZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgVG9rZW4gd2hlbiBpdCdzIGVtYmVkZGVkIGludG8gYSBzdHJpbmc7IGl0XG4gICAqIHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgKlxuICAgKiAgICBcImVtYmVkZGVkIGluIGEgbGFyZ2VyIHN0cmluZyBpcyAke1Rva2VuW0RJU1BMQVlfTkFNRS4xMjNdfVwiXG4gICAqXG4gICAqIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhIGhpbnQgdG8gaHVtYW5zIHdoYXQgdGhlIG1lYW5pbmcgb2YgdGhlIFRva2VuIGlzLFxuICAgKiBhbmQgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBNdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgYW5kIHNpbXBsZSBzZXBhcmF0b3IgY2hhcmFjdGVycyAoXy46LSkuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZU9yRnVuY3Rpb24gV2hhdCB0aGlzIHRva2VuIHdpbGwgZXZhbHVhdGUgdG8sIGxpdGVyYWwgb3IgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBkaXNwbGF5TmFtZSBBIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgaGludCBmb3IgdGhpcyBUb2tlblxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2YWx1ZU9yRnVuY3Rpb24/OiBhbnksIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZSgpOiBhbnkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVPckZ1bmN0aW9uO1xuICAgIGlmICh0eXBlb2YodmFsdWUpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJldmVyc2libGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdG9rZW5cbiAgICpcbiAgICogSWYgdGhlIFRva2VuIGlzIGluaXRpYWxpemVkIHdpdGggYSBsaXRlcmFsLCB0aGUgc3RyaW5naWZpZWQgdmFsdWUgb2YgdGhlXG4gICAqIGxpdGVyYWwgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBzcGVjaWFsIHF1b3RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIFRva2VuIGlzIHJldHVybmVkIHRoYXQgY2FuIGJlIGVtYmVkZGVkIGludG8gb3RoZXIgc3RyaW5ncy5cbiAgICpcbiAgICogU3RyaW5ncyB3aXRoIHF1b3RlZCBUb2tlbnMgaW4gdGhlbSBjYW4gYmUgcmVzdG9yZWQgYmFjayBpbnRvXG4gICAqIGNvbXBsZXggdmFsdWVzIHdpdGggdGhlIFRva2VucyByZXN0b3JlZCBieSBjYWxsaW5nIGByZXNvbHZlKClgXG4gICAqIG9uIHRoZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSB0eXBlb2YgdGhpcy52YWx1ZU9yRnVuY3Rpb247XG4gICAgLy8gT3B0aW1pemF0aW9uOiBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgcmVzb2x2ZSB0aGlzLCBkb24ndCBib3RoZXJcbiAgICAvLyByZWdpc3RlcmluZyBhIFRva2VuLlxuICAgIGlmICh2YWx1ZVR5cGUgPT09ICdzdHJpbmcnIHx8IHZhbHVlVHlwZSA9PT0gJ251bWJlcicgfHwgdmFsdWVUeXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlT3JGdW5jdGlvbi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2VuS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudG9rZW5LZXkgPSBUT0tFTl9TVFJJTkdfTUFQLnJlZ2lzdGVyKHRoaXMsIHRoaXMuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbktleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIHRoaXMgVG9rZW4gaW50byBKU09OXG4gICAqXG4gICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgSlNPTi5zdHJpbmdpZnkoKS4gV2Ugd2FudCB0byBwcm9oaWJpdCB0aGlzLCBiZWNhdXNlXG4gICAqIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGRvIHRoaXMgcHJvcGVybHksIHNvIHdlIGp1c3QgdGhyb3cgYW4gZXJyb3IgaGVyZS5cbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeSgpIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHN0cnVjdHVyZSB3aXRoIGEgVG9rZW4gaW4gaXQuIFVzZSBhIGRvY3VtZW50LXNwZWNpZmljIHN0cmluZ2lmaWNhdGlvbiBtZXRob2QgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb25jYXRlZCB2ZXJzaW9uIG9mIHRoaXMgVG9rZW4gaW4gYSBzdHJpbmcgY29udGV4dFxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNvbWJpbmVzIHN0cmluZ3MsIGJ1dCBzcGVjaWFsaXplZFxuICAgKiBpbXBsZW1lbnRzIG9mIFRva2VuIGNhbiByZXR1cm4gYSBtb3JlIGFwcHJvcHJpYXRlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGNvbmNhdChsZWZ0OiBhbnkgfCB1bmRlZmluZWQsIHJpZ2h0OiBhbnkgfCB1bmRlZmluZWQpOiBUb2tlbiB7XG4gICAgY29uc3QgcGFydHMgPSBbbGVmdCwgcmVzb2x2ZSh0aGlzKSwgcmlnaHRdLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG5ldyBUb2tlbihwYXJ0cy5tYXAoeCA9PiBgJHt4fWApLmpvaW4oJycpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvYmogaXMgYSB0b2tlbiAoaS5lLiBoYXMgdGhlIHJlc29sdmUoKSBtZXRob2Qgb3IgaXMgYSBzdHJpbmdcbiAqIHRoYXQgaW5jbHVkZXMgdG9rZW4gbWFya2VycykuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVzb2x2ZWQob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZihvYmopID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBUT0tFTl9TVFJJTkdfTUFQLmNyZWF0ZVRva2VuU3RyaW5nKG9iaikudGVzdCgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0eXBlb2Yob2JqW1JFU09MVkVfTUVUSE9EXSkgPT09ICdmdW5jdGlvbic7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhbiBvYmplY3QgYnkgZXZhbHVhdGluZyBhbGwgdG9rZW5zIGFuZCByZW1vdmluZyBhbnkgdW5kZWZpbmVkIG9yIGVtcHR5IG9iamVjdHMgb3IgYXJyYXlzLlxuICogVmFsdWVzIGNhbiBvbmx5IGJlIHByaW1pdGl2ZXMsIGFycmF5cyBvciB0b2tlbnMuIE90aGVyIG9iamVjdHMgKGkuZS4gd2l0aCBtZXRob2RzKSB3aWxsIGJlIHJlamVjdGVkLlxuICpcbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byByZXNvbHZlLlxuICogQHBhcmFtIHByZWZpeCBQcmVmaXgga2V5IHBhdGggY29tcG9uZW50cyBmb3IgZGlhZ25vc3RpY3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKG9iajogYW55LCBwcmVmaXg/OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IHBhdGggPSBwcmVmaXggfHwgWyBdO1xuICBjb25zdCBwYXRoTmFtZSA9ICcvJyArIHBhdGguam9pbignLycpO1xuXG4gIC8vIHByb3RlY3QgYWdhaW5zdCBjeWNsaWMgcmVmZXJlbmNlcyBieSBsaW1pdGluZyBkZXB0aC5cbiAgaWYgKHBhdGgubGVuZ3RoID4gMjAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBvYmplY3QgdHJlZSB3aXRoIGNpcmN1bGFyIHJlZmVyZW5jZS4gUGF0aDogJyArIHBhdGhOYW1lKTtcbiAgfVxuXG4gIC8vXG4gIC8vIHVuZGVmaW5lZFxuICAvL1xuXG4gIGlmICh0eXBlb2Yob2JqKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy9cbiAgLy8gbnVsbFxuICAvL1xuXG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vXG4gIC8vIGZ1bmN0aW9ucyAtIG5vdCBzdXBwb3J0ZWQgKG9ubHkgdG9rZW5zIGFyZSBzdXBwb3J0ZWQpXG4gIC8vXG5cbiAgaWYgKHR5cGVvZihvYmopID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gcmVzb2x2ZSBhIG5vbi1kYXRhIG9iamVjdC4gT25seSB0b2tlbiBhcmUgc3VwcG9ydGVkIGZvciBsYXp5IGV2YWx1YXRpb24uIFBhdGg6ICR7cGF0aE5hbWV9LiBPYmplY3Q6ICR7b2JqfWApO1xuICB9XG5cbiAgLy9cbiAgLy8gc3RyaW5nIC0gcG90ZW50aWFsbHkgcmVwbGFjZSBhbGwgc3RyaW5naWZpZWQgVG9rZW5zXG4gIC8vXG4gIGlmICh0eXBlb2Yob2JqKSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gVE9LRU5fU1RSSU5HX01BUC5yZXNvbHZlTWFya2VycyhvYmogYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8vXG4gIC8vIHByaW1pdGl2ZXMgLSBhcy1pc1xuICAvL1xuXG4gIGlmICh0eXBlb2Yob2JqKSAhPT0gJ29iamVjdCcgfHwgb2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvL1xuICAvLyB0b2tlbnMgLSBpbnZva2UgJ3Jlc29sdmUnIGFuZCBjb250aW51ZSB0byByZXNvbHZlIHJlY3Vyc2l2ZWx5XG4gIC8vXG5cbiAgaWYgKHVucmVzb2x2ZWQob2JqKSkge1xuICAgIGNvbnN0IHZhbHVlID0gb2JqW1JFU09MVkVfTUVUSE9EXSgpO1xuICAgIHJldHVybiByZXNvbHZlKHZhbHVlLCBwYXRoKTtcbiAgfVxuXG4gIC8vXG4gIC8vIGFycmF5cyAtIHJlc29sdmUgYWxsIHZhbHVlcywgcmVtb3ZlIHVuZGVmaW5lZCBhbmQgcmVtb3ZlIGVtcHR5IGFycmF5c1xuICAvL1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBjb25zdCBhcnIgPSBvYmpcbiAgICAgIC5tYXAoKHgsIGkpID0+IHJlc29sdmUoeCwgcGF0aC5jb25jYXQoaS50b1N0cmluZygpKSkpXG4gICAgICAuZmlsdGVyKHggPT4gdHlwZW9mKHgpICE9PSAndW5kZWZpbmVkJyk7XG5cbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgLy9cbiAgLy8gb2JqZWN0cyAtIGRlZXAtcmVzb2x2ZSBhbGwgdmFsdWVzXG4gIC8vXG5cbiAgLy8gTXVzdCBub3QgYmUgYSBDb25zdHJ1Y3QgYXQgdGhpcyBwb2ludCwgb3RoZXJ3aXNlIHlvdSBwcm9iYWJseSBtYWRlIGEgdHlwZVxuICAvLyBtaXN0YWtlIHNvbWV3aGVyZSBhbmQgcmVzb2x2ZSB3aWxsIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AgcmVjdXJzaW5nIGludG9cbiAgLy8gY2hpbGQucGFyZW50IDwtLS0+IHBhcmVudC5jaGlsZHJlblxuICBpZiAob2JqIGluc3RhbmNlb2YgQ29uc3RydWN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gcmVzb2x2ZSgpIGEgQ29uc3RydWN0IGF0ICcgKyBwYXRoTmFtZSk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IGFueSA9IHsgfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGNvbnN0IHJlc29sdmVkS2V5ID0gcmVzb2x2ZShrZXkpO1xuICAgIGlmICh0eXBlb2YocmVzb2x2ZWRLZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUga2V5IFwiJHtrZXl9XCIgaGFzIGJlZW4gcmVzb2x2ZWQgdG8gJHtKU09OLnN0cmluZ2lmeShyZXNvbHZlZEtleSl9IGJ1dCBtdXN0IGJlIHJlc29sdmFibGUgdG8gYSBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmUob2JqW2tleV0sIHBhdGguY29uY2F0KGtleSkpO1xuXG4gICAgLy8gc2tpcCB1bmRlZmluZWRcbiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdFtyZXNvbHZlZEtleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2VudHJhbCBwbGFjZSB3aGVyZSB3ZSBrZWVwIGEgbWFwcGluZyBmcm9tIFRva2VucyB0byB0aGVpciBTdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIHVzZWQgdG8gZW1iZWQgdG9rZW4gaW50byBzdHJpbmdzLFxuICogYW5kIHN0b3JlZCB0byBiZSBhYmxlIHRvXG4gKlxuICogQWxsIGluc3RhbmNlcyBvZiBUb2tlblN0cmluZ01hcCBzaGFyZSB0aGUgc2FtZSBzdG9yYWdlLCBzbyB0aGF0IHRoaXMgcHJvY2Vzc1xuICogd29ya3MgZXZlbiB3aGVuIGRpZmZlcmVudCBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgYXJlIGxvYWRlZC5cbiAqL1xuY2xhc3MgVG9rZW5TdHJpbmdNYXAge1xuICBwcml2YXRlIHJlYWRvbmx5IHRva2VuTWFwOiB7W2tleTogc3RyaW5nXTogVG9rZW59O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGdsb2IgPSBnbG9iYWwgYXMgYW55O1xuICAgIHRoaXMudG9rZW5NYXAgPSBnbG9iLl9fY2RrVG9rZW5NYXAgPSBnbG9iLl9fY2RrVG9rZW5NYXAgfHwge307XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGluZyBhIHVuaXF1ZSBzdHJpbmcgZm9yIHRoaXMgVG9rZW4sIHJldHVybmluZyBhIGtleVxuICAgKlxuICAgKiBFdmVyeSBjYWxsIGZvciB0aGUgc2FtZSBUb2tlbiB3aWxsIHByb2R1Y2UgYSBuZXcgdW5pcXVlIHN0cmluZywgbm9cbiAgICogYXR0ZW1wdCBpcyBtYWRlIHRvIGRlZHVwbGljYXRlLiBUb2tlbiBvYmplY3RzIHNob3VsZCBjYWNoZSB0aGVcbiAgICogdmFsdWUgdGhlbXNlbHZlcywgaWYgcmVxdWlyZWQuXG4gICAqXG4gICAqIFRoZSB0b2tlbiBjYW4gY2hvb3NlIChwYXJ0IG9mKSBpdHMgb3duIHJlcHJlc2VudGF0aW9uIHN0cmluZyB3aXRoIGFcbiAgICogaGludC4gVGhpcyBtYXkgYmUgdXNlZCB0byBwcm9kdWNlIGFlc3RoZXRpY2FsbHkgcGxlYXNpbmcgYW5kXG4gICAqIHJlY29nbml6YWJsZSB0b2tlbiByZXByZXNlbnRhdGlvbnMgZm9yIGh1bWFucy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlcih0b2tlbjogVG9rZW4sIHJlcHJlc2VudGF0aW9uSGludD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnRlciA9IE9iamVjdC5rZXlzKHRoaXMudG9rZW5NYXApLmxlbmd0aDtcbiAgICBjb25zdCByZXByZXNlbnRhdGlvbiA9IHJlcHJlc2VudGF0aW9uSGludCB8fCBgVE9LRU5gO1xuXG4gICAgY29uc3Qga2V5ID0gYCR7cmVwcmVzZW50YXRpb259LiR7Y291bnRlcn1gO1xuICAgIGlmIChuZXcgUmVnRXhwKGBbXiR7VkFMSURfS0VZX0NIQVJTfV1gKS5leGVjKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXJzIGluIHRva2VuIHJlcHJlc2VudGF0aW9uOiAke2tleX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnRva2VuTWFwW2tleV0gPSB0b2tlbjtcbiAgICByZXR1cm4gYCR7QkVHSU5fVE9LRU5fTUFSS0VSfSR7a2V5fSR7RU5EX1RPS0VOX01BUktFUn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBgVG9rZW5TdHJpbmdgIGZvciB0aGlzIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBjcmVhdGVUb2tlblN0cmluZyhzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuU3RyaW5nKHMsIEJFR0lOX1RPS0VOX01BUktFUiwgYFske1ZBTElEX0tFWV9DSEFSU31dK2AsIEVORF9UT0tFTl9NQVJLRVIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYW55IFRva2VuIG1hcmtlcnMgaW4gdGhpcyBzdHJpbmcgd2l0aCB0aGVpciByZXNvbHZlZCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyByZXNvbHZlTWFya2VycyhzOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IHN0ciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJpbmcocyk7XG4gICAgY29uc3QgZnJhZ21lbnRzID0gc3RyLnNwbGl0KHRoaXMubG9va3VwVG9rZW4uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIGZyYWdtZW50cy5qb2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIFRva2VuIGJ5IGtleVxuICAgKi9cbiAgcHVibGljIGxvb2t1cFRva2VuKGtleTogc3RyaW5nKTogVG9rZW4ge1xuICAgIGlmICghKGtleSBpbiB0aGlzLnRva2VuTWFwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgdG9rZW4ga2V5OiAke2tleX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50b2tlbk1hcFtrZXldO1xuICB9XG59XG5cbmNvbnN0IEJFR0lOX1RPS0VOX01BUktFUiA9ICcke1Rva2VuWyc7XG5jb25zdCBFTkRfVE9LRU5fTUFSS0VSID0gJ119JztcbmNvbnN0IFZBTElEX0tFWV9DSEFSUyA9ICdhLXpBLVowLTk6Ll8tJztcblxuLyoqXG4gKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHRva2VuIHN0cmluZyBtYXBcbiAqL1xuY29uc3QgVE9LRU5fU1RSSU5HX01BUCA9IG5ldyBUb2tlblN0cmluZ01hcCgpO1xuXG4vKipcbiAqIEludGVyZmFjZSB0aGF0IFRva2VuIGpvaW5lcnMgaW1wbGVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRva2VuSm9pbmVyIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBqb2luZXIuXG4gICAqXG4gICAqIE11c3QgYmUgdW5pcXVlIHBlciBqb2luZXI6IHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIGFzc2VydCB0aGF0IHRoZXJlXG4gICAqIGlzIGV4YWN0bHkgb25seSB0eXBlIG9mIGpvaW5lciBpbiBhIGpvaW4gb3BlcmF0aW9uLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsYW5ndWFnZSBpbnRyaW5zaWMgdGhhdCB3aWxsIGNvbWJpbmUgdGhlIHN0cmluZ3MgaW4gdGhlIGdpdmVuIGVuZ2luZVxuICAgKi9cbiAgam9pbihmcmFnbWVudHM6IGFueVtdKTogYW55O1xufVxuXG4vKipcbiAqIEEgc3RyaW5nIHdpdGggbWFya2VycyBpbiBpdCB0aGF0IGNhbiBiZSByZXNvbHZlZCB0byBleHRlcm5hbCB2YWx1ZXNcbiAqL1xuY2xhc3MgVG9rZW5TdHJpbmcge1xuICBwcml2YXRlIHBhdHRlcm46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0cjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYmVnaW5NYXJrZXI6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkUGF0dGVybjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW5kTWFya2VyOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhdHRlcm4gPSBgJHtyZWdleFF1b3RlKHRoaXMuYmVnaW5NYXJrZXIpfSgke3RoaXMuaWRQYXR0ZXJufSkke3JlZ2V4UXVvdGUodGhpcy5lbmRNYXJrZXIpfWA7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgc3RyaW5nIG9uIG1hcmtlcnMsIHN1YnN0aXR1dGluZyBtYXJrZXJzIHdpdGggVG9rZW5zXG4gICAqL1xuICBwdWJsaWMgc3BsaXQobG9va3VwOiAoaWQ6IHN0cmluZykgPT4gVG9rZW4pOiBUb2tlblN0cmluZ0ZyYWdtZW50cyB7XG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybiwgJ2cnKTtcbiAgICBjb25zdCByZXQgPSBuZXcgVG9rZW5TdHJpbmdGcmFnbWVudHMoKTtcblxuICAgIGxldCByZXN0ID0gMDtcbiAgICBsZXQgbSA9IHJlLmV4ZWModGhpcy5zdHIpO1xuICAgIHdoaWxlIChtKSB7XG4gICAgICBpZiAobS5pbmRleCA+IHJlc3QpIHtcbiAgICAgICAgcmV0LmFkZFN0cmluZyh0aGlzLnN0ci5zdWJzdHJpbmcocmVzdCwgbS5pbmRleCkpO1xuICAgICAgfVxuXG4gICAgICByZXQuYWRkVG9rZW4obG9va3VwKG1bMV0pKTtcblxuICAgICAgcmVzdCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIG0gPSByZS5leGVjKHRoaXMuc3RyKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdCA8IHRoaXMuc3RyLmxlbmd0aCkge1xuICAgICAgcmV0LmFkZFN0cmluZyh0aGlzLnN0ci5zdWJzdHJpbmcocmVzdCkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoaXMgc3RyaW5nIGluY2x1ZGVzIHRva2Vucy5cbiAgICovXG4gIHB1YmxpYyB0ZXN0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh0aGlzLnBhdHRlcm4sICdnJyk7XG4gICAgcmV0dXJuIHJlLnRlc3QodGhpcy5zdHIpO1xuICB9XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHRoZSBzcGxpdCBvZiBhIHN0cmluZyB3aXRoIFRva2Vuc1xuICpcbiAqIEVpdGhlciBhIGxpdGVyYWwgcGFydCBvZiB0aGUgc3RyaW5nLCBvciBhbiB1bnJlc29sdmVkIFRva2VuLlxuICovXG50eXBlIFN0cmluZ0ZyYWdtZW50ID0geyB0eXBlOiAnc3RyaW5nJzsgc3RyOiBzdHJpbmcgfTtcbnR5cGUgVG9rZW5GcmFnbWVudCA9IHsgdHlwZTogJ3Rva2VuJzsgdG9rZW46IFRva2VuIH07XG50eXBlIEZyYWdtZW50ID0gIFN0cmluZ0ZyYWdtZW50IHwgVG9rZW5GcmFnbWVudDtcblxuLyoqXG4gKiBGcmFnbWVudHMgb2YgYSBzdHJpbmcgd2l0aCBtYXJrZXJzXG4gKi9cbmNsYXNzIFRva2VuU3RyaW5nRnJhZ21lbnRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmcmFnbWVudHMgPSBuZXcgQXJyYXk8RnJhZ21lbnQ+KCk7XG5cbiAgcHVibGljIHZhbHVlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhZ21lbnRzLm1hcChmID0+IGYudHlwZSA9PT0gJ3Rva2VuJyA/IHJlc29sdmUoZi50b2tlbikgOiBmLnN0cik7XG4gIH1cblxuICBwdWJsaWMgYWRkU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5mcmFnbWVudHMucHVzaCh7IHR5cGU6ICdzdHJpbmcnLCBzdHIgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVG9rZW4odG9rZW46IFRva2VuKSB7XG4gICAgdGhpcy5mcmFnbWVudHMucHVzaCh7IHR5cGU6ICd0b2tlbicsIHRva2VuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmUgdGhlIHJlc29sdmVkIHN0cmluZyBmcmFnbWVudHMgdXNpbmcgdGhlIFRva2VucyB0byBqb2luLlxuICAgKlxuICAgKiBSZXNvbHZlcyB0aGUgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGpvaW4oKTogYW55IHtcbiAgICBpZiAodGhpcy5mcmFnbWVudHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuICAgIGlmICh0aGlzLmZyYWdtZW50cy5sZW5ndGggPT09IDEpIHsgcmV0dXJuIHJlc29sdmVGcmFnbWVudCh0aGlzLmZyYWdtZW50c1swXSk7IH1cblxuICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5mcmFnbWVudHNbMF07XG5cbiAgICBsZXQgaTtcbiAgICBsZXQgdG9rZW46IFRva2VuO1xuXG4gICAgaWYgKGZpcnN0LnR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIHRva2VuID0gZmlyc3QudG9rZW47XG4gICAgICBpID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgbmV2ZXIgaGF2ZSB0d28gc3RyaW5ncyBpbiBhIHJvd1xuICAgICAgdG9rZW4gPSAodGhpcy5mcmFnbWVudHNbMV0gYXMgVG9rZW5GcmFnbWVudCkudG9rZW4uY29uY2F0KGZpcnN0LnN0ciwgdW5kZWZpbmVkKTtcbiAgICAgIGkgPSAyO1xuICAgIH1cblxuICAgIHdoaWxlIChpIDwgdGhpcy5mcmFnbWVudHMubGVuZ3RoKSB7XG4gICAgICB0b2tlbiA9IHRva2VuLmNvbmNhdCh1bmRlZmluZWQsIHJlc29sdmVGcmFnbWVudCh0aGlzLmZyYWdtZW50c1tpXSkpO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlKHRva2VuKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHZhbHVlIGZyb20gYSBzaW5nbGUgZnJhZ21lbnRcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZyYWdtZW50KGZyYWdtZW50OiBGcmFnbWVudCk6IGFueSB7XG4gIHJldHVybiBmcmFnbWVudC50eXBlID09PSAnc3RyaW5nJyA/IGZyYWdtZW50LnN0ciA6IHJlc29sdmUoZnJhZ21lbnQudG9rZW4pO1xufVxuXG4vKipcbiAqIFF1b3RlIGEgc3RyaW5nIGZvciB1c2UgaW4gYSByZWdleFxuICovXG5mdW5jdGlvbiByZWdleFF1b3RlKHM6IHN0cmluZykge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bLj8qK14kW1xcXVxcXFwoKXt9fC1dL2csIFwiXFxcXCQmXCIpO1xufVxuIl19
{
"_args": [
[
"cli-color@0.1.7",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "cli-color@0.1.7",
"_from": "cli-color@~0.1.6",
"_id": "cli-color@0.1.7",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "cli-color@0.1.7",
"raw": "cli-color@~0.1.6",
"name": "cli-color",
"escapedName": "cli-color",
"rawSpec": "0.1.7",
"rawSpec": "~0.1.6",
"saveSpec": null,
"fetchSpec": "0.1.7"
"fetchSpec": "~0.1.6"
},

@@ -28,5 +22,6 @@ "_requiredBy": [

],
"_resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz",
"_spec": "0.1.7",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_resolved": "http://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz",
"_shasum": "adc3200fa471cc211b0da7f566b71e98b9d67347",
"_spec": "cli-color@~0.1.6",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk/node_modules/json-diff",
"author": {

@@ -41,5 +36,7 @@ "name": "Mariusz Nowak",

},
"bundleDependencies": false,
"dependencies": {
"es5-ext": "0.8.x"
},
"deprecated": false,
"description": "Colors, formatting and other tools for the console",

@@ -46,0 +43,0 @@ "devDependencies": {

{
"_args": [
[
"difflib@0.2.4",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "difflib@0.2.4",
"_from": "difflib@~0.2.1",
"_id": "difflib@0.2.4",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "difflib@0.2.4",
"raw": "difflib@~0.2.1",
"name": "difflib",
"escapedName": "difflib",
"rawSpec": "0.2.4",
"rawSpec": "~0.2.1",
"saveSpec": null,
"fetchSpec": "0.2.4"
"fetchSpec": "~0.2.1"
},

@@ -29,4 +23,5 @@ "_requiredBy": [

"_resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz",
"_spec": "0.2.4",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_shasum": "b5e30361a6db023176d562892db85940a718f47e",
"_spec": "difflib@~0.2.1",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk/node_modules/json-diff",
"author": {

@@ -39,5 +34,7 @@ "name": "Xueqiao Xu",

},
"bundleDependencies": false,
"dependencies": {
"heap": ">= 0.2.0"
},
"deprecated": false,
"description": "text diff library ported from Python's difflib module",

@@ -51,2 +48,5 @@ "devDependencies": {

},
"engines": {
"node": "*"
},
"homepage": "https://github.com/qiao/difflib.js",

@@ -53,0 +53,0 @@ "keywords": [

{
"_args": [
[
"dreamopt@0.6.0",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "dreamopt@0.6.0",
"_from": "dreamopt@~0.6.0",
"_id": "dreamopt@0.6.0",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "dreamopt@0.6.0",
"raw": "dreamopt@~0.6.0",
"name": "dreamopt",
"escapedName": "dreamopt",
"rawSpec": "0.6.0",
"rawSpec": "~0.6.0",
"saveSpec": null,
"fetchSpec": "0.6.0"
"fetchSpec": "~0.6.0"
},

@@ -29,4 +23,5 @@ "_requiredBy": [

"_resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz",
"_spec": "0.6.0",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_shasum": "d813ccdac8d39d8ad526775514a13dda664d6b4b",
"_spec": "dreamopt@~0.6.0",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk/node_modules/json-diff",
"author": {

@@ -39,5 +34,7 @@ "name": "Andrey Tarantsov",

},
"bundleDependencies": false,
"dependencies": {
"wordwrap": ">=0.0.2"
},
"deprecated": false,
"description": "Command-line parser with readable syntax from your sweetest dreams",

@@ -44,0 +41,0 @@ "devDependencies": {

{
"_args": [
[
"es5-ext@0.8.2",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "es5-ext@0.8.2",
"_from": "es5-ext@0.8.x",
"_id": "es5-ext@0.8.2",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "es5-ext@0.8.2",
"raw": "es5-ext@0.8.x",
"name": "es5-ext",
"escapedName": "es5-ext",
"rawSpec": "0.8.2",
"rawSpec": "0.8.x",
"saveSpec": null,
"fetchSpec": "0.8.2"
"fetchSpec": "0.8.x"
},

@@ -29,4 +23,5 @@ "_requiredBy": [

"_resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz",
"_spec": "0.8.2",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_shasum": "aba8d9e1943a895ac96837a62a39b3f55ecd94ab",
"_spec": "es5-ext@0.8.x",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk/node_modules/cli-color",
"author": {

@@ -41,3 +36,5 @@ "name": "Mariusz Nowak",

},
"bundleDependencies": false,
"dependencies": {},
"deprecated": false,
"description": "ECMAScript5 extensions",

@@ -44,0 +41,0 @@ "devDependencies": {

{
"_args": [
[
"heap@0.2.6",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "heap@0.2.6",
"_from": "heap@>= 0.2.0",
"_id": "heap@0.2.6",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "heap@0.2.6",
"raw": "heap@>= 0.2.0",
"name": "heap",
"escapedName": "heap",
"rawSpec": "0.2.6",
"rawSpec": ">= 0.2.0",
"saveSpec": null,
"fetchSpec": "0.2.6"
"fetchSpec": ">= 0.2.0"
},

@@ -29,4 +23,5 @@ "_requiredBy": [

"_resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",
"_spec": "0.2.6",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_shasum": "087e1f10b046932fc8594dd9e6d378afc9d1e5ac",
"_spec": "heap@>= 0.2.0",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk/node_modules/difflib",
"author": {

@@ -39,3 +34,5 @@ "name": "Xueqiao Xu",

},
"bundleDependencies": false,
"dependencies": {},
"deprecated": false,
"description": "binary heap (priority queue) algorithms (ported from Python's heapq module)",

@@ -42,0 +39,0 @@ "devDependencies": {

{
"_args": [
[
"js-base64@2.4.9",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "js-base64@2.4.9",
"_from": "js-base64@^2.4.5",
"_id": "js-base64@2.4.9",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "js-base64@2.4.9",
"raw": "js-base64@^2.4.5",
"name": "js-base64",
"escapedName": "js-base64",
"rawSpec": "2.4.9",
"rawSpec": "^2.4.5",
"saveSpec": null,
"fetchSpec": "2.4.9"
"fetchSpec": "^2.4.5"
},

@@ -29,4 +23,5 @@ "_requiredBy": [

"_resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
"_spec": "2.4.9",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_shasum": "748911fb04f48a60c4771b375cac45a80df11c03",
"_spec": "js-base64@^2.4.5",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk",
"author": {

@@ -38,2 +33,4 @@ "name": "Dan Kogai"

},
"bundleDependencies": false,
"deprecated": false,
"description": "Yet another Base64 transcoder in pure-JS",

@@ -40,0 +37,0 @@ "devDependencies": {

{
"_args": [
[
"json-diff@0.3.1",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "json-diff@0.3.1",
"_from": "json-diff@^0.3.1",
"_id": "json-diff@0.3.1",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "json-diff@0.3.1",
"raw": "json-diff@^0.3.1",
"name": "json-diff",
"escapedName": "json-diff",
"rawSpec": "0.3.1",
"rawSpec": "^0.3.1",
"saveSpec": null,
"fetchSpec": "0.3.1"
"fetchSpec": "^0.3.1"
},

@@ -28,5 +22,6 @@ "_requiredBy": [

],
"_resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.3.1.tgz",
"_spec": "0.3.1",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_resolved": "http://registry.npmjs.org/json-diff/-/json-diff-0.3.1.tgz",
"_shasum": "6dbc3ae2d25e075a7fd71bcd9874458666fb681b",
"_spec": "json-diff@^0.3.1",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk",
"author": {

@@ -42,2 +37,3 @@ "name": "Andrey Tarantsov",

},
"bundleDependencies": false,
"dependencies": {

@@ -48,2 +44,3 @@ "cli-color": "~0.1.6",

},
"deprecated": false,
"description": "JSON diff",

@@ -50,0 +47,0 @@ "devDependencies": {

{
"_args": [
[
"wordwrap@1.0.0",
"/codebuild/output/src566918775/src/packages/@aws-cdk/cdk"
]
],
"_from": "wordwrap@1.0.0",
"_from": "wordwrap@>=0.0.2",
"_id": "wordwrap@1.0.0",

@@ -15,10 +9,10 @@ "_inBundle": false,

"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "wordwrap@1.0.0",
"raw": "wordwrap@>=0.0.2",
"name": "wordwrap",
"escapedName": "wordwrap",
"rawSpec": "1.0.0",
"rawSpec": ">=0.0.2",
"saveSpec": null,
"fetchSpec": "1.0.0"
"fetchSpec": ">=0.0.2"
},

@@ -29,4 +23,5 @@ "_requiredBy": [

"_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"_spec": "1.0.0",
"_where": "/codebuild/output/src566918775/src/packages/@aws-cdk/cdk",
"_shasum": "27584810891456a4171c8d0226441ade90cbcaeb",
"_spec": "wordwrap@>=0.0.2",
"_where": "/codebuild/output/src393726274/src/packages/@aws-cdk/cdk/node_modules/dreamopt",
"author": {

@@ -40,2 +35,4 @@ "name": "James Halliday",

},
"bundleDependencies": false,
"deprecated": false,
"description": "Wrap those words. Show them at what columns to start and stop.",

@@ -42,0 +39,0 @@ "devDependencies": {

{
"name": "@aws-cdk/cdk",
"version": "0.13.0",
"version": "0.14.0",
"description": "AWS Cloud Development Kit Core Library",

@@ -56,8 +56,11 @@ "main": "lib/index.js",

"@types/js-base64": "^2.3.1",
"cdk-build-tools": "^0.13.0",
"cfn2ts": "^0.13.0",
"pkglint": "^0.13.0"
"@types/lodash": "^4.14.117",
"cdk-build-tools": "^0.14.0",
"cfn2ts": "^0.14.0",
"fast-check": "^1.7.0",
"lodash": "^4.17.11",
"pkglint": "^0.14.0"
},
"dependencies": {
"@aws-cdk/cx-api": "^0.13.0",
"@aws-cdk/cx-api": "^0.14.0",
"js-base64": "^2.4.5",

@@ -64,0 +67,0 @@ "json-diff": "^0.3.1"

@@ -9,14 +9,3 @@ "use strict";

});
test.deepEqual(lib_1.resolve(arn), { 'Fn::Join': ['',
['arn',
':',
{ Ref: 'AWS::Partition' },
':',
'sqs',
':',
{ Ref: 'AWS::Region' },
':',
{ Ref: 'AWS::AccountId' },
':',
'myqueuename']] });
test.deepEqual(lib_1.resolve(arn), lib_1.resolve(new lib_1.FnConcat('arn', ':', { Ref: 'AWS::Partition' }, ':', 'sqs', ':', { Ref: 'AWS::Region' }, ':', { Ref: 'AWS::AccountId' }, ':', 'myqueuename')));
test.done();

@@ -33,16 +22,3 @@ },

});
test.deepEqual(lib_1.resolve(arn), { 'Fn::Join': ['',
['arn',
':',
'aws-cn',
':',
'dynamodb',
':',
'us-east-1',
':',
'123456789012',
':',
'table',
'/',
'mytable/stream/label']] });
test.deepEqual(lib_1.resolve(arn), lib_1.resolve(new lib_1.FnConcat('arn', ':', 'aws-cn', ':', 'dynamodb', ':', 'us-east-1', ':', '123456789012', ':', 'table', '/', 'mytable/stream/label')));
test.done();

@@ -58,20 +34,3 @@ },

});
test.deepEqual(lib_1.resolve(arn), {
'Fn::Join': [
'',
[
'arn',
':',
'aws-cn',
':',
's3',
':',
'',
':',
'',
':',
'my-bucket',
]
]
});
test.deepEqual(lib_1.resolve(arn), lib_1.resolve(new lib_1.FnConcat('arn', ':', 'aws-cn', ':', 's3', ':', '', ':', '', ':', 'my-bucket')));
test.done();

@@ -86,16 +45,3 @@ },

});
test.deepEqual(lib_1.resolve(arn), { 'Fn::Join': ['',
['arn',
':',
{ Ref: 'AWS::Partition' },
':',
'codedeploy',
':',
{ Ref: 'AWS::Region' },
':',
{ Ref: 'AWS::AccountId' },
':',
'application',
':',
'WordPress_App']] });
test.deepEqual(lib_1.resolve(arn), lib_1.resolve(new lib_1.FnConcat('arn', ':', { Ref: 'AWS::Partition' }, ':', 'codedeploy', ':', { Ref: 'AWS::Region' }, ':', { Ref: 'AWS::AccountId' }, ':', 'application', ':', 'WordPress_App')));
test.done();

@@ -199,2 +145,2 @@ },

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQW9FO0FBRXBFLGlCQUFTO0lBQ1Asc0NBQXNDLENBQUMsSUFBVTtRQUMvQyxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLGFBQWE7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ1AsR0FBRztvQkFDSCxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDekIsR0FBRztvQkFDSCxLQUFLO29CQUNMLEdBQUc7b0JBQ0gsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFO29CQUN0QixHQUFHO29CQUNILEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO29CQUN6QixHQUFHO29CQUNILGFBQWEsQ0FBRSxDQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCx3RUFBd0UsQ0FBQyxJQUFVO1FBQ2pGLE1BQU0sR0FBRyxHQUFHLGNBQVEsQ0FBQyxjQUFjLENBQUM7WUFDbEMsT0FBTyxFQUFFLFVBQVU7WUFDbkIsUUFBUSxFQUFFLE9BQU87WUFDakIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsWUFBWSxFQUFFLHNCQUFzQjtTQUNyQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFDekMsQ0FBRSxFQUFFO2dCQUNGLENBQUUsS0FBSztvQkFDUCxHQUFHO29CQUNILFFBQVE7b0JBQ1IsR0FBRztvQkFDSCxVQUFVO29CQUNWLEdBQUc7b0JBQ0gsV0FBVztvQkFDWCxHQUFHO29CQUNILGNBQWM7b0JBQ2QsR0FBRztvQkFDSCxPQUFPO29CQUNQLEdBQUc7b0JBQ0gsc0JBQXNCLENBQUUsQ0FBRSxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsa0NBQWtDLENBQUMsSUFBVTtRQUMzQyxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLFdBQVc7WUFDckIsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsRUFBRTtZQUNWLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFVBQVUsRUFBRTtnQkFDVixFQUFFO2dCQUNGO29CQUNFLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxRQUFRO29CQUNSLEdBQUc7b0JBQ0gsSUFBSTtvQkFDSixHQUFHO29CQUNILEVBQUU7b0JBQ0YsR0FBRztvQkFDSCxFQUFFO29CQUNGLEdBQUc7b0JBQ0gsV0FBVztpQkFDWjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELDhEQUE4RCxDQUFDLElBQVU7UUFDdkUsTUFBTSxHQUFHLEdBQUcsY0FBUSxDQUFDLGNBQWMsQ0FBQztZQUNsQyxPQUFPLEVBQUUsWUFBWTtZQUNyQixRQUFRLEVBQUUsYUFBYTtZQUN2QixHQUFHLEVBQUUsR0FBRztZQUNSLFlBQVksRUFBRSxlQUFlO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUN6QyxDQUFFLEVBQUU7Z0JBQ0YsQ0FBRSxLQUFLO29CQUNQLEdBQUc7b0JBQ0gsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7b0JBQ3pCLEdBQUc7b0JBQ0gsWUFBWTtvQkFDWixHQUFHO29CQUNILEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRTtvQkFDdEIsR0FBRztvQkFDSCxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDekIsR0FBRztvQkFDSCxhQUFhO29CQUNiLEdBQUc7b0JBQ0gsZUFBZSxDQUFFLENBQUUsRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlEQUFpRCxDQUFDLElBQVU7UUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLEtBQUs7WUFDZixHQUFHLEVBQUUsR0FBRztTQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsRUFBRTtRQUVkLE9BQU8sRUFBRTtZQUNQLCtCQUErQixDQUFDLElBQVU7Z0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBUSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLHVDQUF1QyxDQUFDLENBQUM7Z0JBQy9GLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7WUFFRCwwQ0FBMEMsQ0FBQyxJQUFVO2dCQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSx3REFBd0QsQ0FBQyxDQUFDO2dCQUNoSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxDQUFDO1lBRUQsK0JBQStCLENBQUMsSUFBVTtnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFRLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsdURBQXVELENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsQ0FBQztZQUVELGdDQUFnQyxDQUFDLElBQVU7Z0JBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBUSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLHdEQUF3RCxDQUFDLENBQUM7Z0JBQ2xILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7U0FDRjtRQUVELDJCQUEyQixDQUFDLElBQVU7WUFDcEMsTUFBTSxLQUFLLEdBQXFDO2dCQUM5QyxvREFBb0QsRUFBRTtvQkFDcEQsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLE9BQU8sRUFBRSxLQUFLO29CQUNkLE1BQU0sRUFBRSxRQUFRO29CQUNoQixPQUFPLEVBQUUsV0FBVztvQkFDcEIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFlBQVksRUFBRSxVQUFVO29CQUN4QixHQUFHLEVBQUUsR0FBRztpQkFDVDtnQkFDRCx1RkFBdUYsRUFBRTtvQkFDdkYsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLE9BQU8sRUFBRSxZQUFZO29CQUNyQixNQUFNLEVBQUUsV0FBVztvQkFDbkIsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsR0FBRyxFQUFFLEdBQUc7b0JBQ1IsWUFBWSxFQUFFLHdCQUF3QjtpQkFDdkM7Z0JBQ0QsOEVBQThFLEVBQUU7b0JBQzlFLFNBQVMsRUFBRSxRQUFRO29CQUNuQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixZQUFZLEVBQUUsa0NBQWtDO29CQUNoRCxHQUFHLEVBQUUsR0FBRztpQkFDVDtnQkFDRCxpRkFBaUYsRUFBRTtvQkFDakYsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixZQUFZLEVBQUUsZ0RBQWdEO29CQUM5RCxHQUFHLEVBQUUsR0FBRztpQkFDVDtnQkFDRCxrQ0FBa0MsRUFBRTtvQkFDbEMsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLE9BQU8sRUFBRSxJQUFJO29CQUNiLFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDO2FBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBRUQsMEJBQTBCLENBQUMsSUFBVTtZQUNuQyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUMxQyxNQUFNLE1BQU0sR0FBRyxjQUFRLENBQUMsVUFBVSxDQUFDLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRW5FLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFFLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFFLEdBQUcsRUFBRSxRQUFRLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFFLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFFLEdBQUcsRUFBRSxRQUFRLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ25HLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFFLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFFLEdBQUcsRUFBRSxRQUFRLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFFLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFFLEdBQUcsRUFBRSxRQUFRLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ25HLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFFLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFFLEdBQUcsRUFBRSxRQUFRLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3BHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFFLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFFLEdBQUcsRUFBRSxRQUFRLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUU1QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO1FBRUQsMEJBQTBCLENBQUMsSUFBVTtZQUNuQyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUMxQyxNQUFNLE1BQU0sR0FBRyxjQUFRLENBQUMsVUFBVSxDQUFDLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRTVCLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3JKLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBRXpKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FDRjtDQUVGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQXJuQ29tcG9uZW50cywgQXJuVXRpbHMsIHJlc29sdmUsIFRva2VuIH0gZnJvbSAnLi4vLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAnY3JlYXRlIGZyb20gY29tcG9uZW50cyB3aXRoIGRlZmF1bHRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXJuID0gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgc2VydmljZTogJ3NxcycsXG4gICAgICByZXNvdXJjZTogJ215cXVldWVuYW1lJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgWyAnJyxcbiAgICAgIFsgJ2FybicsXG4gICAgICAnOicsXG4gICAgICB7IFJlZjogJ0FXUzo6UGFydGl0aW9uJyB9LFxuICAgICAgJzonLFxuICAgICAgJ3NxcycsXG4gICAgICAnOicsXG4gICAgICB7IFJlZjogJ0FXUzo6UmVnaW9uJyB9LFxuICAgICAgJzonLFxuICAgICAgeyBSZWY6ICdBV1M6OkFjY291bnRJZCcgfSxcbiAgICAgICc6JyxcbiAgICAgICdteXF1ZXVlbmFtZScgXSBdIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjcmVhdGUgZnJvbSBjb21wb25lbnRzIHdpdGggc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgdmFyaW91cyBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXJuID0gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgc2VydmljZTogJ2R5bmFtb2RiJyxcbiAgICAgIHJlc291cmNlOiAndGFibGUnLFxuICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgICAgcGFydGl0aW9uOiAnYXdzLWNuJyxcbiAgICAgIHJlc291cmNlTmFtZTogJ215dGFibGUvc3RyZWFtL2xhYmVsJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgWyAnJyxcbiAgICAgIFsgJ2FybicsXG4gICAgICAnOicsXG4gICAgICAnYXdzLWNuJyxcbiAgICAgICc6JyxcbiAgICAgICdkeW5hbW9kYicsXG4gICAgICAnOicsXG4gICAgICAndXMtZWFzdC0xJyxcbiAgICAgICc6JyxcbiAgICAgICcxMjM0NTY3ODkwMTInLFxuICAgICAgJzonLFxuICAgICAgJ3RhYmxlJyxcbiAgICAgICcvJyxcbiAgICAgICdteXRhYmxlL3N0cmVhbS9sYWJlbCcgXSBdIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhbGxvdyBlbXB0eSBzdHJpbmcgaW4gY29tcG9uZW50cycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICByZXNvdXJjZTogJ215LWJ1Y2tldCcsXG4gICAgICBhY2NvdW50OiAnJyxcbiAgICAgIHJlZ2lvbjogJycsXG4gICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7XG4gICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICcnLFxuICAgICAgICBbXG4gICAgICAgICAgJ2FybicsXG4gICAgICAgICAgJzonLFxuICAgICAgICAgICdhd3MtY24nLFxuICAgICAgICAgICc6JyxcbiAgICAgICAgICAnczMnLFxuICAgICAgICAgICc6JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnOicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJzonLFxuICAgICAgICAgICdteS1idWNrZXQnLFxuICAgICAgICBdXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAncmVzb3VyY2VQYXRoU2VwIGNhbiBiZSBzZXQgdG8gXCI6XCIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBcIi9cIicodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgIHNlcnZpY2U6ICdjb2RlZGVwbG95JyxcbiAgICAgIHJlc291cmNlOiAnYXBwbGljYXRpb24nLFxuICAgICAgc2VwOiAnOicsXG4gICAgICByZXNvdXJjZU5hbWU6ICdXb3JkUHJlc3NfQXBwJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgWyAnJyxcbiAgICAgIFsgJ2FybicsXG4gICAgICAnOicsXG4gICAgICB7IFJlZjogJ0FXUzo6UGFydGl0aW9uJyB9LFxuICAgICAgJzonLFxuICAgICAgJ2NvZGVkZXBsb3knLFxuICAgICAgJzonLFxuICAgICAgeyBSZWY6ICdBV1M6OlJlZ2lvbicgfSxcbiAgICAgICc6JyxcbiAgICAgIHsgUmVmOiAnQVdTOjpBY2NvdW50SWQnIH0sXG4gICAgICAnOicsXG4gICAgICAnYXBwbGljYXRpb24nLFxuICAgICAgJzonLFxuICAgICAgJ1dvcmRQcmVzc19BcHAnIF0gXSB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZmFpbHMgaWYgcmVzb3VyY2VQYXRoU2VwIGlzIG5laXRoZXIgXCI6XCIgbm9yIFwiL1wiJyh0ZXN0OiBUZXN0KSB7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgc2VydmljZTogJ2ZvbycsXG4gICAgICByZXNvdXJjZTogJ2JhcicsXG4gICAgICBzZXA6ICd4JyB9KSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0Fybi5wYXJzZShzKSc6IHtcblxuICAgICdmYWlscyc6IHtcbiAgICAgICdpZiBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBcImFybjpcIicodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm5VdGlscy5wYXJzZShcImJhcm46Zm9vOng6YToxOjJcIiksIC9BUk5zIG11c3Qgc3RhcnQgd2l0aCBcImFybjpcIjogYmFybjpmb28vKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICB9LFxuXG4gICAgICAnaWYgdGhlIEFSTiBkb2VzbnQgaGF2ZSBlbm91Z2ggY29tcG9uZW50cycodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm5VdGlscy5wYXJzZSgnYXJuOmlzOnRvbzpzaG9ydCcpLCAvQVJOcyBtdXN0IGhhdmUgYXQgbGVhc3QgNiBjb21wb25lbnRzOiBhcm46aXM6dG9vOnNob3J0Lyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgfSxcblxuICAgICAgJ2lmIFwic2VydmljZVwiIGlzIG5vdCBzcGVjaWZpZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMucGFyc2UoJ2Fybjphd3M6OjQ6NTo2JyksIC9UaGUgYHNlcnZpY2VgIGNvbXBvbmVudCBcXCgzcmQgY29tcG9uZW50XFwpIGlzIHJlcXVpcmVkLyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgfSxcblxuICAgICAgJ2lmIFwicmVzb3VyY2VcIiBpcyBub3Qgc3BlY2lmaWVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLnBhcnNlKCdhcm46YXdzOnNlcnZpY2U6OjonKSwgL1RoZSBgcmVzb3VyY2VgIGNvbXBvbmVudCBcXCg2dGggY29tcG9uZW50XFwpIGlzIHJlcXVpcmVkLyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAndmFyaW91cyBzdWNjZXNzZnVsIHBhcnNlcycodGVzdDogVGVzdCkge1xuICAgICAgY29uc3QgdGVzdHM6IHsgW2Fybjogc3RyaW5nXTogQXJuQ29tcG9uZW50cyB9ID0ge1xuICAgICAgICAnYXJuOmF3czphNGI6cmVnaW9uOmFjY291bnRpZDpyZXNvdXJjZXR5cGUvcmVzb3VyY2UnOiB7XG4gICAgICAgICAgcGFydGl0aW9uOiAnYXdzJyxcbiAgICAgICAgICBzZXJ2aWNlOiAnYTRiJyxcbiAgICAgICAgICByZWdpb246ICdyZWdpb24nLFxuICAgICAgICAgIGFjY291bnQ6ICdhY2NvdW50aWQnLFxuICAgICAgICAgIHJlc291cmNlOiAncmVzb3VyY2V0eXBlJyxcbiAgICAgICAgICByZXNvdXJjZU5hbWU6ICdyZXNvdXJjZScsXG4gICAgICAgICAgc2VwOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgJ2Fybjphd3M6YXBpZ2F0ZXdheTp1cy1lYXN0LTE6OmExMjM0NTY3ODkwMTJiYzNkZTQ1Njc4OTAxZjIzYTQ1Oi90ZXN0L215ZGVtb3Jlc291cmNlLyonOiB7XG4gICAgICAgICAgcGFydGl0aW9uOiAnYXdzJyxcbiAgICAgICAgICBzZXJ2aWNlOiAnYXBpZ2F0ZXdheScsXG4gICAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgICByZXNvdXJjZTogJ2ExMjM0NTY3ODkwMTJiYzNkZTQ1Njc4OTAxZjIzYTQ1JyxcbiAgICAgICAgICBzZXA6ICc6JyxcbiAgICAgICAgICByZXNvdXJjZU5hbWU6ICcvdGVzdC9teWRlbW9yZXNvdXJjZS8qJ1xuICAgICAgICB9LFxuICAgICAgICAnYXJuOmF3cy1jbjpjbG91ZDk6OjEyMzQ1Njc4OTAxMjplbnZpcm9ubWVudDo4MWU5MDAzMTczNDc1ODVhMDYwMWUwNGM4ZDUyZWFFWCc6IHtcbiAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICAgIHNlcnZpY2U6ICdjbG91ZDknLFxuICAgICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICAgIHJlc291cmNlOiAnZW52aXJvbm1lbnQnLFxuICAgICAgICAgIHJlc291cmNlTmFtZTogJzgxZTkwMDMxNzM0NzU4NWEwNjAxZTA0YzhkNTJlYUVYJyxcbiAgICAgICAgICBzZXA6ICc6J1xuICAgICAgICB9LFxuICAgICAgICAnYXJuOjpjb2duaXRvLXN5bmM6OjppZGVudGl0eXBvb2wvdXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYSc6IHtcbiAgICAgICAgICBzZXJ2aWNlOiAnY29nbml0by1zeW5jJyxcbiAgICAgICAgICByZXNvdXJjZTogJ2lkZW50aXR5cG9vbCcsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiAndXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYScsXG4gICAgICAgICAgc2VwOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgJ2Fybjphd3M6czM6OjpteV9jb3Jwb3JhdGVfYnVja2V0Jzoge1xuICAgICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgICByZXNvdXJjZTogJ215X2NvcnBvcmF0ZV9idWNrZXQnXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIE9iamVjdC5rZXlzKHRlc3RzKS5mb3JFYWNoKGFybiA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gdGVzdHNbYXJuXTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoQXJuVXRpbHMucGFyc2UoYXJuKSwgZXhwZWN0ZWQsIGFybik7XG4gICAgICB9KTtcblxuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdhIFRva2VuIHdpdGggOiBzZXBhcmF0b3InKHRlc3Q6IFRlc3QpIHtcbiAgICAgIGNvbnN0IHRoZVRva2VuID0geyBSZWY6ICdTb21lUGFyYW1ldGVyJyB9O1xuICAgICAgY29uc3QgcGFyc2VkID0gQXJuVXRpbHMucGFyc2VUb2tlbihuZXcgVG9rZW4oKCkgPT4gdGhlVG9rZW4pLCAnOicpO1xuXG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5wYXJ0aXRpb24pLCB7ICdGbjo6U2VsZWN0JzogWyAxLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQuc2VydmljZSksIHsgJ0ZuOjpTZWxlY3QnOiBbIDIsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZWdpb24pLCB7ICdGbjo6U2VsZWN0JzogWyAzLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQuYWNjb3VudCksIHsgJ0ZuOjpTZWxlY3QnOiBbIDQsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZSksIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSk7XG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZU5hbWUpLCB7ICdGbjo6U2VsZWN0JzogWyA2LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5lcXVhbChwYXJzZWQuc2VwLCAnOicpO1xuXG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2EgVG9rZW4gd2l0aCAvIHNlcGFyYXRvcicodGVzdDogVGVzdCkge1xuICAgICAgY29uc3QgdGhlVG9rZW4gPSB7IFJlZjogJ1NvbWVQYXJhbWV0ZXInIH07XG4gICAgICBjb25zdCBwYXJzZWQgPSBBcm5VdGlscy5wYXJzZVRva2VuKG5ldyBUb2tlbigoKSA9PiB0aGVUb2tlbikpO1xuXG4gICAgICB0ZXN0LmVxdWFsKHBhcnNlZC5zZXAsICcvJyk7XG5cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnJlc291cmNlKSwgeyAnRm46OlNlbGVjdCc6IFsgMCwgeyAnRm46OlNwbGl0JzogWyAnLycsIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSBdfSBdfSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZU5hbWUpLCB7ICdGbjo6U2VsZWN0JzogWyAxLCB7ICdGbjo6U3BsaXQnOiBbICcvJywgeyAnRm46OlNlbGVjdCc6IFsgNSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19IF19IF19KTtcblxuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxuICB9LFxuXG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQThFO0FBRTlFLGlCQUFTO0lBQ1Asc0NBQXNDLENBQUMsSUFBVTtRQUMvQyxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLGFBQWE7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQ1osYUFBTyxDQUFDLElBQUksY0FBUSxDQUFDLEtBQUssRUFDTCxHQUFHLEVBQ0gsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsRUFDekIsR0FBRyxFQUNILEtBQUssRUFDTCxHQUFHLEVBQ0gsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQ3RCLEdBQUcsRUFDSCxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxFQUN6QixHQUFHLEVBQ0gsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCx3RUFBd0UsQ0FBQyxJQUFVO1FBQ2pGLE1BQU0sR0FBRyxHQUFHLGNBQVEsQ0FBQyxjQUFjLENBQUM7WUFDbEMsT0FBTyxFQUFFLFVBQVU7WUFDbkIsUUFBUSxFQUFFLE9BQU87WUFDakIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsWUFBWSxFQUFFLHNCQUFzQjtTQUNyQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFDWixhQUFPLENBQUMsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUNMLEdBQUcsRUFDSCxRQUFRLEVBQ1IsR0FBRyxFQUNILFVBQVUsRUFDVixHQUFHLEVBQ0gsV0FBVyxF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RUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3JKLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBRXpKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FDRjtDQUVGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQXJuQ29tcG9uZW50cywgQXJuVXRpbHMsIEZuQ29uY2F0LCByZXNvbHZlLCBUb2tlbiB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgJ2NyZWF0ZSBmcm9tIGNvbXBvbmVudHMgd2l0aCBkZWZhdWx0cycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgIHNlcnZpY2U6ICdzcXMnLFxuICAgICAgcmVzb3VyY2U6ICdteXF1ZXVlbmFtZSdcbiAgICB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYXJuKSxcbiAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBGbkNvbmNhdCgnYXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpSZWdpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpBY2NvdW50SWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdteXF1ZXVlbmFtZScpKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NyZWF0ZSBmcm9tIGNvbXBvbmVudHMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBhcm4gPSBBcm5VdGlscy5mcm9tQ29tcG9uZW50cyh7XG4gICAgICBzZXJ2aWNlOiAnZHluYW1vZGInLFxuICAgICAgcmVzb3VyY2U6ICd0YWJsZScsXG4gICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgcmVzb3VyY2VOYW1lOiAnbXl0YWJsZS9zdHJlYW0vbGFiZWwnXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGFybiksXG4gICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgRm5Db25jYXQoJ2FybicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhd3MtY24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHluYW1vZGInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXMtZWFzdC0xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdteXRhYmxlL3N0cmVhbS9sYWJlbCcpKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FsbG93IGVtcHR5IHN0cmluZyBpbiBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgYXJuID0gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgIHJlc291cmNlOiAnbXktYnVja2V0JyxcbiAgICAgIGFjY291bnQ6ICcnLFxuICAgICAgcmVnaW9uOiAnJyxcbiAgICAgIHBhcnRpdGlvbjogJ2F3cy1jbicsXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGFybiksXG4gICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgRm5Db25jYXQoJ2FybicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhd3MtY24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnczMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdteS1idWNrZXQnKSkpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Jlc291cmNlUGF0aFNlcCBjYW4gYmUgc2V0IHRvIFwiOlwiIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCIvXCInKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBhcm4gPSBBcm5VdGlscy5mcm9tQ29tcG9uZW50cyh7XG4gICAgICBzZXJ2aWNlOiAnY29kZWRlcGxveScsXG4gICAgICByZXNvdXJjZTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgIHNlcDogJzonLFxuICAgICAgcmVzb3VyY2VOYW1lOiAnV29yZFByZXNzX0FwcCdcbiAgICB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYXJuKSxcbiAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBGbkNvbmNhdCgnYXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGVkZXBsb3knLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJlZjogJ0FXUzo6UmVnaW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJlZjogJ0FXUzo6QWNjb3VudElkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV29yZFByZXNzX0FwcCcpKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2ZhaWxzIGlmIHJlc291cmNlUGF0aFNlcCBpcyBuZWl0aGVyIFwiOlwiIG5vciBcIi9cIicodGVzdDogVGVzdCkge1xuICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgIHNlcnZpY2U6ICdmb28nLFxuICAgICAgcmVzb3VyY2U6ICdiYXInLFxuICAgICAgc2VwOiAneCcgfSkpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdBcm4ucGFyc2UocyknOiB7XG5cbiAgICAnZmFpbHMnOiB7XG4gICAgICAnaWYgZG9lc25cXCd0IHN0YXJ0IHdpdGggXCJhcm46XCInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMucGFyc2UoXCJiYXJuOmZvbzp4OmE6MToyXCIpLCAvQVJOcyBtdXN0IHN0YXJ0IHdpdGggXCJhcm46XCI6IGJhcm46Zm9vLyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgfSxcblxuICAgICAgJ2lmIHRoZSBBUk4gZG9lc250IGhhdmUgZW5vdWdoIGNvbXBvbmVudHMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMucGFyc2UoJ2Fybjppczp0b286c2hvcnQnKSwgL0FSTnMgbXVzdCBoYXZlIGF0IGxlYXN0IDYgY29tcG9uZW50czogYXJuOmlzOnRvbzpzaG9ydC8pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgIH0sXG5cbiAgICAgICdpZiBcInNlcnZpY2VcIiBpcyBub3Qgc3BlY2lmaWVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLnBhcnNlKCdhcm46YXdzOjo0OjU6NicpLCAvVGhlIGBzZXJ2aWNlYCBjb21wb25lbnQgXFwoM3JkIGNvbXBvbmVudFxcKSBpcyByZXF1aXJlZC8pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgIH0sXG5cbiAgICAgICdpZiBcInJlc291cmNlXCIgaXMgbm90IHNwZWNpZmllZCcodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm5VdGlscy5wYXJzZSgnYXJuOmF3czpzZXJ2aWNlOjo6JyksIC9UaGUgYHJlc291cmNlYCBjb21wb25lbnQgXFwoNnRoIGNvbXBvbmVudFxcKSBpcyByZXF1aXJlZC8pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJ3ZhcmlvdXMgc3VjY2Vzc2Z1bCBwYXJzZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgIGNvbnN0IHRlc3RzOiB7IFthcm46IHN0cmluZ106IEFybkNvbXBvbmVudHMgfSA9IHtcbiAgICAgICAgJ2Fybjphd3M6YTRiOnJlZ2lvbjphY2NvdW50aWQ6cmVzb3VyY2V0eXBlL3Jlc291cmNlJzoge1xuICAgICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgICAgc2VydmljZTogJ2E0YicsXG4gICAgICAgICAgcmVnaW9uOiAncmVnaW9uJyxcbiAgICAgICAgICBhY2NvdW50OiAnYWNjb3VudGlkJyxcbiAgICAgICAgICByZXNvdXJjZTogJ3Jlc291cmNldHlwZScsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiAncmVzb3VyY2UnLFxuICAgICAgICAgIHNlcDogJy8nXG4gICAgICAgIH0sXG4gICAgICAgICdhcm46YXdzOmFwaWdhdGV3YXk6dXMtZWFzdC0xOjphMTIzNDU2Nzg5MDEyYmMzZGU0NTY3ODkwMWYyM2E0NTovdGVzdC9teWRlbW9yZXNvdXJjZS8qJzoge1xuICAgICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgICAgc2VydmljZTogJ2FwaWdhdGV3YXknLFxuICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgcmVzb3VyY2U6ICdhMTIzNDU2Nzg5MDEyYmMzZGU0NTY3ODkwMWYyM2E0NScsXG4gICAgICAgICAgc2VwOiAnOicsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiAnL3Rlc3QvbXlkZW1vcmVzb3VyY2UvKidcbiAgICAgICAgfSxcbiAgICAgICAgJ2Fybjphd3MtY246Y2xvdWQ5OjoxMjM0NTY3ODkwMTI6ZW52aXJvbm1lbnQ6ODFlOTAwMzE3MzQ3NTg1YTA2MDFlMDRjOGQ1MmVhRVgnOiB7XG4gICAgICAgICAgcGFydGl0aW9uOiAnYXdzLWNuJyxcbiAgICAgICAgICBzZXJ2aWNlOiAnY2xvdWQ5JyxcbiAgICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgICByZXNvdXJjZTogJ2Vudmlyb25tZW50JyxcbiAgICAgICAgICByZXNvdXJjZU5hbWU6ICc4MWU5MDAzMTczNDc1ODVhMDYwMWUwNGM4ZDUyZWFFWCcsXG4gICAgICAgICAgc2VwOiAnOidcbiAgICAgICAgfSxcbiAgICAgICAgJ2Fybjo6Y29nbml0by1zeW5jOjo6aWRlbnRpdHlwb29sL3VzLWVhc3QtMToxYTFhMWExYS1mZmZmLTExMTEtOTk5OS0xMjM0NTY3ODpibGEnOiB7XG4gICAgICAgICAgc2VydmljZTogJ2NvZ25pdG8tc3luYycsXG4gICAgICAgICAgcmVzb3VyY2U6ICdpZGVudGl0eXBvb2wnLFxuICAgICAgICAgIHJlc291cmNlTmFtZTogJ3VzLWVhc3QtMToxYTFhMWExYS1mZmZmLTExMTEtOTk5OS0xMjM0NTY3ODpibGEnLFxuICAgICAgICAgIHNlcDogJy8nXG4gICAgICAgIH0sXG4gICAgICAgICdhcm46YXdzOnMzOjo6bXlfY29ycG9yYXRlX2J1Y2tldCc6IHtcbiAgICAgICAgICBwYXJ0aXRpb246ICdhd3MnLFxuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgcmVzb3VyY2U6ICdteV9jb3Jwb3JhdGVfYnVja2V0J1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBPYmplY3Qua2V5cyh0ZXN0cykuZm9yRWFjaChhcm4gPT4ge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9IHRlc3RzW2Fybl07XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKEFyblV0aWxzLnBhcnNlKGFybiksIGV4cGVjdGVkLCBhcm4pO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnYSBUb2tlbiB3aXRoIDogc2VwYXJhdG9yJyh0ZXN0OiBUZXN0KSB7XG4gICAgICBjb25zdCB0aGVUb2tlbiA9IHsgUmVmOiAnU29tZVBhcmFtZXRlcicgfTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEFyblV0aWxzLnBhcnNlVG9rZW4obmV3IFRva2VuKCgpID0+IHRoZVRva2VuKSwgJzonKTtcblxuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucGFydGl0aW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnNlcnZpY2UpLCB7ICdGbjo6U2VsZWN0JzogWyAyLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVnaW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMywgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLmFjY291bnQpLCB7ICdGbjo6U2VsZWN0JzogWyA0LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2UpLCB7ICdGbjo6U2VsZWN0JzogWyA1LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2VOYW1lKSwgeyAnRm46OlNlbGVjdCc6IFsgNiwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgIHRlc3QuZXF1YWwocGFyc2VkLnNlcCwgJzonKTtcblxuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdhIFRva2VuIHdpdGggLyBzZXBhcmF0b3InKHRlc3Q6IFRlc3QpIHtcbiAgICAgIGNvbnN0IHRoZVRva2VuID0geyBSZWY6ICdTb21lUGFyYW1ldGVyJyB9O1xuICAgICAgY29uc3QgcGFyc2VkID0gQXJuVXRpbHMucGFyc2VUb2tlbihuZXcgVG9rZW4oKCkgPT4gdGhlVG9rZW4pKTtcblxuICAgICAgdGVzdC5lcXVhbChwYXJzZWQuc2VwLCAnLycpO1xuXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZSksIHsgJ0ZuOjpTZWxlY3QnOiBbIDAsIHsgJ0ZuOjpTcGxpdCc6IFsgJy8nLCB7ICdGbjo6U2VsZWN0JzogWyA1LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0gXX0gXX0pO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2VOYW1lKSwgeyAnRm46OlNlbGVjdCc6IFsgMSwgeyAnRm46OlNwbGl0JzogWyAnLycsIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSBdfSBdfSk7XG5cbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH1cbiAgfSxcblxufTtcbiJdfQ==
"use strict";
const fc = require("fast-check");
const _ = require("lodash");
const nodeunit = require("nodeunit");
const fn = require("../../lib/cloudformation/fn");
const tokens_1 = require("../../lib/core/tokens");
function asyncTest(cb) {
return async (test) => {
let error;
try {
await cb(test);
}
catch (e) {
error = e;
}
finally {
test.doesNotThrow(() => {
if (error) {
throw error;
}
});
test.done();
}
};
}
const nonEmptyString = fc.string(1, 16);
const tokenish = fc.array(nonEmptyString, 2, 2).map(arr => ({ [arr[0]]: arr[1] }));
const anyValue = fc.oneof(nonEmptyString, tokenish);
module.exports = nodeunit.testCase({
'Fn::Join': {
FnJoin: {
'rejects empty list of arguments to join'(test) {
test.throws(() => new fn.FnJoin('.', []));
test.done();
}
}
},
'resolves to the value if only one value is joined': asyncTest(async () => {
await fc.assert(fc.property(fc.string(), anyValue, (delimiter, value) => _.isEqual(tokens_1.resolve(new fn.FnJoin(delimiter, [value])), value)), { verbose: true });
}),
'pre-concatenates string literals': asyncTest(async () => {
await fc.assert(fc.property(fc.string(), fc.array(nonEmptyString, 1, 15), (delimiter, values) => tokens_1.resolve(new fn.FnJoin(delimiter, values)) === values.join(delimiter)), { verbose: true });
}),
'pre-concatenates around tokens': asyncTest(async () => {
await fc.assert(fc.property(fc.string(), fc.array(nonEmptyString, 1, 3), tokenish, fc.array(nonEmptyString, 1, 3), (delimiter, prefix, obj, suffix) => _.isEqual(tokens_1.resolve(new fn.FnJoin(delimiter, [...prefix, obj, ...suffix])), { 'Fn::Join': [delimiter, [prefix.join(delimiter), obj, suffix.join(delimiter)]] })), { verbose: true, seed: 1539874645005, path: "0:0:0:0:0:0:0:0:0" });
}),
'flattens joins nested under joins with same delimiter': asyncTest(async () => {
await fc.assert(fc.property(fc.string(), fc.array(anyValue), fc.array(anyValue, 1, 3), fc.array(anyValue), (delimiter, prefix, nested, suffix) =>
// Gonna test
_.isEqual(tokens_1.resolve(new fn.FnJoin(delimiter, [...prefix, new fn.FnJoin(delimiter, nested), ...suffix])), tokens_1.resolve(new fn.FnJoin(delimiter, [...prefix, ...nested, ...suffix])))), { verbose: true });
}),
'does not flatten joins nested under joins with different delimiter': asyncTest(async () => {
await fc.assert(fc.property(fc.string(), fc.string(), fc.array(anyValue, 1, 3), fc.array(tokenish, 2, 3), fc.array(anyValue, 3), (delimiter1, delimiter2, prefix, nested, suffix) => {
fc.pre(delimiter1 !== delimiter2);
const join = new fn.FnJoin(delimiter1, [...prefix, new fn.FnJoin(delimiter2, nested), ...suffix]);
const resolved = tokens_1.resolve(join);
return resolved['Fn::Join'][1].find((e) => typeof e === 'object'
&& ('Fn::Join' in e)
&& e['Fn::Join'][0] === delimiter2) != null;
}), { verbose: true });
}),
},
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFzQztBQUN0QyxrREFBbUQ7QUFFbkQsaUJBQVMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUN6QixVQUFVLEVBQUU7UUFDVix5Q0FBeUMsQ0FBQyxJQUFtQjtZQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0tBQ0Y7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9kZXVuaXQgPSByZXF1aXJlKCdub2RldW5pdCcpO1xuaW1wb3J0IGZuID0gcmVxdWlyZSgnLi4vLi4vbGliL2Nsb3VkZm9ybWF0aW9uL2ZuJyk7XG5cbmV4cG9ydCA9IG5vZGV1bml0LnRlc3RDYXNlKHtcbiAgJ0ZuOjpKb2luJzoge1xuICAgICdyZWplY3RzIGVtcHR5IGxpc3Qgb2YgYXJndW1lbnRzIHRvIGpvaW4nKHRlc3Q6IG5vZGV1bml0LlRlc3QpIHtcbiAgICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBmbi5GbkpvaW4oJy4nLCBbXSkpO1xuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxuICB9XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlDQUFrQztBQUNsQyw0QkFBNkI7QUFDN0IscUNBQXNDO0FBQ3RDLGtEQUFtRDtBQUNuRCxrREFBZ0Q7QUFFaEQsU0FBUyxTQUFTLENBQUMsRUFBMEM7SUFDM0QsT0FBTyxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ25DLElBQUksS0FBWSxDQUFDO1FBQ2pCLElBQUk7WUFDRixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNYO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxFQUFFO29CQUFFLE1BQU0sS0FBSyxDQUFDO2lCQUFFO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFNLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUV6RCxpQkFBUyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQ3pCLE1BQU0sRUFBRTtRQUNOLHlDQUF5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QUcsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbEcsTUFBTSxRQUFRLEdBQUcsZ0JBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRO3VCQUN0QixDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7dUJBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDMUYsQ0FBQyxDQUNGLEVBQ0QsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQ2xCLENBQUM7UUFDSixDQUFDLENBQUM7S0FDSDtDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmYyA9IHJlcXVpcmUoJ2Zhc3QtY2hlY2snKTtcbmltcG9ydCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5pbXBvcnQgbm9kZXVuaXQgPSByZXF1aXJlKCdub2RldW5pdCcpO1xuaW1wb3J0IGZuID0gcmVxdWlyZSgnLi4vLi4vbGliL2Nsb3VkZm9ybWF0aW9uL2ZuJyk7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnLi4vLi4vbGliL2NvcmUvdG9rZW5zJztcblxuZnVuY3Rpb24gYXN5bmNUZXN0KGNiOiAodGVzdDogbm9kZXVuaXQuVGVzdCkgPT4gUHJvbWlzZTx2b2lkPik6ICh0ZXN0OiBub2RldW5pdC5UZXN0KSA9PiB2b2lkIHtcbiAgcmV0dXJuIGFzeW5jICh0ZXN0OiBub2RldW5pdC5UZXN0KSA9PiB7XG4gICAgbGV0IGVycm9yOiBFcnJvcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2IodGVzdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3IgPSBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0ZXN0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikgeyB0aHJvdyBlcnJvcjsgfVxuICAgICAgfSk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IG5vbkVtcHR5U3RyaW5nID0gZmMuc3RyaW5nKDEsIDE2KTtcbmNvbnN0IHRva2VuaXNoID0gZmMuYXJyYXkobm9uRW1wdHlTdHJpbmcsIDIsIDIpLm1hcChhcnIgPT4gKHsgW2FyclswXV06IGFyclsxXSB9KSk7XG5jb25zdCBhbnlWYWx1ZSA9IGZjLm9uZW9mPGFueT4obm9uRW1wdHlTdHJpbmcsIHRva2VuaXNoKTtcblxuZXhwb3J0ID0gbm9kZXVuaXQudGVzdENhc2Uoe1xuICBGbkpvaW46IHtcbiAgICAncmVqZWN0cyBlbXB0eSBsaXN0IG9mIGFyZ3VtZW50cyB0byBqb2luJyh0ZXN0OiBub2RldW5pdC5UZXN0KSB7XG4gICAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgZm4uRm5Kb2luKCcuJywgW10pKTtcbiAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG4gICAgJ3Jlc29sdmVzIHRvIHRoZSB2YWx1ZSBpZiBvbmx5IG9uZSB2YWx1ZSBpcyBqb2luZWQnOiBhc3luY1Rlc3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmMuYXNzZXJ0KFxuICAgICAgICBmYy5wcm9wZXJ0eShcbiAgICAgICAgICBmYy5zdHJpbmcoKSwgYW55VmFsdWUsXG4gICAgICAgICAgKGRlbGltaXRlciwgdmFsdWUpID0+IF8uaXNFcXVhbChyZXNvbHZlKG5ldyBmbi5GbkpvaW4oZGVsaW1pdGVyLCBbdmFsdWVdKSksIHZhbHVlKVxuICAgICAgICApLFxuICAgICAgICB7IHZlcmJvc2U6IHRydWUgfVxuICAgICAgKTtcbiAgICB9KSxcbiAgICAncHJlLWNvbmNhdGVuYXRlcyBzdHJpbmcgbGl0ZXJhbHMnOiBhc3luY1Rlc3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmMuYXNzZXJ0KFxuICAgICAgICBmYy5wcm9wZXJ0eShcbiAgICAgICAgICBmYy5zdHJpbmcoKSwgZmMuYXJyYXkobm9uRW1wdHlTdHJpbmcsIDEsIDE1KSxcbiAgICAgICAgICAoZGVsaW1pdGVyLCB2YWx1ZXMpID0+IHJlc29sdmUobmV3IGZuLkZuSm9pbihkZWxpbWl0ZXIsIHZhbHVlcykpID09PSB2YWx1ZXMuam9pbihkZWxpbWl0ZXIpXG4gICAgICAgICksXG4gICAgICAgIHsgdmVyYm9zZTogdHJ1ZSB9XG4gICAgICApO1xuICAgIH0pLFxuICAgICdwcmUtY29uY2F0ZW5hdGVzIGFyb3VuZCB0b2tlbnMnOiBhc3luY1Rlc3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmMuYXNzZXJ0KFxuICAgICAgICBmYy5wcm9wZXJ0eShcbiAgICAgICAgICBmYy5zdHJpbmcoKSwgZmMuYXJyYXkobm9uRW1wdHlTdHJpbmcsIDEsIDMpLCB0b2tlbmlzaCwgZmMuYXJyYXkobm9uRW1wdHlTdHJpbmcsIDEsIDMpLFxuICAgICAgICAgIChkZWxpbWl0ZXIsIHByZWZpeCwgb2JqLCBzdWZmaXgpID0+XG4gICAgICAgICAgICBfLmlzRXF1YWwocmVzb2x2ZShuZXcgZm4uRm5Kb2luKGRlbGltaXRlciwgWy4uLnByZWZpeCwgb2JqLCAuLi5zdWZmaXhdKSksXG4gICAgICAgICAgICAgICAgICAgICAgeyAnRm46OkpvaW4nOiBbZGVsaW1pdGVyLCBbcHJlZml4LmpvaW4oZGVsaW1pdGVyKSwgb2JqLCBzdWZmaXguam9pbihkZWxpbWl0ZXIpXV0gfSlcbiAgICAgICAgKSxcbiAgICAgICAgeyB2ZXJib3NlOiB0cnVlLCBzZWVkOiAxNTM5ODc0NjQ1MDA1LCBwYXRoOiBcIjA6MDowOjA6MDowOjA6MDowXCIgfVxuICAgICAgKTtcbiAgICB9KSxcbiAgICAnZmxhdHRlbnMgam9pbnMgbmVzdGVkIHVuZGVyIGpvaW5zIHdpdGggc2FtZSBkZWxpbWl0ZXInOiBhc3luY1Rlc3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmMuYXNzZXJ0KFxuICAgICAgICBmYy5wcm9wZXJ0eShcbiAgICAgICAgICBmYy5zdHJpbmcoKSwgZmMuYXJyYXkoYW55VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgIGZjLmFycmF5KGFueVZhbHVlLCAxLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICBmYy5hcnJheShhbnlWYWx1ZSksXG4gICAgICAgICAgKGRlbGltaXRlciwgcHJlZml4LCBuZXN0ZWQsIHN1ZmZpeCkgPT5cbiAgICAgICAgICAgIC8vIEdvbm5hIHRlc3RcbiAgICAgICAgICAgIF8uaXNFcXVhbChyZXNvbHZlKG5ldyBmbi5GbkpvaW4oZGVsaW1pdGVyLCBbLi4ucHJlZml4LCBuZXcgZm4uRm5Kb2luKGRlbGltaXRlciwgbmVzdGVkKSwgLi4uc3VmZml4XSkpLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IGZuLkZuSm9pbihkZWxpbWl0ZXIsIFsuLi5wcmVmaXgsIC4uLm5lc3RlZCwgLi4uc3VmZml4XSkpKVxuICAgICAgICApLFxuICAgICAgICB7IHZlcmJvc2U6IHRydWUgfVxuICAgICAgKTtcbiAgICB9KSxcbiAgICAnZG9lcyBub3QgZmxhdHRlbiBqb2lucyBuZXN0ZWQgdW5kZXIgam9pbnMgd2l0aCBkaWZmZXJlbnQgZGVsaW1pdGVyJzogYXN5bmNUZXN0KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGZjLmFzc2VydChcbiAgICAgICAgZmMucHJvcGVydHkoXG4gICAgICAgICAgZmMuc3RyaW5nKCksIGZjLnN0cmluZygpLFxuICAgICAgICAgIGZjLmFycmF5KGFueVZhbHVlLCAxLCAzKSxcbiAgICAgICAgICBmYy5hcnJheSh0b2tlbmlzaCwgMiwgMyksXG4gICAgICAgICAgZmMuYXJyYXkoYW55VmFsdWUsIDMpLFxuICAgICAgICAgIChkZWxpbWl0ZXIxLCBkZWxpbWl0ZXIyLCBwcmVmaXgsIG5lc3RlZCwgc3VmZml4KSA9PiB7XG4gICAgICAgICAgICBmYy5wcmUoZGVsaW1pdGVyMSAhPT0gZGVsaW1pdGVyMik7XG4gICAgICAgICAgICBjb25zdCBqb2luID0gbmV3IGZuLkZuSm9pbihkZWxpbWl0ZXIxLCBbLi4ucHJlZml4LCBuZXcgZm4uRm5Kb2luKGRlbGltaXRlcjIsIG5lc3RlZCksIC4uLnN1ZmZpeF0pO1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGpvaW4pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkWydGbjo6Sm9pbiddWzFdLmZpbmQoKGU6IGFueSkgPT4gdHlwZW9mIGUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnRm46OkpvaW4nIGluIGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVbJ0ZuOjpKb2luJ11bMF0gPT09IGRlbGltaXRlcjIpICE9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICB7IHZlcmJvc2U6IHRydWUgfVxuICAgICAgKTtcbiAgICB9KSxcbiAgfSxcbn0pO1xuIl19

@@ -15,3 +15,2 @@ import { Test } from 'nodeunit';

'the "type" property is required when creating a resource'(test: Test): void;
'the "name" property is deleted when synthesizing into a CloudFormation resource'(test: Test): void;
'removal policy is a high level abstraction of deletion policy used by l2'(test: Test): void;

@@ -18,0 +17,0 @@ 'addDependency adds all dependencyElements of dependent constructs'(test: Test): void;

@@ -193,3 +193,3 @@ "use strict";

// GIVEN
const token = new lib_1.CloudFormationToken(() => 'woof woof');
const token = new lib_1.CloudFormationToken(() => ({ woof: 'woof' }));
// WHEN

@@ -200,3 +200,3 @@ const stringified = `The dog says: ${token}`;

test.deepEqual(resolved, {
'Fn::Join': ['', ['The dog says: ', 'woof woof']]
'Fn::Join': ['', ['The dog says: ', { woof: 'woof' }]]
});

@@ -284,2 +284,2 @@ test.done();

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTRFO0FBQzVFLGlFQUE2RDtBQWdSN0QsTUFBTSxRQUFTLFNBQVEsV0FBSztJQUNuQixPQUFPO1FBQ1osT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsT0FBTztnQkFDbkIsVUFBVSxFQUFFLElBQUk7YUFDakI7WUFDRCxPQUFPLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzdCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVMsU0FBUSxXQUFLO0lBQTVCOztRQUNTLE9BQUUsR0FBRyxDQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBRSxDQUFDO0lBS2pELENBQUM7SUFIUSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQUVELE1BQU0sWUFBWTtJQUNoQixZQUFxQixHQUFXO1FBQVgsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUNoQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVMsU0FBUSxZQUFZO0lBR2pDO1FBQ0UsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBSEwsUUFBRyxHQUFHLE9BQU8sQ0FBQztJQUlyQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsMEJBQTBCLENBQUMsS0FBVTtJQUM1QyxPQUFPO1FBQ0wsSUFBSSxXQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2hCLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxpQ0FBaUMsQ0FBQyxLQUFVO0lBQ25ELE9BQU87UUFDTCxJQUFJLHlCQUFtQixDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJ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RUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELDhEQUE4RCxDQUFDLElBQVU7UUFDdkUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRS9DLE9BQU87UUFDUCxNQUFNLENBQUMsR0FBRztZQUNSLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUU7U0FDcEMsQ0FBQztRQUVGLE9BQU87UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELHVEQUF1RCxDQUFDLElBQVU7UUFDaEUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUkseUJBQW1CLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUV4RCxPQUFPO1FBQ1AsTUFBTSxDQUFDLEdBQUc7WUFDUixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFO1NBQ3BDLENBQUM7UUFFRixPQUFPO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0dBQXNHLENBQUMsQ0FBQztRQUN0SSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuLCByZXNvbHZlLCBUb2tlbiwgdW5yZXNvbHZlZCB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBldmFsdWF0ZUNGTiB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uL2V2YWx1YXRlLWNmbic7XG5cbmV4cG9ydCA9IHtcbiAgJ3Jlc29sdmUgYSBwbGFpbiBvbGQgb2JqZWN0IHNob3VsZCBqdXN0IHJldHVybiB0aGUgb2JqZWN0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgb2JqID0geyBQbGFpbk9sZE9iamVjdDogMTIzLCBBcnJheTogWyAxLCAyLCAzIF0gfTtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIG9iaik7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2lmIGEgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYSB0b2tlbiB2YWx1ZSwgaXQgd2lsbCBiZSBldmFsdWF0ZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBSZWd1bGFyVmFsdWU6ICdoZWxsbycsXG4gICAgICBMYXp5VmFsdWU6IG5ldyBUb2tlbignV29ybGQnKVxuICAgIH07XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIHtcbiAgICAgIFJlZ3VsYXJWYWx1ZTogJ2hlbGxvJyxcbiAgICAgIExhenlWYWx1ZTogJ1dvcmxkJ1xuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyBhcmUgZXZhbHVhdGVkIGFueXdoZXJlIGluIHRoZSBvYmplY3QgdHJlZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG9iaiA9IG5ldyBQcm9taXNlMSgpO1xuICAgIGNvbnN0IGFjdHVhbCA9IHJlc29sdmUoeyBPYmo6IG9iaiB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKGFjdHVhbCwge1xuICAgICAgT2JqOiBbXG4gICAgICAgIHtcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgIH0sXG4gICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgIH0sXG4gICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICd0b2tlbnMgYXJlIGV2YWx1YXRlZCByZWN1cnNpdmVseScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG9iaiA9IG5ldyBQcm9taXNlMSgpO1xuICAgIGNvbnN0IGFjdHVhbCA9IHJlc29sdmUobmV3IFRva2VuKCgpID0+ICh7IE9iajogb2JqIH0pKSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChhY3R1YWwsIHtcbiAgICAgIE9iajogW1xuICAgICAgICB7XG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICB9LFxuICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICB9LFxuICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZW1wdHkgYXJyYXlzIG9yIG9iamVjdHMgYXJlIGtlcHQnKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgfSksIHsgfSk7XG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShbIF0pLCBbIF0pO1xuXG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgUHJvcDE6IDEyMzQsXG4gICAgICBQcm9wMjogeyB9LFxuICAgICAgUHJvcDM6IFsgXSxcbiAgICAgIFByb3A0OiAnaGVsbG8nLFxuICAgICAgUHJvcDU6IHtcbiAgICAgICAgUHJvcEE6IHsgfSxcbiAgICAgICAgUHJvcEI6IHtcbiAgICAgICAgICBQcm9wQzogWyB1bmRlZmluZWQsIHVuZGVmaW5lZCBdLFxuICAgICAgICAgIFByb3BEOiAnWW9vaG9vJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUob2JqKSwge1xuICAgICAgUHJvcDE6IDEyMzQsXG4gICAgICBQcm9wMjogeyB9LFxuICAgICAgUHJvcDM6IFsgXSxcbiAgICAgIFByb3A0OiAnaGVsbG8nLFxuICAgICAgUHJvcDU6IHtcbiAgICAgICAgUHJvcEE6IHsgfSxcbiAgICAgICAgUHJvcEI6IHtcbiAgICAgICAgICBQcm9wQzogWyBdLFxuICAgICAgICAgIFByb3BEOiAnWW9vaG9vJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaWYgYW4gb2JqZWN0IGhhcyBhIFwicmVzb2x2ZVwiIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24sIGl0IGlzIG5vdCBjb25zaWRlcmVkIGEgdG9rZW4nKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgYV90b2tlbjogeyByZXNvbHZlOiAoKSA9PiA3ODc4NyB9fSksIHsgYV90b2tlbjogNzg3ODcgfSk7XG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IG5vdF9hX3Rva2VuOiB7IHJlc29sdmU6IDEyIH0gfSksICAgeyBub3RfYV90b2tlbjogeyByZXNvbHZlOiAxMiB9IH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgJ2lmIGEgcmVzb2x2YWJsZSBvYmplY3QgaW5oZXJpdHMgZnJvbSBhIGNsYXNzIHRoYXQgaXMgYWxzbyByZXNvbHZhYmxlLCB0aGUgXCJjb25zdHJ1Y3RvclwiIGZ1bmN0aW9uIHdpbGwgbm90IGdldCBpbiB0aGUgd2F5ICh1c2VzIE9iamVjdC5rZXlzIGluc3RlYWQgb2YgXCJmb3IgaW5cIiknKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgcHJvcDogbmV3IERhdGFUeXBlKCkgfSksIHsgcHJvcDogeyBmb286IDEyLCBnb286ICdoZWxsbycgfSB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaXNUb2tlbihvYmopIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSB0b2tlbicodGVzdDogVGVzdCkge1xuICAgIHRlc3Qub2sodW5yZXNvbHZlZCh7IHJlc29sdmU6ICgpID0+IDEyMyB9KSk7XG4gICAgdGVzdC5vayh1bnJlc29sdmVkKHsgYTogMSwgYjogMiwgcmVzb2x2ZTogKCkgPT4gJ2hlbGxvJyB9KSk7XG4gICAgdGVzdC5vayghdW5yZXNvbHZlZCh7IGE6IDEsIGI6IDIsIHJlc29sdmU6IDMgfSkpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdUb2tlbiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgdG9rZW5zIHRoYXQgY29udGFpbiBhIGNvbnN0YW50IHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgdGVzdC5lcXVhbChyZXNvbHZlKG5ldyBUb2tlbigxMikpLCAxMik7XG4gICAgdGVzdC5lcXVhbChyZXNvbHZlKG5ldyBUb2tlbignaGVsbG8nKSksICdoZWxsbycpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUobmV3IFRva2VuKFsgJ2hpJywgJ3RoZXJlJyBdKSksIFsgJ2hpJywgJ3RoZXJlJyBdKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAncmVzb2x2aW5nIGxlYXZlcyBhIERhdGUgb2JqZWN0IGluIHdvcmtpbmcgb3JkZXInKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoJzIwMDAtMDEtMDEnKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoZGF0ZSk7XG5cbiAgICB0ZXN0LmVxdWFsKGRhdGUudG9TdHJpbmcoKSwgcmVzb2x2ZWQudG9TdHJpbmcoKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlZCB0byBjb25jZXB0dWFsIHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbigoKSA9PiAnd29vZiB3b29mJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgVGhlIGRvZyBzYXlzOiAke3Rva2VufWA7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHN0cmluZ2lmaWVkKTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdUaGUgZG9nIHNheXM6IHdvb2Ygd29vZicpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdUb2tlbnMgc3RyaW5naWZpY2F0aW9uIGFuZCByZXZlcnNpbmcgb2YgQ2xvdWRGb3JtYXRpb24gVG9rZW5zIGlzIGltcGxlbWVudGVkIHVzaW5nIEZuOjpKb2luJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKCgpID0+ICd3b29mIHdvb2YnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzdHJpbmdpZmllZCA9IGBUaGUgZG9nIHNheXM6ICR7dG9rZW59YDtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmVkLCB7XG4gICAgICAnRm46OkpvaW4nOiBbJycsIFsnVGhlIGRvZyBzYXlzOiAnLCAnd29vZiB3b29mJ11dXG4gICAgfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0RvdWJseSBuZXN0ZWQgc3RyaW5ncyBldmFsdWF0ZSBjb3JyZWN0bHkgaW4gc2NhbGFyIGNvbnRleHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRva2VuMSA9IG5ldyBUb2tlbigoKSA9PiBcIndvcmxkXCIpO1xuICAgIGNvbnN0IHRva2VuMiA9IG5ldyBUb2tlbigoKSA9PiBgaGVsbG8gJHt0b2tlbjF9YCk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcmVzb2x2ZWQxID0gcmVzb2x2ZSh0b2tlbjIudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgcmVzb2x2ZWQyID0gcmVzb2x2ZSh0b2tlbjIpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkMSksIFwiaGVsbG8gd29ybGRcIik7XG4gICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQyKSwgXCJoZWxsbyB3b3JsZFwiKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpbnRlZ2VyIFRva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlIHRvIGNvbmNlcHR1YWwgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgbGl0ZXJhbFRva2Vuc1RoYXRSZXNvbHZlVG8oMSkpIHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gYHRoZSBudW1iZXIgaXMgJHt0b2tlbn1gO1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHN0cmluZ2lmaWVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCAndGhlIG51bWJlciBpcyAxJyk7XG4gICAgfVxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpbnRyaW5zaWMgVG9rZW5zIGNhbiBiZSBzdHJpbmdpZmllZCBhbmQgZXZhbHVhdGUgdG8gY29uY2VwdHVhbCB2YWx1ZScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgZm9yIChjb25zdCBidWNrZXROYW1lIG9mIGNsb3VkRm9ybWF0aW9uVG9rZW5zVGhhdFJlc29sdmVUbyh7IFJlZjogJ015QnVja2V0JyB9KSkge1xuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGBteSBidWNrZXQgaXMgbmFtZWQgJHtidWNrZXROYW1lfWApO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBjb250ZXh0ID0ge015QnVja2V0OiAnVGhlTmFtZSd9O1xuICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCwgY29udGV4dCksICdteSBidWNrZXQgaXMgbmFtZWQgVGhlTmFtZScpO1xuICAgIH1cblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICd0b2tlbnMgcmVzb2x2ZSBwcm9wZXJseSBpbiBpbml0aWFsIHBvc2l0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ0hlbGxvJykpIHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbn0gd29ybGRgKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdIZWxsbyB3b3JsZCcpO1xuICAgIH1cblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzaWRlLWJ5LXNpZGUgVG9rZW5zIHJlc29sdmUgY29ycmVjdGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBmb3IgKGNvbnN0IHRva2VuMSBvZiB0b2tlbnNUaGF0UmVzb2x2ZVRvKCdIZWxsbyAnKSkge1xuICAgICAgZm9yIChjb25zdCB0b2tlbjIgb2YgdG9rZW5zVGhhdFJlc29sdmVUbygnd29ybGQnKSkge1xuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbjF9JHt0b2tlbjJ9YCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ0hlbGxvIHdvcmxkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyBjYW4gYmUgdXNlZCBpbiBoYXNoIGtleXMgYnV0IG11c3QgcmVzb2x2ZSB0byBhIHN0cmluZycodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4oKCkgPT4gJ0kgYW0gYSBzdHJpbmcnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzID0ge1xuICAgICAgW3Rva2VuLnRvU3RyaW5nKCldOiBgYm9vbSAke3Rva2VufWBcbiAgICB9O1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocyksIHsgJ0kgYW0gYSBzdHJpbmcnOiAnYm9vbSBJIGFtIGEgc3RyaW5nJyB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZmFpbHMgaWYgdG9rZW4gaW4gYSBoYXNoIGtleSByZXNvbHZlcyB0byBhIG5vbi1zdHJpbmcnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRva2VuID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oeyBSZWY6ICdPdGhlcicgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcyA9IHtcbiAgICAgIFt0b2tlbi50b1N0cmluZygpXTogYGJvb20gJHt0b2tlbn1gXG4gICAgfTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LnRocm93cygoKSA9PiByZXNvbHZlKHMpLCAnVGhlIGtleSBcIiR7VG9rZW5bVE9LRU4uMTldfVwiIGhhcyBiZWVuIHJlc29sdmVkIHRvIHtcIlJlZlwiOlwiT3RoZXJcIn0gYnV0IG11c3QgYmUgcmVzb2x2YWJsZSB0byBhIHN0cmluZycpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9XG59O1xuXG5jbGFzcyBQcm9taXNlMiBleHRlbmRzIFRva2VuIHtcbiAgcHVibGljIHJlc29sdmUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIERhdGE6IHtcbiAgICAgICAgc3RyaW5nUHJvcDogJ2hlbGxvJyxcbiAgICAgICAgbnVtYmVyUHJvcDogMTIzNCxcbiAgICAgIH0sXG4gICAgICBSZWN1cnNlOiBuZXcgVG9rZW4oKCkgPT4gNDIpXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBQcm9taXNlMSBleHRlbmRzIFRva2VuIHtcbiAgcHVibGljIHAyID0gWyBuZXcgUHJvbWlzZTIoKSwgbmV3IFByb21pc2UyKCkgXTtcblxuICBwdWJsaWMgcmVzb2x2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wMjtcbiAgfVxufVxuXG5jbGFzcyBCYXNlRGF0YVR5cGUge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBmb286IG51bWJlcikge1xuICB9XG59XG5cbmNsYXNzIERhdGFUeXBlIGV4dGVuZHMgQmFzZURhdGFUeXBlIHtcbiAgcHVibGljIGdvbyA9ICdoZWxsbyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoMTIpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZTogYW55KTogVG9rZW5bXSB7XG4gIHJldHVybiBbXG4gICAgbmV3IFRva2VuKHZhbHVlKSxcbiAgICBuZXcgVG9rZW4oKCkgPT4gdmFsdWUpXG4gIF07XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWU6IGFueSk6IFRva2VuW10ge1xuICByZXR1cm4gW1xuICAgIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHZhbHVlKSxcbiAgICBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbigoKSA9PiB2YWx1ZSlcbiAgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gVG9rZW5zIGluIGJvdGggZmxhdm9ycyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0b2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlOiBzdHJpbmcpOiBUb2tlbltdIHtcbiAgcmV0dXJuIGxpdGVyYWxUb2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlKS5jb25jYXQoY2xvdWRGb3JtYXRpb25Ub2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlKSk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTRFO0FBQzVFLGlFQUE2RDtBQWdSN0QsTUFBTSxRQUFTLFNBQVEsV0FBSztJQUNuQixPQUFPO1FBQ1osT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsT0FBTztnQkFDbkIsVUFBVSxFQUFFLElBQUk7YUFDakI7WUFDRCxPQUFPLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzdCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVMsU0FBUSxXQUFLO0lBQTVCOztRQUNTLE9BQUUsR0FBRyxDQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBRSxDQUFDO0lBS2pELENBQUM7SUFIUSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQUVELE1BQU0sWUFBWTtJQUNoQixZQUFxQixHQUFXO1FBQVgsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUNoQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVMsU0FBUSxZQUFZO0lBR2pDO1FBQ0UsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBSEwsUUFBRyxHQUFHLE9BQU8sQ0FBQztJQUlyQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsMEJBQTBCLENBQUMsS0FBVTtJQUM1QyxPQUFPO1FBQ0wsSUFBSSxXQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2hCLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxpQ0FBaUMsQ0FBQyxLQUFVO0lBQ25ELE9BQU87UUFDTCxJQUFJLHlCQUFtQixDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJLHlCQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztLQUNyQyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxLQUFhO0lBQ3hDLE9BQU8sMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQXhVRCxpQkFBUztJQUNQLDBEQUEwRCxDQUFDLElBQVU7UUFDbkUsTUFBTSxHQUFHLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsa0VBQWtFLENBQUMsSUFBVTtRQUMzRSxNQUFNLEdBQUcsR0FBRztZQUNWLFlBQVksRUFBRSxPQUFPO1lBQ3JCLFNBQVMsRUFBRSxJQUFJLFdBQUssQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFlBQVksRUFBRSxPQUFPO1lBQ3JCLFNBQVMsRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxrREFBa0QsQ0FBQyxJQUFVO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDckIsR0FBRyxFQUFFO2dCQUNIO29CQUNBLElBQUksRUFBRTt3QkFDSixVQUFVLEVBQUUsT0FBTzt3QkFDbkIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxFQUFFO2lCQUNWO2dCQUNEO29CQUNBLElBQUksRUFBRTt3QkFDSixVQUFVLEVBQUUsT0FBTzt3QkFDbkIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxFQUFFO2lCQUNWO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsa0NBQWtDLENBQUMsSUFBVTtRQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHLGFBQU8sQ0FBQyxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3JCLEdBQUcsRUFBRTtnQkFDSDtvQkFDQSxJQUFJLEVBQUU7d0JBQ0osVUFBVSxFQUFFLE9BQU87d0JBQ25CLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUUsRUFBRTtpQkFDVjtnQkFDRDtvQkFDQSxJQUFJLEVBQUU7d0JBQ0osVUFBVSxFQUFFLE9BQU87d0JBQ25CLFVBQVUsRUFBRSxJQUFJO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUUsRUFBRTtpQkFDVjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtDQUFrQyxDQUFDLElBQVU7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsRUFBRyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUM7UUFFbEMsTUFBTSxHQUFHLEdBQUc7WUFDVixLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxFQUFHO1lBQ1YsS0FBSyxFQUFFLEVBQUc7WUFDVixLQUFLLEVBQUUsT0FBTztZQUNkLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsRUFBRztnQkFDVixLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLENBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBRTtvQkFDL0IsS0FBSyxFQUFFLFFBQVE7aUJBQ2hCO2FBQ0Y7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsRUFBRztZQUNWLEtBQUssRUFBRSxFQUFHO1lBQ1YsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLEVBQUc7Z0JBQ1YsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRSxFQUFHO29CQUNWLEtBQUssRUFBRSxRQUFRO2lCQUNoQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELDRGQUE0RixDQUFDLElBQVU7UUFDckcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLGlLQUFpSyxDQUFDLElBQVU7UUFDMUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELCtEQUErRCxDQUFDLElBQVU7UUFDeEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsZ0JBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxrRUFBa0UsQ0FBQyxJQUFVO1FBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBTyxDQUFDLElBQUksV0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFPLENBQUMsSUFBSSxXQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxJQUFJLFdBQUssQ0FBQyxDQUFFLElBQUksRUFBRSxPQUFPLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxJQUFJLEVBQUUsT0FBTyxDQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsaURBQWlELENBQUMsSUFBVTtRQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxhQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELDZEQUE2RCxDQUFDLElBQVU7UUFDdEUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNDLE9BQU87UUFDUCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsYUFBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXRDLE9BQU87UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsNkZBQTZGLENBQUMsSUFBVTtRQUN0RyxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSx5QkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoRSxPQUFPO1FBQ1AsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLEtBQUssRUFBRSxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLGFBQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV0QyxPQUFPO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN2RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsNERBQTRELENBQUMsSUFBVTtRQUNyRSxRQUFRO1FBQ1IsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRWxELE9BQU87UUFDUCxNQUFNLFNBQVMsR0FBRyxhQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsYUFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLE9BQU87UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxvRUFBb0UsQ0FBQyxJQUFVO1FBQzdFLFFBQVE7UUFDUixLQUFLLE1BQU0sS0FBSyxJQUFJLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pELE9BQU87WUFDUCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsS0FBSyxFQUFFLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsYUFBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXRDLE9BQU87WUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUMxRDtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxzRUFBc0UsQ0FBQyxJQUFVO1FBQy9FLFFBQVE7UUFDUixLQUFLLE1BQU0sVUFBVSxJQUFJLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7WUFDL0UsT0FBTztZQUNQLE1BQU0sUUFBUSxHQUFHLGFBQU8sQ0FBQyxzQkFBc0IsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUU3RCxPQUFPO1lBQ1AsTUFBTSxPQUFPLEdBQUcsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELDZDQUE2QyxDQUFDLElBQVU7UUFDdEQsUUFBUTtRQUNSLEtBQUssTUFBTSxLQUFLLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDaEQsT0FBTztZQUNQLE1BQU0sUUFBUSxHQUFHLGFBQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7WUFFM0MsT0FBTztZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCx1Q0FBdUMsQ0FBQyxJQUFVO1FBQ2hELFFBQVE7UUFDUixLQUFLLE1BQU0sTUFBTSxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xELEtBQUssTUFBTSxNQUFNLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2pELE9BQU87Z0JBQ1AsTUFBTSxRQUFRLEdBQUcsYUFBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBRS9DLE9BQU87Z0JBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ2xEO1NBQ0Y7UUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsOERBQThELENBQUMsSUFBVTtRQUN2RSxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFL0MsT0FBTztRQUNQLE1BQU0sQ0FBQyxHQUFHO1lBQ1IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEtBQUssRUFBRTtTQUNwQyxDQUFDO1FBRUYsT0FBTztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsdURBQXVELENBQUMsSUFBVTtRQUNoRSxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSx5QkFBbUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRXhELE9BQU87UUFDUCxNQUFNLENBQUMsR0FBRztZQUNSLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUU7U0FDcEMsQ0FBQztRQUVGLE9BQU87UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxzR0FBc0csQ0FBQyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4sIHJlc29sdmUsIFRva2VuLCB1bnJlc29sdmVkIH0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCB7IGV2YWx1YXRlQ0ZOIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24vZXZhbHVhdGUtY2ZuJztcblxuZXhwb3J0ID0ge1xuICAncmVzb2x2ZSBhIHBsYWluIG9sZCBvYmplY3Qgc2hvdWxkIGp1c3QgcmV0dXJuIHRoZSBvYmplY3QnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBvYmogPSB7IFBsYWluT2xkT2JqZWN0OiAxMjMsIEFycmF5OiBbIDEsIDIsIDMgXSB9O1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUob2JqKSwgb2JqKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaWYgYSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhIHRva2VuIHZhbHVlLCBpdCB3aWxsIGJlIGV2YWx1YXRlZCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIFJlZ3VsYXJWYWx1ZTogJ2hlbGxvJyxcbiAgICAgIExhenlWYWx1ZTogbmV3IFRva2VuKCdXb3JsZCcpXG4gICAgfTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUob2JqKSwge1xuICAgICAgUmVndWxhclZhbHVlOiAnaGVsbG8nLFxuICAgICAgTGF6eVZhbHVlOiAnV29ybGQnXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAndG9rZW5zIGFyZSBldmFsdWF0ZWQgYW55d2hlcmUgaW4gdGhlIG9iamVjdCB0cmVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgb2JqID0gbmV3IFByb21pc2UxKCk7XG4gICAgY29uc3QgYWN0dWFsID0gcmVzb2x2ZSh7IE9iajogb2JqIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwoYWN0dWFsLCB7XG4gICAgICBPYmo6IFtcbiAgICAgICAge1xuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgc3RyaW5nUHJvcDogXCJoZWxsb1wiLFxuICAgICAgICAgIG51bWJlclByb3A6IDEyMzRcbiAgICAgICAgfSxcbiAgICAgICAgUmVjdXJzZTogNDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgc3RyaW5nUHJvcDogXCJoZWxsb1wiLFxuICAgICAgICAgIG51bWJlclByb3A6IDEyMzRcbiAgICAgICAgfSxcbiAgICAgICAgUmVjdXJzZTogNDJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyBhcmUgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgb2JqID0gbmV3IFByb21pc2UxKCk7XG4gICAgY29uc3QgYWN0dWFsID0gcmVzb2x2ZShuZXcgVG9rZW4oKCkgPT4gKHsgT2JqOiBvYmogfSkpKTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKGFjdHVhbCwge1xuICAgICAgT2JqOiBbXG4gICAgICAgIHtcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgIH0sXG4gICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgIH0sXG4gICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdlbXB0eSBhcnJheXMgb3Igb2JqZWN0cyBhcmUga2VwdCcodGVzdDogVGVzdCkge1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoeyB9KSwgeyB9KTtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKFsgXSksIFsgXSk7XG5cbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBQcm9wMTogMTIzNCxcbiAgICAgIFByb3AyOiB7IH0sXG4gICAgICBQcm9wMzogWyBdLFxuICAgICAgUHJvcDQ6ICdoZWxsbycsXG4gICAgICBQcm9wNToge1xuICAgICAgICBQcm9wQTogeyB9LFxuICAgICAgICBQcm9wQjoge1xuICAgICAgICAgIFByb3BDOiBbIHVuZGVmaW5lZCwgdW5kZWZpbmVkIF0sXG4gICAgICAgICAgUHJvcEQ6ICdZb29ob28nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShvYmopLCB7XG4gICAgICBQcm9wMTogMTIzNCxcbiAgICAgIFByb3AyOiB7IH0sXG4gICAgICBQcm9wMzogWyBdLFxuICAgICAgUHJvcDQ6ICdoZWxsbycsXG4gICAgICBQcm9wNToge1xuICAgICAgICBQcm9wQTogeyB9LFxuICAgICAgICBQcm9wQjoge1xuICAgICAgICAgIFByb3BDOiBbIF0sXG4gICAgICAgICAgUHJvcEQ6ICdZb29ob28nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpZiBhbiBvYmplY3QgaGFzIGEgXCJyZXNvbHZlXCIgcHJvcGVydHkgdGhhdCBpcyBub3QgYSBmdW5jdGlvbiwgaXQgaXMgbm90IGNvbnNpZGVyZWQgYSB0b2tlbicodGVzdDogVGVzdCkge1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoeyBhX3Rva2VuOiB7IHJlc29sdmU6ICgpID0+IDc4Nzg3IH19KSwgeyBhX3Rva2VuOiA3ODc4NyB9KTtcbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgbm90X2FfdG9rZW46IHsgcmVzb2x2ZTogMTIgfSB9KSwgICB7IG5vdF9hX3Rva2VuOiB7IHJlc29sdmU6IDEyIH0gfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAnaWYgYSByZXNvbHZhYmxlIG9iamVjdCBpbmhlcml0cyBmcm9tIGEgY2xhc3MgdGhhdCBpcyBhbHNvIHJlc29sdmFibGUsIHRoZSBcImNvbnN0cnVjdG9yXCIgZnVuY3Rpb24gd2lsbCBub3QgZ2V0IGluIHRoZSB3YXkgKHVzZXMgT2JqZWN0LmtleXMgaW5zdGVhZCBvZiBcImZvciBpblwiKScodGVzdDogVGVzdCkge1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoeyBwcm9wOiBuZXcgRGF0YVR5cGUoKSB9KSwgeyBwcm9wOiB7IGZvbzogMTIsIGdvbzogJ2hlbGxvJyB9IH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpc1Rva2VuKG9iaikgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIHRva2VuJyh0ZXN0OiBUZXN0KSB7XG4gICAgdGVzdC5vayh1bnJlc29sdmVkKHsgcmVzb2x2ZTogKCkgPT4gMTIzIH0pKTtcbiAgICB0ZXN0Lm9rKHVucmVzb2x2ZWQoeyBhOiAxLCBiOiAyLCByZXNvbHZlOiAoKSA9PiAnaGVsbG8nIH0pKTtcbiAgICB0ZXN0Lm9rKCF1bnJlc29sdmVkKHsgYTogMSwgYjogMiwgcmVzb2x2ZTogMyB9KSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1Rva2VuIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0b2tlbnMgdGhhdCBjb250YWluIGEgY29uc3RhbnQgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICB0ZXN0LmVxdWFsKHJlc29sdmUobmV3IFRva2VuKDEyKSksIDEyKTtcbiAgICB0ZXN0LmVxdWFsKHJlc29sdmUobmV3IFRva2VuKCdoZWxsbycpKSwgJ2hlbGxvJyk7XG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShuZXcgVG9rZW4oWyAnaGknLCAndGhlcmUnIF0pKSwgWyAnaGknLCAndGhlcmUnIF0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdyZXNvbHZpbmcgbGVhdmVzIGEgRGF0ZSBvYmplY3QgaW4gd29ya2luZyBvcmRlcicodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgnMjAwMC0wMS0wMScpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShkYXRlKTtcblxuICAgIHRlc3QuZXF1YWwoZGF0ZS50b1N0cmluZygpLCByZXNvbHZlZC50b1N0cmluZygpKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAndG9rZW5zIGNhbiBiZSBzdHJpbmdpZmllZCBhbmQgZXZhbHVhdGVkIHRvIGNvbmNlcHR1YWwgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKCgpID0+ICd3b29mIHdvb2YnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzdHJpbmdpZmllZCA9IGBUaGUgZG9nIHNheXM6ICR7dG9rZW59YDtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ1RoZSBkb2cgc2F5czogd29vZiB3b29mJyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1Rva2VucyBzdHJpbmdpZmljYXRpb24gYW5kIHJldmVyc2luZyBvZiBDbG91ZEZvcm1hdGlvbiBUb2tlbnMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgRm46OkpvaW4nKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRva2VuID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oKCkgPT4gKHsgd29vZjogJ3dvb2YnIH0pKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzdHJpbmdpZmllZCA9IGBUaGUgZG9nIHNheXM6ICR7dG9rZW59YDtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmVkLCB7XG4gICAgICAnRm46OkpvaW4nOiBbJycsIFsnVGhlIGRvZyBzYXlzOiAnLCB7IHdvb2Y6ICd3b29mJyB9XV1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnRG91Ymx5IG5lc3RlZCBzdHJpbmdzIGV2YWx1YXRlIGNvcnJlY3RseSBpbiBzY2FsYXIgY29udGV4dCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9rZW4xID0gbmV3IFRva2VuKCgpID0+IFwid29ybGRcIik7XG4gICAgY29uc3QgdG9rZW4yID0gbmV3IFRva2VuKCgpID0+IGBoZWxsbyAke3Rva2VuMX1gKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCByZXNvbHZlZDEgPSByZXNvbHZlKHRva2VuMi50b1N0cmluZygpKTtcbiAgICBjb25zdCByZXNvbHZlZDIgPSByZXNvbHZlKHRva2VuMik7XG5cbiAgICAvLyBUSEVOXG4gICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQxKSwgXCJoZWxsbyB3b3JsZFwiKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZDIpLCBcImhlbGxvIHdvcmxkXCIpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2ludGVnZXIgVG9rZW5zIGNhbiBiZSBzdHJpbmdpZmllZCBhbmQgZXZhbHVhdGUgdG8gY29uY2VwdHVhbCB2YWx1ZScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbygxKSkge1xuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgdGhlIG51bWJlciBpcyAke3Rva2VufWA7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICd0aGUgbnVtYmVyIGlzIDEnKTtcbiAgICB9XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2ludHJpbnNpYyBUb2tlbnMgY2FuIGJlIHN0cmluZ2lmaWVkIGFuZCBldmFsdWF0ZSB0byBjb25jZXB0dWFsIHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBmb3IgKGNvbnN0IGJ1Y2tldE5hbWUgb2YgY2xvdWRGb3JtYXRpb25Ub2tlbnNUaGF0UmVzb2x2ZVRvKHsgUmVmOiAnTXlCdWNrZXQnIH0pKSB7XG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoYG15IGJ1Y2tldCBpcyBuYW1lZCAke2J1Y2tldE5hbWV9YCk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7TXlCdWNrZXQ6ICdUaGVOYW1lJ307XG4gICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkLCBjb250ZXh0KSwgJ215IGJ1Y2tldCBpcyBuYW1lZCBUaGVOYW1lJyk7XG4gICAgfVxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3Rva2VucyByZXNvbHZlIHByb3Blcmx5IGluIGluaXRpYWwgcG9zaXRpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zVGhhdFJlc29sdmVUbygnSGVsbG8nKSkge1xuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGAke3Rva2VufSB3b3JsZGApO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ0hlbGxvIHdvcmxkJyk7XG4gICAgfVxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3NpZGUtYnktc2lkZSBUb2tlbnMgcmVzb2x2ZSBjb3JyZWN0bHknKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGZvciAoY29uc3QgdG9rZW4xIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ0hlbGxvICcpKSB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuMiBvZiB0b2tlbnNUaGF0UmVzb2x2ZVRvKCd3b3JsZCcpKSB7XG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGAke3Rva2VuMX0ke3Rva2VuMn1gKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCAnSGVsbG8gd29ybGQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAndG9rZW5zIGNhbiBiZSB1c2VkIGluIGhhc2gga2V5cyBidXQgbXVzdCByZXNvbHZlIHRvIGEgc3RyaW5nJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbigoKSA9PiAnSSBhbSBhIHN0cmluZycpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHMgPSB7XG4gICAgICBbdG9rZW4udG9TdHJpbmcoKV06IGBib29tICR7dG9rZW59YFxuICAgIH07XG5cbiAgICAvLyBUSEVOXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShzKSwgeyAnSSBhbSBhIHN0cmluZyc6ICdib29tIEkgYW0gYSBzdHJpbmcnIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdmYWlscyBpZiB0b2tlbiBpbiBhIGhhc2gga2V5IHJlc29sdmVzIHRvIGEgbm9uLXN0cmluZycodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbih7IFJlZjogJ090aGVyJyB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzID0ge1xuICAgICAgW3Rva2VuLnRvU3RyaW5nKCldOiBgYm9vbSAke3Rva2VufWBcbiAgICB9O1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QudGhyb3dzKCgpID0+IHJlc29sdmUocyksICdUaGUga2V5IFwiJHtUb2tlbltUT0tFTi4xOV19XCIgaGFzIGJlZW4gcmVzb2x2ZWQgdG8ge1wiUmVmXCI6XCJPdGhlclwifSBidXQgbXVzdCBiZSByZXNvbHZhYmxlIHRvIGEgc3RyaW5nJyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH1cbn07XG5cbmNsYXNzIFByb21pc2UyIGV4dGVuZHMgVG9rZW4ge1xuICBwdWJsaWMgcmVzb2x2ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgRGF0YToge1xuICAgICAgICBzdHJpbmdQcm9wOiAnaGVsbG8nLFxuICAgICAgICBudW1iZXJQcm9wOiAxMjM0LFxuICAgICAgfSxcbiAgICAgIFJlY3Vyc2U6IG5ldyBUb2tlbigoKSA9PiA0MilcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIFByb21pc2UxIGV4dGVuZHMgVG9rZW4ge1xuICBwdWJsaWMgcDIgPSBbIG5ldyBQcm9taXNlMigpLCBuZXcgUHJvbWlzZTIoKSBdO1xuXG4gIHB1YmxpYyByZXNvbHZlKCkge1xuICAgIHJldHVybiB0aGlzLnAyO1xuICB9XG59XG5cbmNsYXNzIEJhc2VEYXRhVHlwZSB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZvbzogbnVtYmVyKSB7XG4gIH1cbn1cblxuY2xhc3MgRGF0YVR5cGUgZXh0ZW5kcyBCYXNlRGF0YVR5cGUge1xuICBwdWJsaWMgZ29vID0gJ2hlbGxvJztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigxMik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdmFyaW91cyBmbGF2b3JzIG9mIFRva2VucyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxpdGVyYWxUb2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlOiBhbnkpOiBUb2tlbltdIHtcbiAgcmV0dXJuIFtcbiAgICBuZXcgVG9rZW4odmFsdWUpLFxuICAgIG5ldyBUb2tlbigoKSA9PiB2YWx1ZSlcbiAgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdmFyaW91cyBmbGF2b3JzIG9mIFRva2VucyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsb3VkRm9ybWF0aW9uVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZTogYW55KTogVG9rZW5bXSB7XG4gIHJldHVybiBbXG4gICAgbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4odmFsdWUpLFxuICAgIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKCgpID0+IHZhbHVlKVxuICBdO1xufVxuXG4vKipcbiAqIFJldHVybiBUb2tlbnMgaW4gYm90aCBmbGF2b3JzIHRoYXQgcmVzb2x2ZSB0byB0aGUgZ2l2ZW4gc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWU6IHN0cmluZyk6IFRva2VuW10ge1xuICByZXR1cm4gbGl0ZXJhbFRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWUpLmNvbmNhdChjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWUpKTtcbn1cbiJdfQ==

@@ -74,3 +74,5 @@ "use strict";

delete response.runtime;
test.deepEqual(response, { stacks: [{ name: 'stack1',
test.deepEqual(response, {
version: '0.14.0',
stacks: [{ name: 'stack1',
environment: { name: '12345/us-east-1',

@@ -87,3 +89,4 @@ account: '12345',

s1c2r1D1791C01: { Type: 'ResourceType1' },
s1c2r25F685FFF: { Type: 'ResourceType2' } } } }] });
s1c2r25F685FFF: { Type: 'ResourceType2' } } } }]
});
test.done();

@@ -194,10 +197,15 @@ },

this.reportMissingContext('missing-context-key', {
provider: 'ctx-provider',
args: ['arg1', 'arg2'],
scope: ['scope1', 'scope2']
provider: 'fake',
props: {
account: '12345689012',
region: 'ab-north-1',
},
});
this.reportMissingContext('missing-context-key-2', {
provider: 'ctx-provider',
args: ['arg1', 'arg2'],
scope: ['scope1', 'scope2']
provider: 'fake2',
props: {
foo: 'bar',
account: '12345689012',
region: 'ab-south-1',
},
});

@@ -211,23 +219,16 @@ }

"missing-context-key": {
provider: "ctx-provider",
args: [
"arg1",
"arg2"
],
scope: [
"scope1",
"scope2"
]
provider: 'fake',
props: {
account: '12345689012',
region: 'ab-north-1',
},
},
"missing-context-key-2": {
provider: "ctx-provider",
args: [
"arg1",
"arg2"
],
scope: [
"scope1",
"scope2"
]
}
provider: 'fake2',
props: {
account: '12345689012',
region: 'ab-south-1',
foo: 'bar',
},
},
});

@@ -237,2 +238,2 @@ test.done();

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUNBQTBDO0FBQzFDLHlCQUEwQjtBQUUxQix5QkFBMEI7QUFDMUIsNkJBQThCO0FBQzlCLGdDQUFnRTtBQUNoRSxvQ0FBaUM7QUFFakMsU0FBUyxPQUFPLENBQUMsT0FBMkMsRUFBRSxLQUF5QjtJQUNyRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXZDLElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMxRDtTQUFNO1FBQ0wsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN2QztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksU0FBRyxFQUFFLENBQUM7SUFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRVgsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRVYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxN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QUFLLEVBQUUsQ0FBRSxRQUFRLEVBQUUsUUFBUSxDQUFFO2lCQUM5QixDQUFDLENBQUM7WUFDTCxDQUFDO1NBQ0Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDekMscUJBQXFCLEVBQUU7Z0JBQ3ZCLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixJQUFJLEVBQUU7b0JBQ0osTUFBTTtvQkFDTixNQUFNO2lCQUNQO2dCQUNELEtBQUssRUFBRTtvQkFDTCxRQUFRO29CQUNSLFFBQVE7aUJBQ1Q7YUFDQTtZQUNELHVCQUF1QixFQUFFO2dCQUN6QixRQUFRLEVBQUUsY0FBYztnQkFDeEIsSUFBSSxFQUFFO29CQUNKLE1BQU07b0JBQ04sTUFBTTtpQkFDUDtnQkFDRCxLQUFLLEVBQUU7b0JBQ0wsUUFBUTtvQkFDUixRQUFRO2lCQUNUO2FBQ0E7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjeGFwaSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgb3MgPSByZXF1aXJlKCdvcycpO1xuaW1wb3J0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIFJlc291cmNlLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJy4uL2xpYic7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuLi9saWIvYXBwJztcblxuZnVuY3Rpb24gd2l0aEFwcChjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkLCBibG9jazogKGFwcDogQXBwKSA9PiB2b2lkKSB7XG4gIGNvbnN0IG91dGRpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1hcHAtdGVzdCcpKTtcbiAgcHJvY2Vzcy5lbnZbY3hhcGkuT1VURElSX0VOVl0gPSBvdXRkaXI7XG5cbiAgaWYgKGNvbnRleHQpIHtcbiAgICBwcm9jZXNzLmVudltjeGFwaS5DT05URVhUX0VOVl0gPSBKU09OLnN0cmluZ2lmeShjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnZbY3hhcGkuQ09OVEVYVF9FTlZdO1xuICB9XG5cbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuICBibG9jayhhcHApO1xuXG4gIGFwcC5ydW4oKTtcblxuICBjb25zdCBvdXRmaWxlID0gcGF0aC5qb2luKG91dGRpciwgY3hhcGkuT1VURklMRV9OQU1FKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhvdXRmaWxlKS50b1N0cmluZygpKTtcbiAgZnMudW5saW5rU3luYyhvdXRmaWxlKTtcbiAgZnMucm1kaXJTeW5jKG91dGRpcik7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gc3ludGgoY29udGV4dD86IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBjeGFwaS5TeW50aGVzaXplUmVzcG9uc2Uge1xuICByZXR1cm4gd2l0aEFwcChjb250ZXh0LCBhcHAgPT4ge1xuICAgIGNvbnN0IHN0YWNrMSA9IG5ldyBTdGFjayhhcHAsICdzdGFjazEnLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gICAgbmV3IFJlc291cmNlKHN0YWNrMSwgJ3MxYzEnLCB7IHR5cGU6ICdEdW1teVJlc291cmNlJywgcHJvcGVydGllczogeyBQcm9wMTogJ1Byb3AxJyB9IH0pO1xuICAgIGNvbnN0IHIyID0gbmV3IFJlc291cmNlKHN0YWNrMSwgJ3MxYzInLCB7IHR5cGU6ICdEdW1teVJlc291cmNlJywgcHJvcGVydGllczogeyBGb286IDEyMyB9IH0pO1xuXG4gICAgY29uc3Qgc3RhY2syID0gbmV3IFN0YWNrKGFwcCwgJ3N0YWNrMicpO1xuICAgIG5ldyBSZXNvdXJjZShzdGFjazIsICdzMmMxJywgeyB0eXBlOiAnRHVtbXlSZXNvdXJjZScsIHByb3BlcnRpZXM6IHsgUHJvZzI6ICdQcm9nMicgfSB9KTtcbiAgICBjb25zdCBjMSA9IG5ldyBNeUNvbnN0cnVjdChzdGFjazIsICdzMWMyJyk7XG5cbiAgICAvLyBhZGQgc29tZSBtZXRhZGF0YVxuICAgIHN0YWNrMS5hZGRNZXRhZGF0YSgnbWV0YScsIDExMSk7XG4gICAgcjIuYWRkV2FybmluZygnd2FybmluZzEnKTtcbiAgICByMi5hZGRXYXJuaW5nKCd3YXJuaW5nMicpO1xuICAgIGMxLmFkZE1ldGFkYXRhKCdtZXRhJywgeyBrZXk6ICd2YWx1ZScgfSk7XG4gICAgYXBwLmFkZE1ldGFkYXRhKCdhcHBsZXZlbCcsIDEyMyk7IC8vIGFwcHMgY2FuIGFsc28gaGF2ZSBtZXRhZGF0YVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc3ludGhTdGFjayhuYW1lOiBzdHJpbmcsIGluY2x1ZGVNZXRhZGF0YTogYm9vbGVhbiA9IGZhbHNlLCBjb250ZXh0PzogYW55KTogY3hhcGkuU3ludGhlc2l6ZWRTdGFjayB7XG4gIGNvbnN0IHJlc3BvbnNlID0gc3ludGgoY29udGV4dCk7XG4gIGNvbnN0IHN0YWNrID0gcmVzcG9uc2Uuc3RhY2tzLmZpbmQocyA9PiBzLm5hbWUgPT09IG5hbWUpO1xuICBpZiAoIXN0YWNrKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdGFjayAke25hbWV9IG5vdCBmb3VuZGApO1xuICB9XG5cbiAgaWYgKCFpbmNsdWRlTWV0YWRhdGEpIHtcbiAgICBkZWxldGUgc3RhY2subWV0YWRhdGE7XG4gIH1cblxuICByZXR1cm4gc3RhY2s7XG59XG5cbmV4cG9ydCA9IHtcbiAgJ3N5bnRoZXNpemVzIGFsbCBzdGFja3MgYW5kIHJldHVybnMgc3ludGhlc2lzIHJlc3VsdCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gc3ludGgoKTtcblxuICAgIC8vIGNsZWFuIHVwIG1ldGFkYXRhIHNvIGFzc2VydGlvbiB3aWxsIGJlIHNhbmVcbiAgICByZXNwb25zZS5zdGFja3MuZm9yRWFjaChzID0+IGRlbGV0ZSBzLm1ldGFkYXRhKTtcbiAgICBkZWxldGUgcmVzcG9uc2UucnVudGltZTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc3BvbnNlLCB7IHN0YWNrczpcbiAgICAgIFsgeyBuYW1lOiAnc3RhY2sxJyxcbiAgICAgICAgICBlbnZpcm9ubWVudDpcbiAgICAgICAgICAgeyBuYW1lOiAnMTIzNDUvdXMtZWFzdC0xJyxcbiAgICAgICAgICAgICBhY2NvdW50OiAnMTIzNDUnLFxuICAgICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICAgICAgICB0ZW1wbGF0ZTpcbiAgICAgICAgICAgeyBSZXNvdXJjZXM6XG4gICAgICAgICAgICAgIHsgczFjMTogeyBUeXBlOiAnRHVtbXlSZXNvdXJjZScsIFByb3BlcnRpZXM6IHsgUHJvcDE6ICdQcm9wMScgfSB9LFxuICAgICAgICAgICAgICAgIHMxYzI6IHsgVHlwZTogJ0R1bW15UmVzb3VyY2UnLCBQcm9wZXJ0aWVzOiB7IEZvbzogMTIzIH0gfSB9IH0gfSxcbiAgICAgICAgeyBuYW1lOiAnc3RhY2syJyxcbiAgICAgICAgICBlbnZpcm9ubWVudDpcbiAgICAgICAgICAgeyBuYW1lOiAndW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgICAgICBhY2NvdW50OiAndW5rbm93bi1hY2NvdW50JyxcbiAgICAgICAgICAgICByZWdpb246ICd1bmtub3duLXJlZ2lvbicgfSxcbiAgICAgICAgICB0ZW1wbGF0ZTpcbiAgICAgICAgICAgeyBSZXNvdXJjZXM6XG4gICAgICAgICAgICAgIHsgczJjMTogeyBUeXBlOiAnRHVtbXlSZXNvdXJjZScsIFByb3BlcnRpZXM6IHsgUHJvZzI6ICdQcm9nMicgfSB9LFxuICAgICAgICAgICAgICAgIHMxYzJyMUQxNzkxQzAxOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUxJyB9LFxuICAgICAgICAgICAgICAgIHMxYzJyMjVGNjg1RkZGOiB7IFR5cGU6ICdSZXNvdXJjZVR5cGUyJyB9IH0gfSB9IF0gfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3N5bnRoKG5hbWUpIGNhbiBiZSB1c2VkIHByb2dyYW1tYXRpY2FsbHknKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBwcm9nID0gbmV3IEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHByb2csICdNeVN0YWNrJyk7XG4gICAgbmV3IFJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgdHlwZTogJ015UmVzb3VyY2VUeXBlJyB9KTtcblxuICAgIGxldCB0aHJvd3M7XG4gICAgdHJ5IHtcbiAgICAgIHByb2cuc3ludGhlc2l6ZVN0YWNrcyhbJ2ZvbyddKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvd3MgPSBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIHRlc3Qub2sodGhyb3dzLmluZGV4T2YoJ0Nhbm5vdCBmaW5kIHN0YWNrIGZvbycpICE9PSAtMSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChwcm9nLnN5bnRoZXNpemVTdGFjaygnTXlTdGFjaycpLnRlbXBsYXRlLFxuICAgICAgeyBSZXNvdXJjZXM6IHsgTXlSZXNvdXJjZTogeyBUeXBlOiAnTXlSZXNvdXJjZVR5cGUnIH0gfSB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnc3ludGgobmFtZSkgYWxzbyBjb2xsZWN0cyBtZXRhZGF0YSBmcm9tIGFsbCBjb25zdHJ1Y3RzIGluIHRoZSBzdGFjaycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gc3ludGhTdGFjaygnc3RhY2sxJywgdHJ1ZSk7XG5cbiAgICBjb25zdCBvdXRwdXQgPSBzdGFjay5tZXRhZGF0YTtcbiAgICBzdHJpcFN0YWNrVHJhY2VzKG91dHB1dCk7XG5cbiAgICB0ZXN0Lm9rKG91dHB1dFsnLyddLCAnYXBwLWxldmVsIG1ldGFkYXRhIGlzIGluY2x1ZGVkIHVuZGVyIFwiLlwiJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy8nXVswXS50eXBlLCAnYXBwbGV2ZWwnKTtcbiAgICB0ZXN0LmVxdWFsKG91dHB1dFsnLyddWzBdLmRhdGEsIDEyMyk7XG5cbiAgICB0ZXN0Lm9rKG91dHB1dFsnL3N0YWNrMSddLCAndGhlIGNvbnN0cnVjdCBcInN0YWNrMVwiIGhhcyBtZXRhZGF0YScpO1xuICAgIHRlc3QuZXF1YWwob3V0cHV0Wycvc3RhY2sxJ11bMF0udHlwZSwgJ21ldGEnKTtcbiAgICB0ZXN0LmVxdWFsKG91dHB1dFsnL3N0YWNrMSddWzBdLmRhdGEsIDExMSk7XG4gICAgdGVzdC5vayhvdXRwdXRbJy9zdGFjazEnXVswXS50cmFjZS5sZW5ndGggPiAwLCAndHJhY2UgY29udGFpbnMgbXVsdGlwbGUgZW50cmllcycpO1xuXG4gICAgdGVzdC5vayhvdXRwdXRbJy9zdGFjazEvczFjMiddKTtcbiAgICB0ZXN0LmVxdWFsKG91dHB1dFsnL3N0YWNrMS9zMWMyJ10ubGVuZ3RoLCAyLCAndHdvIGVudHJpZXMnKTtcbiAgICB0ZXN0LmVxdWFsKG91dHB1dFsnL3N0YWNrMS9zMWMyJ11bMF0uZGF0YSwgJ3dhcm5pbmcxJyk7XG5cbiAgICBjb25zdCBzdGFjazIgPSBzeW50aFN0YWNrKCdzdGFjazInLCB0cnVlKTtcbiAgICBjb25zdCBvdXRwdXQyID0gc3RhY2syLm1ldGFkYXRhO1xuXG4gICAgdGVzdC5vayhvdXRwdXQyWycvc3RhY2syL3MxYzInXSk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXQyWycvc3RhY2syL3MxYzInXVswXS50eXBlLCAnbWV0YScpO1xuICAgIHRlc3QuZGVlcEVxdWFsKG91dHB1dDJbJy9zdGFjazIvczFjMiddWzBdLmRhdGEsIHsga2V5OiAndmFsdWUnIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnRleHQgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIENES19DT05URVhUJyh0ZXN0OiBUZXN0KSB7XG4gICAgcHJvY2Vzcy5lbnZbY3hhcGkuQ09OVEVYVF9FTlZdID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAga2V5MTogJ3ZhbDEnLFxuICAgICAga2V5MjogJ3ZhbDInXG4gICAgfSk7XG4gICAgY29uc3QgcHJvZyA9IG5ldyBBcHAoKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChwcm9nLmdldENvbnRleHQoJ2tleTEnKSwgJ3ZhbDEnKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChwcm9nLmdldENvbnRleHQoJ2tleTInKSwgJ3ZhbDInKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnY29udGV4dCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgY2FuIGJlIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgc3RhY2snKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBzeW50aFN0YWNrKCdzdGFjazInLCBmYWxzZSwgeyBjdHgxOiAnSEVMTE8nIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwob3V0cHV0LnRlbXBsYXRlLCB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgczJjMToge1xuICAgICAgICBUeXBlOiBcIkR1bW15UmVzb3VyY2VcIixcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIFByb2cyOiBcIlByb2cyXCJcbiAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzMWMycjFEMTc5MUMwMToge1xuICAgICAgICBUeXBlOiBcIlJlc291cmNlVHlwZTFcIlxuICAgICAgICB9LFxuICAgICAgICBzMWMycjI1RjY4NUZGRjoge1xuICAgICAgICBUeXBlOiBcIlJlc291cmNlVHlwZTJcIixcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEZyb21Db250ZXh0OiBcIkhFTExPXCJcbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3NldENvbnRleHQoayx2KSBjYW4gYmUgdXNlZCB0byBzZXQgY29udGV4dCBwcm9ncmFtbWF0aWNhbGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcHJvZyA9IG5ldyBBcHAoKTtcbiAgICBwcm9nLnNldENvbnRleHQoJ2ZvbycsICdiYXInKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChwcm9nLmdldENvbnRleHQoJ2ZvbycpLCAnYmFyJyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3NldENvbnRleHQoayx2KSBjYW5ub3QgYmUgY2FsbGVkIGFmdGVyIHN0YWNrcyBoYXZlIGJlZW4gYWRkZWQgYmVjYXVzZSBzdGFja3MgbWF5IHVzZSB0aGUgY29udGV4dCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgbmV3IFN0YWNrKHByb2csICdzMScpO1xuICAgIHRlc3QudGhyb3dzKCgpID0+IHByb2cuc2V0Q29udGV4dCgnZm9vJywgJ2JhcicpKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYXBwLnN5bnRoZXNpemVTdGFjayhzdGFjaykgcGVyZm9ybXMgdmFsaWRhdGlvbiBmaXJzdCAoYXBwLnZhbGlkYXRlQWxsKCkpIGFuZCBpZiB0aGVyZSBhcmUgZXJyb3JzLCBpdCByZXR1cm5zIHRoZSBlcnJvcnMnKHRlc3Q6IFRlc3QpIHtcblxuICAgIGNsYXNzIENoaWxkIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAgIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIFsgYEVycm9yIGZyb20gJHt0aGlzLmlkfWAgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQYXJlbnQgZXh0ZW5kcyBTdGFjayB7XG5cbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBuZXcgUGFyZW50KGFwcCwgJ1BhcmVudCcpO1xuICAgIG5ldyBDaGlsZChwYXJlbnQsICdDMScpO1xuICAgIG5ldyBDaGlsZChwYXJlbnQsICdDMicpO1xuXG4gICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgYXBwLnN5bnRoZXNpemVTdGFja3MoWydQYXJlbnQnXSk7XG4gICAgfSwgL1N0YWNrIHZhbGlkYXRpb24gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcnMvKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhcHAuc3ludGhlc2l6ZVN0YWNrKHN0YWNrKSB3aWxsIHJldHVybiBhIGxpc3Qgb2YgbWlzc2luZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgY2xhc3MgTXlTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQXBwLCBuYW1lOiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUsIHByb3BzKTtcblxuICAgICAgICB0aGlzLnJlcG9ydE1pc3NpbmdDb250ZXh0KCdtaXNzaW5nLWNvbnRleHQta2V5Jywge1xuICAgICAgICAgIHByb3ZpZGVyOiAnY3R4LXByb3ZpZGVyJyxcbiAgICAgICAgICBhcmdzOiBbICdhcmcxJywgJ2FyZzInIF0sXG4gICAgICAgICAgc2NvcGU6IFsgJ3Njb3BlMScsICdzY29wZTInIF1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nQ29udGV4dCgnbWlzc2luZy1jb250ZXh0LWtleS0yJywge1xuICAgICAgICAgIHByb3ZpZGVyOiAnY3R4LXByb3ZpZGVyJyxcbiAgICAgICAgICBhcmdzOiBbICdhcmcxJywgJ2FyZzInIF0sXG4gICAgICAgICAgc2NvcGU6IFsgJ3Njb3BlMScsICdzY29wZTInIF1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSB3aXRoQXBwKHVuZGVmaW5lZCwgYXBwID0+IHtcbiAgICAgIG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAgICB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKHJlc3BvbnNlLnN0YWNrc1swXS5taXNzaW5nLCB7XG4gICAgICBcIm1pc3NpbmctY29udGV4dC1rZXlcIjoge1xuICAgICAgcHJvdmlkZXI6IFwiY3R4LXByb3ZpZGVyXCIsXG4gICAgICBhcmdzOiBbXG4gICAgICAgIFwiYXJnMVwiLFxuICAgICAgICBcImFyZzJcIlxuICAgICAgXSxcbiAgICAgIHNjb3BlOiBbXG4gICAgICAgIFwic2NvcGUxXCIsXG4gICAgICAgIFwic2NvcGUyXCJcbiAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm1pc3NpbmctY29udGV4dC1rZXktMlwiOiB7XG4gICAgICBwcm92aWRlcjogXCJjdHgtcHJvdmlkZXJcIixcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgXCJhcmcxXCIsXG4gICAgICAgIFwiYXJnMlwiXG4gICAgICBdLFxuICAgICAgc2NvcGU6IFtcbiAgICAgICAgXCJzY29wZTFcIixcbiAgICAgICAgXCJzY29wZTJcIlxuICAgICAgXVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG59O1xuXG5jbGFzcyBNeUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgbmV3IFJlc291cmNlKHRoaXMsICdyMScsIHsgdHlwZTogJ1Jlc291cmNlVHlwZTEnIH0pO1xuICAgIG5ldyBSZXNvdXJjZSh0aGlzLCAncjInLCB7IHR5cGU6ICdSZXNvdXJjZVR5cGUyJywgcHJvcGVydGllczogeyBGcm9tQ29udGV4dDogdGhpcy5nZXRDb250ZXh0KCdjdHgxJykgfSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmlwIHN0YWNrIHRyYWNlcyBmcm9tIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIHN0cmlwU3RhY2tUcmFjZXMobWV0YTogY3hhcGkuU3RhY2tNZXRhZGF0YSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhKSkge1xuICAgIG1ldGFba2V5XSA9IG1ldGFba2V5XS5maWx0ZXIoZW50cnkgPT4gZW50cnkudHlwZSAhPT0gJ2F3czpjZGs6bG9naWNhbElkJyk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUNBQTBDO0FBQzFDLHlCQUEwQjtBQUUxQix5QkFBMEI7QUFDMUIsNkJBQThCO0FBQzlCLGdDQUFnRTtBQUNoRSxvQ0FBaUM7QUFFakMsU0FBUyxPQUFPLENBQUMsT0FBMkMsRUFBRSxLQUF5QjtJQUNyRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXZDLElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMxRDtTQUFNO1FBQ0wsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN2QztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksU0FBRyxFQUFFLENBQUM7SUFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRVgsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRVYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxN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TyxFQUFFLGFBQWE7d0JBQ3RCLE1BQU0sRUFBRSxZQUFZO3FCQUNyQjtpQkFDRixDQUNBLENBQUM7WUFDSixDQUFDO1NBQ0Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDekMscUJBQXFCLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixLQUFLLEVBQUU7b0JBQ0wsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLE1BQU0sRUFBRSxZQUFZO2lCQUNyQjthQUNGO1lBQ0QsdUJBQXVCLEVBQUU7Z0JBQ3ZCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixLQUFLLEVBQUU7b0JBQ0wsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLE1BQU0sRUFBRSxZQUFZO29CQUNwQixHQUFHLEVBQUUsS0FBSztpQkFDWDthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3hhcGkgPSByZXF1aXJlKCdAYXdzLWNkay9jeC1hcGknKTtcbmltcG9ydCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5pbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmltcG9ydCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBSZXNvdXJjZSwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi4vbGliL2FwcCc7XG5cbmZ1bmN0aW9uIHdpdGhBcHAoY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCwgYmxvY2s6IChhcHA6IEFwcCkgPT4gdm9pZCkge1xuICBjb25zdCBvdXRkaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGstYXBwLXRlc3QnKSk7XG4gIHByb2Nlc3MuZW52W2N4YXBpLk9VVERJUl9FTlZdID0gb3V0ZGlyO1xuXG4gIGlmIChjb250ZXh0KSB7XG4gICAgcHJvY2Vzcy5lbnZbY3hhcGkuQ09OVEVYVF9FTlZdID0gSlNPTi5zdHJpbmdpZnkoY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52W2N4YXBpLkNPTlRFWFRfRU5WXTtcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbiAgYmxvY2soYXBwKTtcblxuICBhcHAucnVuKCk7XG5cbiAgY29uc3Qgb3V0ZmlsZSA9IHBhdGguam9pbihvdXRkaXIsIGN4YXBpLk9VVEZJTEVfTkFNRSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMob3V0ZmlsZSkudG9TdHJpbmcoKSk7XG4gIGZzLnVubGlua1N5bmMob3V0ZmlsZSk7XG4gIGZzLnJtZGlyU3luYyhvdXRkaXIpO1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIHN5bnRoKGNvbnRleHQ/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogY3hhcGkuU3ludGhlc2l6ZVJlc3BvbnNlIHtcbiAgcmV0dXJuIHdpdGhBcHAoY29udGV4dCwgYXBwID0+IHtcbiAgICBjb25zdCBzdGFjazEgPSBuZXcgU3RhY2soYXBwLCAnc3RhY2sxJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9IH0pO1xuICAgIG5ldyBSZXNvdXJjZShzdGFjazEsICdzMWMxJywgeyB0eXBlOiAnRHVtbXlSZXNvdXJjZScsIHByb3BlcnRpZXM6IHsgUHJvcDE6ICdQcm9wMScgfSB9KTtcbiAgICBjb25zdCByMiA9IG5ldyBSZXNvdXJjZShzdGFjazEsICdzMWMyJywgeyB0eXBlOiAnRHVtbXlSZXNvdXJjZScsIHByb3BlcnRpZXM6IHsgRm9vOiAxMjMgfSB9KTtcblxuICAgIGNvbnN0IHN0YWNrMiA9IG5ldyBTdGFjayhhcHAsICdzdGFjazInKTtcbiAgICBuZXcgUmVzb3VyY2Uoc3RhY2syLCAnczJjMScsIHsgdHlwZTogJ0R1bW15UmVzb3VyY2UnLCBwcm9wZXJ0aWVzOiB7IFByb2cyOiAnUHJvZzInIH0gfSk7XG4gICAgY29uc3QgYzEgPSBuZXcgTXlDb25zdHJ1Y3Qoc3RhY2syLCAnczFjMicpO1xuXG4gICAgLy8gYWRkIHNvbWUgbWV0YWRhdGFcbiAgICBzdGFjazEuYWRkTWV0YWRhdGEoJ21ldGEnLCAxMTEpO1xuICAgIHIyLmFkZFdhcm5pbmcoJ3dhcm5pbmcxJyk7XG4gICAgcjIuYWRkV2FybmluZygnd2FybmluZzInKTtcbiAgICBjMS5hZGRNZXRhZGF0YSgnbWV0YScsIHsga2V5OiAndmFsdWUnIH0pO1xuICAgIGFwcC5hZGRNZXRhZGF0YSgnYXBwbGV2ZWwnLCAxMjMpOyAvLyBhcHBzIGNhbiBhbHNvIGhhdmUgbWV0YWRhdGFcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN5bnRoU3RhY2sobmFtZTogc3RyaW5nLCBpbmNsdWRlTWV0YWRhdGE6IGJvb2xlYW4gPSBmYWxzZSwgY29udGV4dD86IGFueSk6IGN4YXBpLlN5bnRoZXNpemVkU3RhY2sge1xuICBjb25zdCByZXNwb25zZSA9IHN5bnRoKGNvbnRleHQpO1xuICBjb25zdCBzdGFjayA9IHJlc3BvbnNlLnN0YWNrcy5maW5kKHMgPT4gcy5uYW1lID09PSBuYW1lKTtcbiAgaWYgKCFzdGFjaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgJHtuYW1lfSBub3QgZm91bmRgKTtcbiAgfVxuXG4gIGlmICghaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgZGVsZXRlIHN0YWNrLm1ldGFkYXRhO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG5leHBvcnQgPSB7XG4gICdzeW50aGVzaXplcyBhbGwgc3RhY2tzIGFuZCByZXR1cm5zIHN5bnRoZXNpcyByZXN1bHQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IHN5bnRoKCk7XG5cbiAgICAvLyBjbGVhbiB1cCBtZXRhZGF0YSBzbyBhc3NlcnRpb24gd2lsbCBiZSBzYW5lXG4gICAgcmVzcG9uc2Uuc3RhY2tzLmZvckVhY2gocyA9PiBkZWxldGUgcy5tZXRhZGF0YSk7XG4gICAgZGVsZXRlIHJlc3BvbnNlLnJ1bnRpbWU7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChyZXNwb25zZSwge1xuICAgICAgdmVyc2lvbjogJzAuMTQuMCcsXG4gICAgICBzdGFja3M6XG4gICAgICBbIHsgbmFtZTogJ3N0YWNrMScsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6XG4gICAgICAgICAgIHsgbmFtZTogJzEyMzQ1L3VzLWVhc3QtMScsXG4gICAgICAgICAgICAgYWNjb3VudDogJzEyMzQ1JyxcbiAgICAgICAgICAgICByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgICAgICAgdGVtcGxhdGU6XG4gICAgICAgICAgIHsgUmVzb3VyY2VzOlxuICAgICAgICAgICAgICB7IHMxYzE6IHsgVHlwZTogJ0R1bW15UmVzb3VyY2UnLCBQcm9wZXJ0aWVzOiB7IFByb3AxOiAnUHJvcDEnIH0gfSxcbiAgICAgICAgICAgICAgICBzMWMyOiB7IFR5cGU6ICdEdW1teVJlc291cmNlJywgUHJvcGVydGllczogeyBGb286IDEyMyB9IH0gfSB9IH0sXG4gICAgICAgIHsgbmFtZTogJ3N0YWNrMicsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6XG4gICAgICAgICAgIHsgbmFtZTogJ3Vua25vd24tYWNjb3VudC91bmtub3duLXJlZ2lvbicsXG4gICAgICAgICAgICAgYWNjb3VudDogJ3Vua25vd24tYWNjb3VudCcsXG4gICAgICAgICAgICAgcmVnaW9uOiAndW5rbm93bi1yZWdpb24nIH0sXG4gICAgICAgICAgdGVtcGxhdGU6XG4gICAgICAgICAgIHsgUmVzb3VyY2VzOlxuICAgICAgICAgICAgICB7IHMyYzE6IHsgVHlwZTogJ0R1bW15UmVzb3VyY2UnLCBQcm9wZXJ0aWVzOiB7IFByb2cyOiAnUHJvZzInIH0gfSxcbiAgICAgICAgICAgICAgICBzMWMycjFEMTc5MUMwMTogeyBUeXBlOiAnUmVzb3VyY2VUeXBlMScgfSxcbiAgICAgICAgICAgICAgICBzMWMycjI1RjY4NUZGRjogeyBUeXBlOiAnUmVzb3VyY2VUeXBlMicgfSB9IH0gfSBdIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzeW50aChuYW1lKSBjYW4gYmUgdXNlZCBwcm9ncmFtbWF0aWNhbGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3QgcHJvZyA9IG5ldyBBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhwcm9nLCAnTXlTdGFjaycpO1xuICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UnLCB7IHR5cGU6ICdNeVJlc291cmNlVHlwZScgfSk7XG5cbiAgICBsZXQgdGhyb3dzO1xuICAgIHRyeSB7XG4gICAgICBwcm9nLnN5bnRoZXNpemVTdGFja3MoWydmb28nXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3dzID0gZS5tZXNzYWdlO1xuICAgIH1cbiAgICB0ZXN0Lm9rKHRocm93cy5pbmRleE9mKCdDYW5ub3QgZmluZCBzdGFjayBmb28nKSAhPT0gLTEpO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocHJvZy5zeW50aGVzaXplU3RhY2soJ015U3RhY2snKS50ZW1wbGF0ZSxcbiAgICAgIHsgUmVzb3VyY2VzOiB7IE15UmVzb3VyY2U6IHsgVHlwZTogJ015UmVzb3VyY2VUeXBlJyB9IH0gfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3N5bnRoKG5hbWUpIGFsc28gY29sbGVjdHMgbWV0YWRhdGEgZnJvbSBhbGwgY29uc3RydWN0cyBpbiB0aGUgc3RhY2snKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IHN5bnRoU3RhY2soJ3N0YWNrMScsIHRydWUpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gc3RhY2subWV0YWRhdGE7XG4gICAgc3RyaXBTdGFja1RyYWNlcyhvdXRwdXQpO1xuXG4gICAgdGVzdC5vayhvdXRwdXRbJy8nXSwgJ2FwcC1sZXZlbCBtZXRhZGF0YSBpcyBpbmNsdWRlZCB1bmRlciBcIi5cIicpO1xuICAgIHRlc3QuZXF1YWwob3V0cHV0WycvJ11bMF0udHlwZSwgJ2FwcGxldmVsJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy8nXVswXS5kYXRhLCAxMjMpO1xuXG4gICAgdGVzdC5vayhvdXRwdXRbJy9zdGFjazEnXSwgJ3RoZSBjb25zdHJ1Y3QgXCJzdGFjazFcIiBoYXMgbWV0YWRhdGEnKTtcbiAgICB0ZXN0LmVxdWFsKG91dHB1dFsnL3N0YWNrMSddWzBdLnR5cGUsICdtZXRhJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEnXVswXS5kYXRhLCAxMTEpO1xuICAgIHRlc3Qub2sob3V0cHV0Wycvc3RhY2sxJ11bMF0udHJhY2UubGVuZ3RoID4gMCwgJ3RyYWNlIGNvbnRhaW5zIG11bHRpcGxlIGVudHJpZXMnKTtcblxuICAgIHRlc3Qub2sob3V0cHV0Wycvc3RhY2sxL3MxYzInXSk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEvczFjMiddLmxlbmd0aCwgMiwgJ3R3byBlbnRyaWVzJyk7XG4gICAgdGVzdC5lcXVhbChvdXRwdXRbJy9zdGFjazEvczFjMiddWzBdLmRhdGEsICd3YXJuaW5nMScpO1xuXG4gICAgY29uc3Qgc3RhY2syID0gc3ludGhTdGFjaygnc3RhY2syJywgdHJ1ZSk7XG4gICAgY29uc3Qgb3V0cHV0MiA9IHN0YWNrMi5tZXRhZGF0YTtcblxuICAgIHRlc3Qub2sob3V0cHV0MlsnL3N0YWNrMi9zMWMyJ10pO1xuICAgIHRlc3QuZXF1YWwob3V0cHV0MlsnL3N0YWNrMi9zMWMyJ11bMF0udHlwZSwgJ21ldGEnKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChvdXRwdXQyWycvc3RhY2syL3MxYzInXVswXS5kYXRhLCB7IGtleTogJ3ZhbHVlJyB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdjb250ZXh0IGNhbiBiZSBwYXNzZWQgdGhyb3VnaCBDREtfQ09OVEVYVCcodGVzdDogVGVzdCkge1xuICAgIHByb2Nlc3MuZW52W2N4YXBpLkNPTlRFWFRfRU5WXSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGtleTE6ICd2YWwxJyxcbiAgICAgIGtleTI6ICd2YWwyJ1xuICAgIH0pO1xuICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgdGVzdC5kZWVwRXF1YWwocHJvZy5nZXRDb250ZXh0KCdrZXkxJyksICd2YWwxJyk7XG4gICAgdGVzdC5kZWVwRXF1YWwocHJvZy5nZXRDb250ZXh0KCdrZXkyJyksICd2YWwyJyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2NvbnRleHQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGNhbiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIHN0YWNrJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gc3ludGhTdGFjaygnc3RhY2syJywgZmFsc2UsIHsgY3R4MTogJ0hFTExPJyB9KTtcblxuICAgIHRlc3QuZGVlcEVxdWFsKG91dHB1dC50ZW1wbGF0ZSwge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIHMyYzE6IHtcbiAgICAgICAgVHlwZTogXCJEdW1teVJlc291cmNlXCIsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBQcm9nMjogXCJQcm9nMlwiXG4gICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgczFjMnIxRDE3OTFDMDE6IHtcbiAgICAgICAgVHlwZTogXCJSZXNvdXJjZVR5cGUxXCJcbiAgICAgICAgfSxcbiAgICAgICAgczFjMnIyNUY2ODVGRkY6IHtcbiAgICAgICAgVHlwZTogXCJSZXNvdXJjZVR5cGUyXCIsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBGcm9tQ29udGV4dDogXCJIRUxMT1wiXG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzZXRDb250ZXh0KGssdikgY2FuIGJlIHVzZWQgdG8gc2V0IGNvbnRleHQgcHJvZ3JhbW1hdGljYWxseScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHByb2cgPSBuZXcgQXBwKCk7XG4gICAgcHJvZy5zZXRDb250ZXh0KCdmb28nLCAnYmFyJyk7XG4gICAgdGVzdC5kZWVwRXF1YWwocHJvZy5nZXRDb250ZXh0KCdmb28nKSwgJ2JhcicpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzZXRDb250ZXh0KGssdikgY2Fubm90IGJlIGNhbGxlZCBhZnRlciBzdGFja3MgaGF2ZSBiZWVuIGFkZGVkIGJlY2F1c2Ugc3RhY2tzIG1heSB1c2UgdGhlIGNvbnRleHQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBwcm9nID0gbmV3IEFwcCgpO1xuICAgIG5ldyBTdGFjayhwcm9nLCAnczEnKTtcbiAgICB0ZXN0LnRocm93cygoKSA9PiBwcm9nLnNldENvbnRleHQoJ2ZvbycsICdiYXInKSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FwcC5zeW50aGVzaXplU3RhY2soc3RhY2spIHBlcmZvcm1zIHZhbGlkYXRpb24gZmlyc3QgKGFwcC52YWxpZGF0ZUFsbCgpKSBhbmQgaWYgdGhlcmUgYXJlIGVycm9ycywgaXQgcmV0dXJucyB0aGUgZXJyb3JzJyh0ZXN0OiBUZXN0KSB7XG5cbiAgICBjbGFzcyBDaGlsZCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgIHJldHVybiBbIGBFcnJvciBmcm9tICR7dGhpcy5pZH1gIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUGFyZW50IGV4dGVuZHMgU3RhY2sge1xuXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gbmV3IFBhcmVudChhcHAsICdQYXJlbnQnKTtcbiAgICBuZXcgQ2hpbGQocGFyZW50LCAnQzEnKTtcbiAgICBuZXcgQ2hpbGQocGFyZW50LCAnQzInKTtcblxuICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgIGFwcC5zeW50aGVzaXplU3RhY2tzKFsnUGFyZW50J10pO1xuICAgIH0sIC9TdGFjayB2YWxpZGF0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3JzLyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYXBwLnN5bnRoZXNpemVTdGFjayhzdGFjaykgd2lsbCByZXR1cm4gYSBsaXN0IG9mIG1pc3NpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbicodGVzdDogVGVzdCkge1xuICAgIGNsYXNzIE15U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gICAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IEFwcCwgbmFtZTogc3RyaW5nLCBwcm9wcz86IFN0YWNrUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lLCBwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nQ29udGV4dCgnbWlzc2luZy1jb250ZXh0LWtleScsIHtcbiAgICAgICAgICBwcm92aWRlcjogJ2Zha2UnLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBhY2NvdW50OiAnMTIzNDU2ODkwMTInLFxuICAgICAgICAgICAgcmVnaW9uOiAnYWItbm9ydGgtMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJlcG9ydE1pc3NpbmdDb250ZXh0KCdtaXNzaW5nLWNvbnRleHQta2V5LTInLCB7XG4gICAgICAgICAgcHJvdmlkZXI6ICdmYWtlMicsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGZvbzogJ2JhcicsXG4gICAgICAgICAgICBhY2NvdW50OiAnMTIzNDU2ODkwMTInLFxuICAgICAgICAgICAgcmVnaW9uOiAnYWItc291dGgtMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IHdpdGhBcHAodW5kZWZpbmVkLCBhcHAgPT4ge1xuICAgICAgbmV3IE15U3RhY2soYXBwLCAnTXlTdGFjaycpO1xuICAgIH0pO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwocmVzcG9uc2Uuc3RhY2tzWzBdLm1pc3NpbmcsIHtcbiAgICAgIFwibWlzc2luZy1jb250ZXh0LWtleVwiOiB7XG4gICAgICAgIHByb3ZpZGVyOiAnZmFrZScsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgYWNjb3VudDogJzEyMzQ1Njg5MDEyJyxcbiAgICAgICAgICByZWdpb246ICdhYi1ub3J0aC0xJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBcIm1pc3NpbmctY29udGV4dC1rZXktMlwiOiB7XG4gICAgICAgIHByb3ZpZGVyOiAnZmFrZTInLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGFjY291bnQ6ICcxMjM0NTY4OTAxMicsXG4gICAgICAgICAgcmVnaW9uOiAnYWItc291dGgtMScsXG4gICAgICAgICAgZm9vOiAnYmFyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcbn07XG5cbmNsYXNzIE15Q29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICBuZXcgUmVzb3VyY2UodGhpcywgJ3IxJywgeyB0eXBlOiAnUmVzb3VyY2VUeXBlMScgfSk7XG4gICAgbmV3IFJlc291cmNlKHRoaXMsICdyMicsIHsgdHlwZTogJ1Jlc291cmNlVHlwZTInLCBwcm9wZXJ0aWVzOiB7IEZyb21Db250ZXh0OiB0aGlzLmdldENvbnRleHQoJ2N0eDEnKSB9IH0pO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgc3RhY2sgdHJhY2VzIGZyb20gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gc3RyaXBTdGFja1RyYWNlcyhtZXRhOiBjeGFwaS5TdGFja01ldGFkYXRhKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGEpKSB7XG4gICAgbWV0YVtrZXldID0gbWV0YVtrZXldLmZpbHRlcihlbnRyeSA9PiBlbnRyeS50eXBlICE9PSAnYXdzOmNkazpsb2dpY2FsSWQnKTtcbiAgfVxufVxuIl19

@@ -6,6 +6,6 @@ import { Test } from 'nodeunit';

'AvailabilityZoneProvider will complain if not given a list'(test: Test): void;
'ContextProvider consistently generates a key'(test: Test): void;
'SSM parameter provider will return context values if available'(test: Test): void;
'SSM parameter provider has configurable default'(test: Test): void;
'Return default values if "env" is undefined to facilitate unit tests, but also expect metadata to include "error" messages'(test: Test): void;
};
export = _default;

@@ -39,20 +39,29 @@ "use strict";

},
'ContextProvider consistently generates a key'(test) {
const stack = new lib_1.Stack(undefined, 'TestStack', { env: { account: '12345', region: 'us-east-1' } });
const provider = new lib_1.ContextProvider(stack, 'ssm', {
parameterName: 'foo',
anyStringParam: 'bar',
});
const key = provider.key;
test.deepEqual(key, 'ssm:account=12345:anyStringParam=bar:parameterName=foo:region=us-east-1');
const complex = new lib_1.ContextProvider(stack, 'vpc', {
cidrBlock: '192.168.0.16',
tags: { Name: 'MyVPC', Env: 'Preprod' },
igw: false,
});
const complexKey = complex.key;
test.deepEqual(complexKey, 'vpc:account=12345:cidrBlock=192.168.0.16:igw=false:region=us-east-1:tags.Env=Preprod:tags.Name=MyVPC');
test.done();
},
'SSM parameter provider will return context values if available'(test) {
const stack = new lib_1.Stack(undefined, 'TestStack', { env: { account: '12345', region: 'us-east-1' } });
new lib_1.SSMParameterProvider(stack).getString('test');
new lib_1.SSMParameterProvider(stack, { parameterName: 'test' }).parameterValue();
const key = expectedContextKey(stack);
stack.setContext(key, 'abc');
const azs = lib_1.resolve(new lib_1.SSMParameterProvider(stack).getString('test'));
const ssmp = new lib_1.SSMParameterProvider(stack, { parameterName: 'test' });
const azs = lib_1.resolve(ssmp.parameterValue());
test.deepEqual(azs, 'abc');
test.done();
},
'SSM parameter provider has configurable default'(test) {
// GIVEN
const stack = new lib_1.Stack(undefined, 'TestStack', { env: { account: '12345', region: 'us-east-1' } });
// WHEN
const customizedDefault = new lib_1.SSMParameterProvider(stack).getString('test', 'some-value');
// THEN
test.equals(customizedDefault, 'some-value');
test.done();
},
'Return default values if "env" is undefined to facilitate unit tests, but also expect metadata to include "error" messages'(test) {

@@ -63,11 +72,11 @@ const app = new lib_1.App();

test.deepEqual(new lib_1.AvailabilityZoneProvider(stack).availabilityZones, ['dummy1a', 'dummy1b', 'dummy1c']);
test.deepEqual(new lib_1.SSMParameterProvider(child).getString('foo'), 'dummy');
test.deepEqual(new lib_1.SSMParameterProvider(child, { parameterName: 'foo' }).parameterValue(), 'dummy');
const output = app.synthesizeStack(stack.id);
const azError = output.metadata['/test-stack'].find(x => x.type === cxapi.ERROR_METADATA_KEY);
const ssmError = output.metadata['/test-stack/ChildConstruct'].find(x => x.type === cxapi.ERROR_METADATA_KEY);
test.ok(azError && azError.data.includes('Cannot determine scope for context provider availability-zones.'));
test.ok(ssmError && ssmError.data.includes('Cannot determine scope for context provider ssm["foo"].'));
test.ok(azError && azError.data.includes('Cannot determine scope for context provider availability-zones'));
test.ok(ssmError && ssmError.data.includes('Cannot determine scope for context provider ssm'));
test.done();
},
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5Q0FBMEM7QUFFMUMsZ0NBQXVIO0FBdUZ2SCxTQUFTLFFBQVEsQ0FBQyxHQUFRO0lBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQVk7SUFDdEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUE5RkQsaUJBQVM7SUFDUCwyRkFBMkYsQ0FBQyxJQUFVO1FBQ3BHLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEcsTUFBTSxHQUFHLEdBQUcsSUFBSSw4QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0VBQWdFLENBQUMsSUFBVTtRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sTUFBTSxHQUFHLElBQUksOEJBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFD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QUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3hhcGkgPSByZXF1aXJlKCdAYXdzLWNkay9jeC1hcGknKTtcbmltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBBcHAsIEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlciwgQ29uc3RydWN0LCBNZXRhZGF0YUVudHJ5LCByZXNvbHZlLCBTU01QYXJhbWV0ZXJQcm92aWRlciwgU3RhY2sgfSBmcm9tICcuLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICdBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIgcmV0dXJucyBhIGxpc3Qgd2l0aCBkdW1teSB2YWx1ZXMgaWYgdGhlIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgZW52OiB7IGFjY291bnQ6ICcxMjM0NScsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSB9KTtcbiAgICBjb25zdCBhenMgPSBuZXcgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyKHN0YWNrKS5hdmFpbGFiaWxpdHlab25lcztcblxuICAgIHRlc3QuZGVlcEVxdWFsKGF6cywgWydkdW1teTFhJywgJ2R1bW15MWInLCAnZHVtbXkxYyddKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyIHdpbGwgcmV0dXJuIGNvbnRleHQgbGlzdCBpZiBhdmFpbGFibGUnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gICAgY29uc3QgYmVmb3JlID0gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXM7XG4gICAgdGVzdC5kZWVwRXF1YWwoYmVmb3JlLCBbICdkdW1teTFhJywgJ2R1bW15MWInLCAnZHVtbXkxYycgXSk7XG4gICAgY29uc3Qga2V5ID0gZXhwZWN0ZWRDb250ZXh0S2V5KHN0YWNrKTtcblxuICAgIHN0YWNrLnNldENvbnRleHQoa2V5LCBbJ3VzLWVhc3QtMWEnLCAndXMtZWFzdC0xYiddKTtcblxuICAgIGNvbnN0IGF6cyA9IG5ldyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIoc3RhY2spLmF2YWlsYWJpbGl0eVpvbmVzO1xuICAgIHRlc3QuZGVlcEVxdWFsKGF6cywgWyd1cy1lYXN0LTFhJywgJ3VzLWVhc3QtMWInXSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyIHdpbGwgY29tcGxhaW4gaWYgbm90IGdpdmVuIGEgbGlzdCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgZW52OiB7IGFjY291bnQ6ICcxMjM0NScsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSB9KTtcbiAgICBjb25zdCBiZWZvcmUgPSBuZXcgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyKHN0YWNrKS5hdmFpbGFiaWxpdHlab25lcztcbiAgICB0ZXN0LmRlZXBFcXVhbChiZWZvcmUsIFsgJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJyBdKTtcbiAgICBjb25zdCBrZXkgPSBleHBlY3RlZENvbnRleHRLZXkoc3RhY2spO1xuXG4gICAgc3RhY2suc2V0Q29udGV4dChrZXksICdub3QtYS1saXN0Jyk7XG5cbiAgICB0ZXN0LnRocm93cyhcbiAgICAgICgpID0+IG5ldyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIoc3RhY2spLmF2YWlsYWJpbGl0eVpvbmVzXG4gICAgKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdTU00gcGFyYW1ldGVyIHByb3ZpZGVyIHdpbGwgcmV0dXJuIGNvbnRleHQgdmFsdWVzIGlmIGF2YWlsYWJsZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgZW52OiB7IGFjY291bnQ6ICcxMjM0NScsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSB9KTtcbiAgICBuZXcgU1NNUGFyYW1ldGVyUHJvdmlkZXIoc3RhY2spLmdldFN0cmluZygndGVzdCcpO1xuICAgIGNvbnN0IGtleSA9IGV4cGVjdGVkQ29udGV4dEtleShzdGFjayk7XG5cbiAgICBzdGFjay5zZXRDb250ZXh0KGtleSwgJ2FiYycpO1xuXG4gICAgY29uc3QgYXpzID0gcmVzb2x2ZShuZXcgU1NNUGFyYW1ldGVyUHJvdmlkZXIoc3RhY2spLmdldFN0cmluZygndGVzdCcpKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChhenMsICdhYmMnKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdTU00gcGFyYW1ldGVyIHByb3ZpZGVyIGhhcyBjb25maWd1cmFibGUgZGVmYXVsdCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9IH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGN1c3RvbWl6ZWREZWZhdWx0ID0gbmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKHN0YWNrKS5nZXRTdHJpbmcoJ3Rlc3QnLCAnc29tZS12YWx1ZScpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZXF1YWxzKGN1c3RvbWl6ZWREZWZhdWx0LCAnc29tZS12YWx1ZScpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1JldHVybiBkZWZhdWx0IHZhbHVlcyBpZiBcImVudlwiIGlzIHVuZGVmaW5lZCB0byBmYWNpbGl0YXRlIHVuaXQgdGVzdHMsIGJ1dCBhbHNvIGV4cGVjdCBtZXRhZGF0YSB0byBpbmNsdWRlIFwiZXJyb3JcIiBtZXNzYWdlcycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICd0ZXN0LXN0YWNrJyk7XG5cbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdDaGlsZENvbnN0cnVjdCcpO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwobmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXMsIFsgJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJyBdKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChuZXcgU1NNUGFyYW1ldGVyUHJvdmlkZXIoY2hpbGQpLmdldFN0cmluZygnZm9vJyksICdkdW1teScpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXBwLnN5bnRoZXNpemVTdGFjayhzdGFjay5pZCk7XG5cbiAgICBjb25zdCBhekVycm9yOiBNZXRhZGF0YUVudHJ5IHwgdW5kZWZpbmVkID0gb3V0cHV0Lm1ldGFkYXRhWycvdGVzdC1zdGFjayddLmZpbmQoeCA9PiB4LnR5cGUgPT09IGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSk7XG4gICAgY29uc3Qgc3NtRXJyb3I6IE1ldGFkYXRhRW50cnkgfCB1bmRlZmluZWQgPSBvdXRwdXQubWV0YWRhdGFbJy90ZXN0LXN0YWNrL0NoaWxkQ29uc3RydWN0J10uZmluZCh4ID0+IHgudHlwZSA9PT0gY3hhcGkuRVJST1JfTUVUQURBVEFfS0VZKTtcblxuICAgIHRlc3Qub2soYXpFcnJvciAmJiAoYXpFcnJvci5kYXRhIGFzIHN0cmluZykuaW5jbHVkZXMoJ0Nhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgYXZhaWxhYmlsaXR5LXpvbmVzLicpKTtcbiAgICB0ZXN0Lm9rKHNzbUVycm9yICYmIChzc21FcnJvci5kYXRhIGFzIHN0cmluZykuaW5jbHVkZXMoJ0Nhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgc3NtW1wiZm9vXCJdLicpKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxufTtcblxuZnVuY3Rpb24gZmlyc3RLZXkob2JqOiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVswXTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGV4cGVjdGVkIGNvbnRleHQga2V5IGZyb20gYSBzdGFjayB3aXRoIG1pc3NpbmcgcGFyYW1ldGVyc1xuICovXG5mdW5jdGlvbiBleHBlY3RlZENvbnRleHRLZXkoc3RhY2s6IFN0YWNrKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpcnN0S2V5KHN0YWNrLm1pc3NpbmdDb250ZXh0KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5Q0FBMEM7QUFFMUMsZ0NBQ3NFO0FBNkZ0RSxTQUFTLFFBQVEsQ0FBQyxHQUFRO0lBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQVk7SUFDdEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFwR0QsaUJBQVM7SUFDUCwyRkFBMkYsQ0FBQyxJQUFVO1FBQ3BHLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEcsTUFBTSxHQUFHLEdBQUcsSUFBSSw4QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0VBQWdFLENBQUMsSUFBVTtRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sTUFBTSxHQUFHLElBQUksOEJBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFD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QUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN6SCxNQUFNLFFBQVEsR0FBOEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFekksSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUssT0FBTyxDQUFDLElBQWUsQ0FBQyxRQUFRLENBQUMsZ0VBQWdFLENBQUMsQ0FBQyxDQUFDO1FBQ3hILElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFLLFFBQVEsQ0FBQyxJQUFlLENBQUMsUUFBUSxDQUFDLGlEQUFpRCxDQUFDLENBQUMsQ0FBQztRQUUzRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjeGFwaSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFwcCwgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyLCBDb25zdHJ1Y3QsIENvbnRleHRQcm92aWRlcixcbiAgTWV0YWRhdGFFbnRyeSwgcmVzb2x2ZSwgU1NNUGFyYW1ldGVyUHJvdmlkZXIsIFN0YWNrIH0gZnJvbSAnLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAnQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyIHJldHVybnMgYSBsaXN0IHdpdGggZHVtbXkgdmFsdWVzIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gICAgY29uc3QgYXpzID0gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXM7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChhenMsIFsnZHVtbXkxYScsICdkdW1teTFiJywgJ2R1bW15MWMnXSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0F2YWlsYWJpbGl0eVpvbmVQcm92aWRlciB3aWxsIHJldHVybiBjb250ZXh0IGxpc3QgaWYgYXZhaWxhYmxlJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9IH0pO1xuICAgIGNvbnN0IGJlZm9yZSA9IG5ldyBBdmFpbGFiaWxpdHlab25lUHJvdmlkZXIoc3RhY2spLmF2YWlsYWJpbGl0eVpvbmVzO1xuICAgIHRlc3QuZGVlcEVxdWFsKGJlZm9yZSwgWyAnZHVtbXkxYScsICdkdW1teTFiJywgJ2R1bW15MWMnIF0pO1xuICAgIGNvbnN0IGtleSA9IGV4cGVjdGVkQ29udGV4dEtleShzdGFjayk7XG5cbiAgICBzdGFjay5zZXRDb250ZXh0KGtleSwgWyd1cy1lYXN0LTFhJywgJ3VzLWVhc3QtMWInXSk7XG5cbiAgICBjb25zdCBhenMgPSBuZXcgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyKHN0YWNrKS5hdmFpbGFiaWxpdHlab25lcztcbiAgICB0ZXN0LmRlZXBFcXVhbChhenMsIFsndXMtZWFzdC0xYScsICd1cy1lYXN0LTFiJ10pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ0F2YWlsYWJpbGl0eVpvbmVQcm92aWRlciB3aWxsIGNvbXBsYWluIGlmIG5vdCBnaXZlbiBhIGxpc3QnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gICAgY29uc3QgYmVmb3JlID0gbmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXM7XG4gICAgdGVzdC5kZWVwRXF1YWwoYmVmb3JlLCBbICdkdW1teTFhJywgJ2R1bW15MWInLCAnZHVtbXkxYycgXSk7XG4gICAgY29uc3Qga2V5ID0gZXhwZWN0ZWRDb250ZXh0S2V5KHN0YWNrKTtcblxuICAgIHN0YWNrLnNldENvbnRleHQoa2V5LCAnbm90LWEtbGlzdCcpO1xuXG4gICAgdGVzdC50aHJvd3MoXG4gICAgICAoKSA9PiBuZXcgQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyKHN0YWNrKS5hdmFpbGFiaWxpdHlab25lc1xuICAgICk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnQ29udGV4dFByb3ZpZGVyIGNvbnNpc3RlbnRseSBnZW5lcmF0ZXMgYSBrZXknKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNDUnLCByZWdpb246ICd1cy1lYXN0LTEnIH0gfSk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgQ29udGV4dFByb3ZpZGVyKHN0YWNrLCAnc3NtJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogJ2ZvbycsXG4gICAgICBhbnlTdHJpbmdQYXJhbTogJ2JhcicsXG4gICAgfSk7XG4gICAgY29uc3Qga2V5ID0gcHJvdmlkZXIua2V5O1xuICAgIHRlc3QuZGVlcEVxdWFsKGtleSwgJ3NzbTphY2NvdW50PTEyMzQ1OmFueVN0cmluZ1BhcmFtPWJhcjpwYXJhbWV0ZXJOYW1lPWZvbzpyZWdpb249dXMtZWFzdC0xJyk7XG4gICAgY29uc3QgY29tcGxleCA9IG5ldyBDb250ZXh0UHJvdmlkZXIoc3RhY2ssICd2cGMnLCB7XG4gICAgICBjaWRyQmxvY2s6ICcxOTIuMTY4LjAuMTYnLFxuICAgICAgdGFnczogeyBOYW1lOiAnTXlWUEMnLCBFbnY6ICdQcmVwcm9kJyB9LFxuICAgICAgaWd3OiBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21wbGV4S2V5ID0gY29tcGxleC5rZXk7XG4gICAgdGVzdC5kZWVwRXF1YWwoY29tcGxleEtleSxcbiAgICAgICd2cGM6YWNjb3VudD0xMjM0NTpjaWRyQmxvY2s9MTkyLjE2OC4wLjE2Omlndz1mYWxzZTpyZWdpb249dXMtZWFzdC0xOnRhZ3MuRW52PVByZXByb2Q6dGFncy5OYW1lPU15VlBDJyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG4gICdTU00gcGFyYW1ldGVyIHByb3ZpZGVyIHdpbGwgcmV0dXJuIGNvbnRleHQgdmFsdWVzIGlmIGF2YWlsYWJsZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgZW52OiB7IGFjY291bnQ6ICcxMjM0NScsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSB9KTtcbiAgICBuZXcgU1NNUGFyYW1ldGVyUHJvdmlkZXIoc3RhY2ssICB7cGFyYW1ldGVyTmFtZTogJ3Rlc3QnfSkucGFyYW1ldGVyVmFsdWUoKTtcbiAgICBjb25zdCBrZXkgPSBleHBlY3RlZENvbnRleHRLZXkoc3RhY2spO1xuXG4gICAgc3RhY2suc2V0Q29udGV4dChrZXksICdhYmMnKTtcblxuICAgIGNvbnN0IHNzbXAgPSBuZXcgU1NNUGFyYW1ldGVyUHJvdmlkZXIoc3RhY2ssICB7cGFyYW1ldGVyTmFtZTogJ3Rlc3QnfSk7XG4gICAgY29uc3QgYXpzID0gcmVzb2x2ZShzc21wLnBhcmFtZXRlclZhbHVlKCkpO1xuICAgIHRlc3QuZGVlcEVxdWFsKGF6cywgJ2FiYycpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ1JldHVybiBkZWZhdWx0IHZhbHVlcyBpZiBcImVudlwiIGlzIHVuZGVmaW5lZCB0byBmYWNpbGl0YXRlIHVuaXQgdGVzdHMsIGJ1dCBhbHNvIGV4cGVjdCBtZXRhZGF0YSB0byBpbmNsdWRlIFwiZXJyb3JcIiBtZXNzYWdlcycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICd0ZXN0LXN0YWNrJyk7XG5cbiAgICBjb25zdCBjaGlsZCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdDaGlsZENvbnN0cnVjdCcpO1xuXG4gICAgdGVzdC5kZWVwRXF1YWwobmV3IEF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcihzdGFjaykuYXZhaWxhYmlsaXR5Wm9uZXMsIFsgJ2R1bW15MWEnLCAnZHVtbXkxYicsICdkdW1teTFjJyBdKTtcbiAgICB0ZXN0LmRlZXBFcXVhbChuZXcgU1NNUGFyYW1ldGVyUHJvdmlkZXIoY2hpbGQsIHtwYXJhbWV0ZXJOYW1lOiAnZm9vJ30pLnBhcmFtZXRlclZhbHVlKCksICdkdW1teScpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXBwLnN5bnRoZXNpemVTdGFjayhzdGFjay5pZCk7XG5cbiAgICBjb25zdCBhekVycm9yOiBNZXRhZGF0YUVudHJ5IHwgdW5kZWZpbmVkID0gb3V0cHV0Lm1ldGFkYXRhWycvdGVzdC1zdGFjayddLmZpbmQoeCA9PiB4LnR5cGUgPT09IGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSk7XG4gICAgY29uc3Qgc3NtRXJyb3I6IE1ldGFkYXRhRW50cnkgfCB1bmRlZmluZWQgPSBvdXRwdXQubWV0YWRhdGFbJy90ZXN0LXN0YWNrL0NoaWxkQ29uc3RydWN0J10uZmluZCh4ID0+IHgudHlwZSA9PT0gY3hhcGkuRVJST1JfTUVUQURBVEFfS0VZKTtcblxuICAgIHRlc3Qub2soYXpFcnJvciAmJiAoYXpFcnJvci5kYXRhIGFzIHN0cmluZykuaW5jbHVkZXMoJ0Nhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgYXZhaWxhYmlsaXR5LXpvbmVzJykpO1xuICAgIHRlc3Qub2soc3NtRXJyb3IgJiYgKHNzbUVycm9yLmRhdGEgYXMgc3RyaW5nKS5pbmNsdWRlcygnQ2Fubm90IGRldGVybWluZSBzY29wZSBmb3IgY29udGV4dCBwcm92aWRlciBzc20nKSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGZpcnN0S2V5KG9iajogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailbMF07XG59XG5cbi8qKlxuICogR2V0IHRoZSBleHBlY3RlZCBjb250ZXh0IGtleSBmcm9tIGEgc3RhY2sgd2l0aCBtaXNzaW5nIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gZXhwZWN0ZWRDb250ZXh0S2V5KHN0YWNrOiBTdGFjayk6IHN0cmluZyB7XG4gIHJldHVybiBmaXJzdEtleShzdGFjay5taXNzaW5nQ29udGV4dCk7XG59XG4iXX0=

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc