projen-pipelines 0.3.21 → 0.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +7 -4
- package/API.md +420 -0
- package/lib/assign-approver/base.js +3 -4
- package/lib/assign-approver/github.js +4 -4
- package/lib/awscdk/base.js +48 -6
- package/lib/awscdk/bash.js +2 -4
- package/lib/awscdk/github.js +13 -6
- package/lib/awscdk/gitlab.js +11 -6
- package/lib/drift/base.js +8 -4
- package/lib/drift/bash.js +3 -4
- package/lib/drift/detect-drift.js +3 -2
- package/lib/drift/github.js +5 -4
- package/lib/drift/gitlab.js +5 -4
- package/lib/drift/step.js +2 -4
- package/lib/release.js +5 -2
- package/lib/steps/amplify-deploy.step.js +5 -4
- package/lib/steps/artifact-steps.js +5 -6
- package/lib/steps/aws-assume-role.step.js +3 -4
- package/lib/steps/github-summary.step.js +3 -4
- package/lib/steps/package-manager-setup.step.js +4 -6
- package/lib/steps/registries.js +7 -8
- package/lib/steps/set-env.step.js +2 -1
- package/lib/steps/step.js +9 -10
- package/lib/versioning/computation.js +6 -8
- package/lib/versioning/config.js +3 -6
- package/lib/versioning/outputs.js +13 -16
- package/lib/versioning/setup.js +9 -9
- package/lib/versioning/strategy.js +4 -4
- package/lib/versioning/version-info.js +18 -9
- package/node_modules/@babel/code-frame/package.json +2 -2
- package/node_modules/@babel/helper-validator-identifier/package.json +1 -1
- package/node_modules/@nodable/entities/README.md +52 -1
- package/node_modules/@nodable/entities/package.json +4 -1
- package/node_modules/@nodable/entities/src/EntityDecoder.js +105 -4
- package/node_modules/@nodable/entities/src/EntityEncoder.js +79 -34
- package/node_modules/@nodable/entities/src/all-entities.js +53 -0
- package/node_modules/@nodable/entities/src/entities.js +0 -38
- package/node_modules/@nodable/entities/src/entityTries.js +48 -37
- package/node_modules/@nodable/entities/src/index.d.ts +93 -2
- package/node_modules/@nodable/entities/src/index.js +2 -2
- package/node_modules/anynum/LICENSE +21 -0
- package/node_modules/anynum/README.md +142 -0
- package/node_modules/anynum/anynum.js +135 -0
- package/node_modules/anynum/digitTable.js +116 -0
- package/node_modules/anynum/package.json +42 -0
- package/node_modules/dotgitignore/node_modules/brace-expansion/README.md +23 -1
- package/node_modules/dotgitignore/node_modules/brace-expansion/index.js +265 -86
- package/node_modules/dotgitignore/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/fast-xml-builder/CHANGELOG.md +12 -0
- package/node_modules/fast-xml-builder/README.md +4 -1
- package/node_modules/fast-xml-builder/lib/fxb.cjs +1 -1
- package/node_modules/fast-xml-builder/lib/fxb.min.js +1 -1
- package/node_modules/fast-xml-builder/lib/fxb.min.js.map +1 -1
- package/node_modules/fast-xml-builder/package.json +6 -10
- package/node_modules/fast-xml-builder/src/fxb.js +34 -24
- package/node_modules/fast-xml-builder/src/orderedJs2Xml.js +18 -17
- package/node_modules/fast-xml-builder/src/util.js +10 -3
- package/node_modules/fast-xml-parser/CHANGELOG.md +34 -0
- package/node_modules/fast-xml-parser/README.md +10 -6
- package/node_modules/fast-xml-parser/lib/fxbuilder.min.js +1 -1
- package/node_modules/fast-xml-parser/lib/fxbuilder.min.js.map +1 -1
- package/node_modules/fast-xml-parser/lib/fxp.cjs +1 -1
- package/node_modules/fast-xml-parser/lib/fxp.d.cts +3 -1
- package/node_modules/fast-xml-parser/lib/fxp.min.js +1 -1
- package/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -1
- package/node_modules/fast-xml-parser/lib/fxparser.min.js +1 -1
- package/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -1
- package/node_modules/fast-xml-parser/package.json +8 -10
- package/node_modules/fast-xml-parser/src/fxp.d.ts +5 -1
- package/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js +16 -1
- package/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js +2 -1
- package/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +36 -3
- package/node_modules/fast-xml-parser/src/xmlparser/xmlNode.js +14 -0
- package/node_modules/get-pkg-repo/node_modules/yargs/package.json +27 -26
- package/node_modules/get-pkg-repo/node_modules/yargs/yargs +5 -9
- package/node_modules/get-pkg-repo/node_modules/yargs/yargs.cjs +15 -0
- package/node_modules/hasown/CHANGELOG.md +7 -0
- package/node_modules/hasown/index.d.ts +0 -1
- package/node_modules/hasown/package.json +4 -5
- package/node_modules/is-unsafe/LICENSE +21 -0
- package/node_modules/is-unsafe/README.md +599 -0
- package/node_modules/is-unsafe/package.json +56 -0
- package/node_modules/is-unsafe/src/contexts/html.js +102 -0
- package/node_modules/is-unsafe/src/contexts/log.js +98 -0
- package/node_modules/is-unsafe/src/contexts/nosql.js +114 -0
- package/node_modules/is-unsafe/src/contexts/redos.js +60 -0
- package/node_modules/is-unsafe/src/contexts/shell.js +105 -0
- package/node_modules/is-unsafe/src/contexts/sql-strict.js +47 -0
- package/node_modules/is-unsafe/src/contexts/sql.js +95 -0
- package/node_modules/is-unsafe/src/contexts/svg.js +81 -0
- package/node_modules/is-unsafe/src/contexts/xml.js +79 -0
- package/node_modules/is-unsafe/src/index.cjs +27 -0
- package/node_modules/is-unsafe/src/index.d.ts +95 -0
- package/node_modules/is-unsafe/src/index.js +265 -0
- package/node_modules/path-expression-matcher/README.md +82 -7
- package/node_modules/path-expression-matcher/lib/pem.cjs +1 -1
- package/node_modules/path-expression-matcher/lib/pem.d.cts +94 -3
- package/node_modules/path-expression-matcher/lib/pem.min.js +1 -1
- package/node_modules/path-expression-matcher/lib/pem.min.js.map +1 -1
- package/node_modules/path-expression-matcher/package.json +2 -1
- package/node_modules/path-expression-matcher/src/ExpressionSet.js +18 -2
- package/node_modules/path-expression-matcher/src/Matcher.js +109 -16
- package/node_modules/path-expression-matcher/src/index.d.ts +67 -1
- package/node_modules/path-expression-matcher/src/index.js +3 -2
- package/node_modules/semver/classes/range.js +24 -4
- package/node_modules/semver/classes/semver.js +19 -2
- package/node_modules/semver/package.json +2 -2
- package/node_modules/semver/ranges/subset.js +2 -2
- package/node_modules/strnum/CHANGELOG.md +14 -0
- package/node_modules/strnum/README.md +9 -0
- package/node_modules/strnum/package.json +7 -3
- package/node_modules/strnum/strnum.js +14 -2
- package/node_modules/xml-naming/LICENSE +21 -0
- package/node_modules/xml-naming/README.md +99 -1
- package/node_modules/xml-naming/package.json +4 -2
- package/node_modules/xml-naming/src/index.d.ts +34 -0
- package/node_modules/xml-naming/src/index.js +134 -22
- package/node_modules/yargs/build/index.cjs +1 -1
- package/node_modules/yargs/package.json +6 -4
- package/node_modules/yargs/yargs +5 -9
- package/node_modules/yargs/yargs.cjs +15 -0
- package/package.json +8 -9
- package/node_modules/yargs/browser.d.ts +0 -5
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.GitHubAssignApprover = void 0;
|
|
5
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
5
|
const workflows_model_1 = require("projen/lib/github/workflows-model");
|
|
7
6
|
const base_1 = require("./base");
|
|
8
7
|
class GitHubAssignApprover extends base_1.AssignApprover {
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitHubAssignApprover", version: "0.3.23" };
|
|
9
|
+
workflow;
|
|
10
|
+
options;
|
|
9
11
|
constructor(scope, options) {
|
|
10
12
|
super(scope, options);
|
|
11
13
|
this.options = options;
|
|
@@ -80,6 +82,4 @@ if (filteredApprovers.length > 0) {
|
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
exports.GitHubAssignApprover = GitHubAssignApprover;
|
|
83
|
-
|
|
84
|
-
GitHubAssignApprover[_a] = { fqn: "projen-pipelines.GitHubAssignApprover", version: "0.3.21" };
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fzc2lnbi1hcHByb3Zlci9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RUFBa0Y7QUFDbEYsaUNBQStEO0FBYS9ELE1BQWEsb0JBQXFCLFNBQVEscUJBQWM7SUFJdEQsWUFBWSxLQUFvQixFQUFFLE9BQW9DO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNmLGlCQUFpQixFQUFFO2dCQUNqQixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUM7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU87WUFDTCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRVMsYUFBYTtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFFbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDdEMsTUFBTSxFQUFFLFVBQVU7WUFDbEIsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNyQyxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxxQkFBcUI7cUJBQzlCO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsNkJBQTZCO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZTthQUNwRCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDN0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjthQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVkLE9BQU87Ozs7RUFJVCxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsZ0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQjlCLENBQUM7SUFDRCxDQUFDOztBQXBGSCxvREFxRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHaXRIdWJQcm9qZWN0LCBHaXRodWJXb3JrZmxvdyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlBlcm1pc3Npb25zIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IEFzc2lnbkFwcHJvdmVyLCBBc3NpZ25BcHByb3Zlck9wdGlvbnMgfSBmcm9tICcuL2Jhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YkFzc2lnbkFwcHJvdmVyT3B0aW9ucyBleHRlbmRzIEFzc2lnbkFwcHJvdmVyT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIHJ1bm5lciB0YWdzIHRvIHVzZSB0byBzZWxlY3QgcnVubmVyc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbJ3VidW50dS1sYXRlc3QnXVxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyVGFncz86IHN0cmluZ1tdO1xuXG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJBc3NpZ25BcHByb3ZlciBleHRlbmRzIEFzc2lnbkFwcHJvdmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvdzogR2l0aHViV29ya2Zsb3c7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogR2l0SHViQXNzaWduQXBwcm92ZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBHaXRIdWJQcm9qZWN0LCBvcHRpb25zOiBHaXRIdWJBc3NpZ25BcHByb3Zlck9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGRlcGxveW1lbnQgd29ya2Zsb3cgb24gR2l0SHViLlxuICAgIHRoaXMud29ya2Zsb3cgPSBzY29wZS5naXRodWIhLmFkZFdvcmtmbG93KCdhc3NpZ24tYXBwcm92ZXInKTtcbiAgICB0aGlzLndvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0VGFyZ2V0OiB7XG4gICAgICAgIHR5cGVzOiBbJ29wZW5lZCcsICdyZWFkeV9mb3JfcmV2aWV3J10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXR1cFdvcmtmbG93KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgdGhlIEdpdEh1YiB3b3JrZmxvd1xuICAgKi9cbiAgcHVibGljIHJlbmRlclBlcm1pc3Npb25zKCk6IEpvYlBlcm1pc3Npb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBXb3JrZmxvdygpOiB2b2lkIHtcbiAgICBjb25zdCBydW5uZXJUYWdzID0gdGhpcy5vcHRpb25zLnJ1bm5lclRhZ3MgPz8gWyd1YnVudHUtbGF0ZXN0J107XG5cbiAgICBjb25zdCBhcHByb3Zlck1hcHBpbmdTY3JpcHQgPSB0aGlzLmdlbmVyYXRlQXBwcm92ZXJNYXBwaW5nU2NyaXB0KCk7XG5cbiAgICB0aGlzLndvcmtmbG93LmFkZEpvYignYXNzaWduLWFwcHJvdmVyJywge1xuICAgICAgcnVuc09uOiBydW5uZXJUYWdzLFxuICAgICAgcGVybWlzc2lvbnM6IHRoaXMucmVuZGVyUGVybWlzc2lvbnMoKSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQXNzaWduIGFwcHJvdmVyIGJhc2VkIG9uIGF1dGhvcicsXG4gICAgICAgICAgdXNlczogJ2FjdGlvbnMvZ2l0aHViLXNjcmlwdEB2OCcsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgc2NyaXB0OiBhcHByb3Zlck1hcHBpbmdTY3JpcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVBcHByb3Zlck1hcHBpbmdTY3JpcHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXBwaW5nRW50cmllcyA9IHRoaXMuYmFzZU9wdGlvbnMuYXBwcm92ZXJNYXBwaW5nXG4gICAgICAubWFwKG1hcHBpbmcgPT4gYCAgJyR7bWFwcGluZy5hdXRob3J9JzogWyR7bWFwcGluZy5hcHByb3ZlcnMubWFwKGEgPT4gYCcke2F9J2ApLmpvaW4oJywgJyl9XWApXG4gICAgICAuam9pbignLFxcbicpO1xuXG4gICAgY29uc3QgZGVmYXVsdEFwcHJvdmVycyA9IHRoaXMuYmFzZU9wdGlvbnMuZGVmYXVsdEFwcHJvdmVyc1xuICAgICAgLm1hcChhID0+IGAnJHthfSdgKVxuICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICByZXR1cm4gYGNvbnN0IGF1dGhvciA9IGNvbnRleHQucGF5bG9hZC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbjtcblxuLy8gRGVmaW5lIGFwcHJvdmVyIG1hcHBpbmdcbmNvbnN0IGFwcHJvdmVyTWFwcGluZyA9IHtcbiR7bWFwcGluZ0VudHJpZXN9JHttYXBwaW5nRW50cmllcy5sZW5ndGggPiAwID8gJywnIDogJyd9XG4gICdkZWZhdWx0JzogWyR7ZGVmYXVsdEFwcHJvdmVyc31dIC8vIERlZmF1bHQgYXBwcm92ZXIocykgaWYgYXV0aG9yIG5vdCBpbiBtYXBwaW5nXG59O1xuXG4vLyBHZXQgYXBwcm92ZXJzIGZvciB0aGUgUFIgYXV0aG9yXG5jb25zdCBhcHByb3ZlcnMgPSBhcHByb3Zlck1hcHBpbmdbYXV0aG9yXSB8fCBhcHByb3Zlck1hcHBpbmdbJ2RlZmF1bHQnXTtcblxuLy8gRmlsdGVyIG91dCB0aGUgYXV0aG9yIGZyb20gYXBwcm92ZXJzIGxpc3QgKGNhbid0IGFwcHJvdmUgb3duIFBSKVxuY29uc3QgZmlsdGVyZWRBcHByb3ZlcnMgPSBhcHByb3ZlcnMuZmlsdGVyKGFwcHJvdmVyID0+IGFwcHJvdmVyICE9PSBhdXRob3IpO1xuXG5pZiAoZmlsdGVyZWRBcHByb3ZlcnMubGVuZ3RoID4gMCkge1xuICAvLyBSZXF1ZXN0IHJldmlld3MgZnJvbSB0aGUgYXBwcm92ZXJzXG4gIGF3YWl0IGdpdGh1Yi5yZXN0LnB1bGxzLnJlcXVlc3RSZXZpZXdlcnMoe1xuICAgIG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG4gICAgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG4gICAgcHVsbF9udW1iZXI6IGNvbnRleHQuaXNzdWUubnVtYmVyLFxuICAgIHJldmlld2VyczogZmlsdGVyZWRBcHByb3ZlcnNcbiAgfSk7XG4gIFxuICBjb25zb2xlLmxvZyhcXGBBc3NpZ25lZCByZXZpZXdlcnM6IFxcJHtmaWx0ZXJlZEFwcHJvdmVycy5qb2luKCcsICcpfVxcYCk7XG59IGVsc2Uge1xuICBjb25zb2xlLmxvZygnTm8gZWxpZ2libGUgcmV2aWV3ZXJzIGZvdW5kIGZvciB0aGlzIFBSIGF1dGhvcicpO1xufWA7XG4gIH1cbn1cbiJdfQ==
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fzc2lnbi1hcHByb3Zlci9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLHVFQUFrRjtBQUNsRixpQ0FBK0Q7QUFhL0QsTUFBYSxvQkFBcUIsU0FBUSxxQkFBYzs7SUFDckMsUUFBUSxDQUFpQjtJQUN6QixPQUFPLENBQThCO0lBRXRELFlBQVksS0FBb0IsRUFBRSxPQUFvQztRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFPLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDZixpQkFBaUIsRUFBRTtnQkFDakIsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDO2FBQ3RDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPO1lBQ0wsWUFBWSxFQUFFLCtCQUFhLENBQUMsS0FBSztTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVTLGFBQWE7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBRW5FLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ3RDLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDckMsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxpQ0FBaUM7b0JBQ3ZDLElBQUksRUFBRSwwQkFBMEI7b0JBQ2hDLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUscUJBQXFCO3FCQUM5QjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLDZCQUE2QjtRQUNyQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWU7YUFDcEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxPQUFPLENBQUMsTUFBTSxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQzdGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVmLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7YUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFZCxPQUFPOzs7O0VBSVQsY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZDLGdCQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcUI5QixDQUFDO0lBQ0QsQ0FBQzs7QUFwRkgsb0RBcUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2l0SHViUHJvamVjdCwgR2l0aHViV29ya2Zsb3cgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uLCBKb2JQZXJtaXNzaW9ucyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBBc3NpZ25BcHByb3ZlciwgQXNzaWduQXBwcm92ZXJPcHRpb25zIH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJBc3NpZ25BcHByb3Zlck9wdGlvbnMgZXh0ZW5kcyBBc3NpZ25BcHByb3Zlck9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBydW5uZXIgdGFncyB0byB1c2UgdG8gc2VsZWN0IHJ1bm5lcnNcbiAgICpcbiAgICogQGRlZmF1bHQgWyd1YnVudHUtbGF0ZXN0J11cbiAgICovXG4gIHJlYWRvbmx5IHJ1bm5lclRhZ3M/OiBzdHJpbmdbXTtcblxufVxuXG5leHBvcnQgY2xhc3MgR2l0SHViQXNzaWduQXBwcm92ZXIgZXh0ZW5kcyBBc3NpZ25BcHByb3ZlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3c6IEdpdGh1YldvcmtmbG93O1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEdpdEh1YkFzc2lnbkFwcHJvdmVyT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogR2l0SHViUHJvamVjdCwgb3B0aW9uczogR2l0SHViQXNzaWduQXBwcm92ZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkZXBsb3ltZW50IHdvcmtmbG93IG9uIEdpdEh1Yi5cbiAgICB0aGlzLndvcmtmbG93ID0gc2NvcGUuZ2l0aHViIS5hZGRXb3JrZmxvdygnYXNzaWduLWFwcHJvdmVyJyk7XG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICBwdWxsUmVxdWVzdFRhcmdldDoge1xuICAgICAgICB0eXBlczogWydvcGVuZWQnLCAncmVhZHlfZm9yX3JldmlldyddLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0dXBXb3JrZmxvdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIHRoZSBHaXRIdWIgd29ya2Zsb3dcbiAgICovXG4gIHB1YmxpYyByZW5kZXJQZXJtaXNzaW9ucygpOiBKb2JQZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwV29ya2Zsb3coKTogdm9pZCB7XG4gICAgY29uc3QgcnVubmVyVGFncyA9IHRoaXMub3B0aW9ucy5ydW5uZXJUYWdzID8/IFsndWJ1bnR1LWxhdGVzdCddO1xuXG4gICAgY29uc3QgYXBwcm92ZXJNYXBwaW5nU2NyaXB0ID0gdGhpcy5nZW5lcmF0ZUFwcHJvdmVyTWFwcGluZ1NjcmlwdCgpO1xuXG4gICAgdGhpcy53b3JrZmxvdy5hZGRKb2IoJ2Fzc2lnbi1hcHByb3ZlcicsIHtcbiAgICAgIHJ1bnNPbjogcnVubmVyVGFncyxcbiAgICAgIHBlcm1pc3Npb25zOiB0aGlzLnJlbmRlclBlcm1pc3Npb25zKCksXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0Fzc2lnbiBhcHByb3ZlciBiYXNlZCBvbiBhdXRob3InLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2dpdGh1Yi1zY3JpcHRAdjgnLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIHNjcmlwdDogYXBwcm92ZXJNYXBwaW5nU2NyaXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlQXBwcm92ZXJNYXBwaW5nU2NyaXB0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWFwcGluZ0VudHJpZXMgPSB0aGlzLmJhc2VPcHRpb25zLmFwcHJvdmVyTWFwcGluZ1xuICAgICAgLm1hcChtYXBwaW5nID0+IGAgICcke21hcHBpbmcuYXV0aG9yfSc6IFske21hcHBpbmcuYXBwcm92ZXJzLm1hcChhID0+IGAnJHthfSdgKS5qb2luKCcsICcpfV1gKVxuICAgICAgLmpvaW4oJyxcXG4nKTtcblxuICAgIGNvbnN0IGRlZmF1bHRBcHByb3ZlcnMgPSB0aGlzLmJhc2VPcHRpb25zLmRlZmF1bHRBcHByb3ZlcnNcbiAgICAgIC5tYXAoYSA9PiBgJyR7YX0nYClcbiAgICAgIC5qb2luKCcsICcpO1xuXG4gICAgcmV0dXJuIGBjb25zdCBhdXRob3IgPSBjb250ZXh0LnBheWxvYWQucHVsbF9yZXF1ZXN0LnVzZXIubG9naW47XG5cbi8vIERlZmluZSBhcHByb3ZlciBtYXBwaW5nXG5jb25zdCBhcHByb3Zlck1hcHBpbmcgPSB7XG4ke21hcHBpbmdFbnRyaWVzfSR7bWFwcGluZ0VudHJpZXMubGVuZ3RoID4gMCA/ICcsJyA6ICcnfVxuICAnZGVmYXVsdCc6IFske2RlZmF1bHRBcHByb3ZlcnN9XSAvLyBEZWZhdWx0IGFwcHJvdmVyKHMpIGlmIGF1dGhvciBub3QgaW4gbWFwcGluZ1xufTtcblxuLy8gR2V0IGFwcHJvdmVycyBmb3IgdGhlIFBSIGF1dGhvclxuY29uc3QgYXBwcm92ZXJzID0gYXBwcm92ZXJNYXBwaW5nW2F1dGhvcl0gfHwgYXBwcm92ZXJNYXBwaW5nWydkZWZhdWx0J107XG5cbi8vIEZpbHRlciBvdXQgdGhlIGF1dGhvciBmcm9tIGFwcHJvdmVycyBsaXN0IChjYW4ndCBhcHByb3ZlIG93biBQUilcbmNvbnN0IGZpbHRlcmVkQXBwcm92ZXJzID0gYXBwcm92ZXJzLmZpbHRlcihhcHByb3ZlciA9PiBhcHByb3ZlciAhPT0gYXV0aG9yKTtcblxuaWYgKGZpbHRlcmVkQXBwcm92ZXJzLmxlbmd0aCA+IDApIHtcbiAgLy8gUmVxdWVzdCByZXZpZXdzIGZyb20gdGhlIGFwcHJvdmVyc1xuICBhd2FpdCBnaXRodWIucmVzdC5wdWxscy5yZXF1ZXN0UmV2aWV3ZXJzKHtcbiAgICBvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuICAgIHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuICAgIHB1bGxfbnVtYmVyOiBjb250ZXh0Lmlzc3VlLm51bWJlcixcbiAgICByZXZpZXdlcnM6IGZpbHRlcmVkQXBwcm92ZXJzXG4gIH0pO1xuICBcbiAgY29uc29sZS5sb2coXFxgQXNzaWduZWQgcmV2aWV3ZXJzOiBcXCR7ZmlsdGVyZWRBcHByb3ZlcnMuam9pbignLCAnKX1cXGApO1xufSBlbHNlIHtcbiAgY29uc29sZS5sb2coJ05vIGVsaWdpYmxlIHJldmlld2VycyBmb3VuZCBmb3IgdGhpcyBQUiBhdXRob3InKTtcbn1gO1xuICB9XG59XG4iXX0=
|
package/lib/awscdk/base.js
CHANGED
|
@@ -1,9 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
3
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
36
|
exports.CDKPipeline = exports.CdkDiffType = void 0;
|
|
5
37
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const path = require("path");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
7
39
|
const projen_1 = require("projen");
|
|
8
40
|
const common_1 = require("projen/lib/common");
|
|
9
41
|
const javascript_1 = require("projen/lib/javascript");
|
|
@@ -33,6 +65,18 @@ var CdkDiffType;
|
|
|
33
65
|
* It also manages tasks such as publishing CDK assets, bumping version based on git tags, and cleaning up conflicting tasks.
|
|
34
66
|
*/
|
|
35
67
|
class CDKPipeline extends projen_1.Component {
|
|
68
|
+
app;
|
|
69
|
+
baseOptions;
|
|
70
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CDKPipeline", version: "0.3.23" };
|
|
71
|
+
stackPrefix;
|
|
72
|
+
branchName;
|
|
73
|
+
/** Prefix for workflow files, concurrency groups, and artifact names to prevent collisions in monorepos. */
|
|
74
|
+
namePrefix;
|
|
75
|
+
/**
|
|
76
|
+
* The working directory relative to the repository root for this pipeline.
|
|
77
|
+
* Undefined when the pipeline is at the repository root.
|
|
78
|
+
*/
|
|
79
|
+
workingDirectory;
|
|
36
80
|
constructor(app, baseOptions) {
|
|
37
81
|
super(app);
|
|
38
82
|
this.app = app;
|
|
@@ -585,7 +629,7 @@ export interface VersionInfo {
|
|
|
585
629
|
*/
|
|
586
630
|
export function loadVersionInfo(): VersionInfo {
|
|
587
631
|
try {
|
|
588
|
-
return JSON.parse(fs.readFileSync('
|
|
632
|
+
return JSON.parse(fs.readFileSync('.version.tmp.json', 'utf8'));
|
|
589
633
|
} catch (error) {
|
|
590
634
|
console.warn('Could not load version info, using fallback');
|
|
591
635
|
return {
|
|
@@ -719,6 +763,4 @@ function addVersioningToStack(stack: Stack, stageName: string, stageOverrides?:
|
|
|
719
763
|
}
|
|
720
764
|
}
|
|
721
765
|
exports.CDKPipeline = CDKPipeline;
|
|
722
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
723
|
-
CDKPipeline[_a] = { fqn: "projen-pipelines.CDKPipeline", version: "0.3.21" };
|
|
724
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBcUQ7QUFDckQsOENBQWtEO0FBQ2xELHNEQUEyRDtBQUMzRCxzQ0FBMkM7QUFDM0Msb0NBQWdKO0FBQ2hKLDhDQUFrRTtBQXVCbEUsTUFBTTtBQUNOLHlEQUF5RDtBQUN6RCxNQUFNO0FBQ04sK0JBQStCO0FBQy9CLDZFQUE2RTtBQUM3RSwyQkFBMkI7QUFDM0IsNEVBQTRFO0FBQzVFLHlCQUF5QjtBQUN6QixJQUFJO0FBRUosSUFBWSxXQU9YO0FBUEQsV0FBWSxXQUFXO0lBQ3JCLDRCQUE0QjtJQUM1Qiw2Q0FBSSxDQUFBO0lBQ0osb0RBQW9EO0lBQ3BELDZDQUFJLENBQUE7SUFDSix1REFBdUQ7SUFDdkQsNkNBQUksQ0FBQTtBQUNOLENBQUMsRUFQVyxXQUFXLDJCQUFYLFdBQVcsUUFPdEI7QUFzTUQ7OztHQUdHO0FBQ0gsTUFBc0IsV0FBWSxTQUFRLGtCQUFTO0lBYWpELFlBQXNCLEdBQStCLEVBQVksV0FBK0I7UUFDOUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRFMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFHOUYsaURBQWlEO1FBQ2pELElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRixJ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QzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLDJCQUEyQjtRQUNoQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUpULENBQUM7SUFDRCxDQUFDOztBQWp3Qkgsa0NBa3dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIFRleHRGaWxlLCBhd3NjZGsgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgUFJPSkVOX01BUktFUiB9IGZyb20gJ3Byb2plbi9saWIvY29tbW9uJztcbmltcG9ydCB7IE5vZGVQYWNrYWdlTWFuYWdlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBBd3NBc3N1bWVSb2xlU3RlcCwgUGlwZWxpbmVTdGVwLCBQcm9qZW5TY3JpcHRTdGVwLCBTaW1wbGVDb21tYW5kU3RlcCwgU3RlcFNlcXVlbmNlLCBQbnBtU2V0dXBTdGVwLCBDb3JlcGFja1NldHVwU3RlcCB9IGZyb20gJy4uL3N0ZXBzJztcbmltcG9ydCB7IFZlcnNpb25pbmdDb25maWcsIFZlcnNpb25pbmdTZXR1cCB9IGZyb20gJy4uL3ZlcnNpb25pbmcnO1xuXG4vKipcbiAqIFRoZSBFbnZpcm9ubWVudCBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gaG9sZCBBV1MgcmVsYXRlZCBpbmZvcm1hdGlvblxuICogZm9yIGEgc3BlY2lmaWMgZGVwbG95bWVudCBlbnZpcm9ubWVudCB3aXRoaW4geW91ciBpbmZyYXN0cnVjdHVyZS5cbiAqIEVhY2ggZW52aXJvbm1lbnQgcmVxdWlyZXMgYSBzcGVjaWZpYyBhY2NvdW50IGFuZCByZWdpb24gZm9yIGl0cyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnQge1xuICAvKipcbiAgICogVGhlIEFXUyBBY2NvdW50IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQuIEl0J3MgaW1wb3J0YW50IGJlY2F1c2VcbiAgICogZGlmZmVyZW50IHNlcnZpY2VzIG9yIGZlYXR1cmVzIGNvdWxkIGhhdmUgZGlzdGluY3QgcGVybWlzc2lvbnMgYW5kIHNldHRpbmdzXG4gICAqIGluIGRpZmZlcmVudCBhY2NvdW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBSZWdpb24gZm9yIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBkZXRlcm1pbmVzIHdoZXJlIHlvdXIgcmVzb3VyY2VzXG4gICAqIGFyZSBjcmVhdGVkIGFuZCB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgcnVuLiBJdCBjYW4gYWZmZWN0IGxhdGVuY3ksXG4gICAqIGF2YWlsYWJpbGl0eSwgYW5kIHByaWNpbmcuXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbn1cblxuLy8gLyoqXG4vLyAgKiBEZXNjcmliZXMgdGhlIHR5cGUgb2YgcGlwZWxpbmUgdGhhdCB3aWxsIGJlIGNyZWF0ZWRcbi8vICAqL1xuLy8gZXhwb3J0IGVudW0gRGVwbG95bWVudFR5cGUge1xuLy8gICAvKiogRGVwbG95IGV2ZXJ5IGNvbW1pdCBhcyBmYXIgYXMgcG9zc2libGU7IGhvcGVmdWxseSBpbnRvIHByb2R1Y3Rpb24gKi9cbi8vICAgQ09OVElOVU9VU19ERVBMT1lNRU5ULFxuLy8gICAvKiogQnVpbGQgZXZlcnkgY29tbWl0IGFuZCBwcmVwYXJlIGFsbCBhc3NldHMgZm9yIGEgbGF0ZXIgZGVwbG95bWVudCAqL1xuLy8gICBDT05USU5VT1VTX0RFTElWRVJZLFxuLy8gfVxuXG5leHBvcnQgZW51bSBDZGtEaWZmVHlwZSB7XG4gIC8qKiBEbyBub3QgcGVyZm9ybSBhIGRpZmYgKi9cbiAgTk9ORSxcbiAgLyoqIFBlcmZvcm0gYSBmYXN0IHRlbXBsYXRlIGRpZmYgKC0tbm8tY2hhbmdlc2V0KSAqL1xuICBGQVNULFxuICAvKiogUGVyZm9ybSBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gZGlmZiAoLS1jaGFuZ2VzZXQpICovXG4gIEZVTEwsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHBpcGVsaW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWdlIGV4dGVuZHMgTmFtZWRTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBtYW51YWxBcHByb3ZhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwaXBlbGluZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGVwZW5kZW50U3RhZ2UgZXh0ZW5kcyBOYW1lZFN0YWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzdGFnZSBzaG91bGQgYmUgZGVwbG95ZWQgb24gcHVzaFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T25QdXNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSB3aXRoIGEgbmFtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVkU3RhZ2VPcHRpb25zIGV4dGVuZHMgU3RhZ2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgR2l0SHViIGVudmlyb25tZW50IHRvIHVzZSBmb3IgdGhpcyBzdGFnZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHN0YWdlIG5hbWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBHaXRIdWIgZW52aXJvbm1lbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgc3RhZ2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgd2F0Y2hhYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGlmZlR5cGU/OiBDZGtEaWZmVHlwZTtcbiAgcmVhZG9ubHkgcG9zdERpZmZTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwb3N0RGVwbG95U3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSBsaWtlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBJQU0gcm9sZXMgdXNlZCBpbiB0aGUgQ0RLIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElhbVJvbGVDb25maWcge1xuICAvKiogRGVmYXVsdCBJQU0gcm9sZSBBUk4gdXNlZCBpZiBubyBzcGVjaWZpYyByb2xlIGlzIHByb3ZpZGVkLiAqL1xuICByZWFkb25seSBkZWZhdWx0Pzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgc3ludGhlc2lzIHN0ZXAuICovXG4gIHJlYWRvbmx5IHN5bnRoPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgYXNzZXQgcHVibGlzaGluZyBzdGVwLiAqL1xuICByZWFkb25seSBhc3NldFB1Ymxpc2hpbmc/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBhc3NldCBwdWJsaXNoaW5nIHN0ZXAgZm9yIGEgc3BlY2lmaWMgc3RhZ2UuICovXG4gIHJlYWRvbmx5IGFzc2V0UHVibGlzaGluZ1BlclN0YWdlPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRpZmYgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkaWZmPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkZXBsb3ltZW50PzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgICogSUFNIHJvbGUgQVJOcyBmb3IgdXNpbmcgYSBcImp1bXBcIiByb2xlIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUgaW4gYSBkaWZmZXJlbnQgQVdTIGFjY291bnQgdXNpbmcgUm9sZSBDaGFpbmluZy5cbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHM/dGFiPXJlYWRtZS1vdi1maWxlI2Fzc3VtZXJvbGUtd2l0aC1yb2xlLXByZXZpb3VzbHktYXNzdW1lZC1ieS1hY3Rpb24taW4tc2FtZS13b3JrZmxvd1xuICAgKiAqL1xuICByZWFkb25seSBqdW1wPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBDREtQaXBlbGluZU9wdGlvbnMgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBmb3IgYSBDREsgKENsb3VkIERldmVsb3BtZW50IEtpdCkgcGlwZWxpbmUuIEl0IGFsbG93cyB0aGUgZGVmaW5pdGlvblxuICogb2Ygc2V0dGluZ3Mgc3VjaCBhcyB0aGUgc3RhY2sgcHJlZml4IGFuZCBwYWNrYWdlIG5hbWVzcGFjZSB0byBiZSB1c2VkIGluIHRoZVxuICogQVdTIHN0YWNrLCBhbG9uZyB3aXRoIHRoZSBlbnZpcm9ubWVudHMgY29uZmlndXJhdGlvbiB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENES1BpcGVsaW5lT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUsIHVzZWQgYXMgYSBwcmVmaXggZm9yIHdvcmtmbG93IGZpbGVzLFxuICAgKiBjb25jdXJyZW5jeSBncm91cHMsIGFuZCBhcnRpZmFjdCBuYW1lcyB0byBwcmV2ZW50IGNvbGxpc2lvbnMgaW4gbW9ub3JlcG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0IG5hbWUgaWYgdGhlIHByb2plY3QgaGFzIGEgcGFyZW50IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgb3RoZXJ3aXNlIG5vIHByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIGRlcGxveSBmcm9tXG4gICAqIEBkZWZhdWx0IG1haW5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aCBwYXR0ZXJucyB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBwaXBlbGluZSB3aGVuIGNoYW5nZWQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBtb25vcmVwb3Mgd2hlcmUgeW91IG9ubHkgd2FudCB0byBydW4gdGhlIHBpcGVsaW5lXG4gICAqIHdoZW4gZmlsZXMgaW4gYSBzcGVjaWZpYyBzdWJwcm9qZWN0IGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogRm9yIEdpdEh1YiwgdGhlc2UgYXJlIHVzZWQgYXMgYG9uLnB1c2gucGF0aHNgIGFuZCBgb24ucHVsbF9yZXF1ZXN0LnBhdGhzYCBmaWx0ZXJzLlxuICAgKiBGb3IgR2l0TGFiLCB0aGVzZSBhcmUgdXNlZCBhcyBgb25seS5jaGFuZ2VzYCBmaWx0ZXJzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbJ3BhY2thZ2VzL215LWFwcC8qKicsICdzaGFyZWQtbGlicy8qKiddXG4gICAqIEBkZWZhdWx0IC0gYWxsIHBhdGhzIHRyaWdnZXIgdGhlIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZGVmaW5lIGEgcHJlZml4IGZvciB0aGUgQVdTIFN0YWNrIHJlc291cmNlcyBjcmVhdGVkXG4gICAqIGR1cmluZyB0aGUgcGlwZWxpbmUncyBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHByb2plY3QgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlIGFsbCBDREsgYWN0aW9ucyB3aWxsIGFsc28gaW5jbHVkZSA8c3RhY2tOYW1lPi8qIHRvIGRlcGxveS9kaWZmL2Rlc3Ryb3kgc3ViIHN0YWNrcyBvZiB0aGUgbWFpbiBzdGFjay5cbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBkZXBsb3kgQ0RrIGFwcGxpY2F0aW9ucyBjb250YWluaW5nIG11bHRpcGxlIHN0YWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveVN1YlN0YWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgZGV0ZXJtaW5lcyB0aGUgTlBNIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gcGFja2FnaW5nIENESyBjbG91ZFxuICAgKiBhc3NlbWJsaWVzLiBBIG5hbWVzcGFjZSBoZWxwcyBncm91cCByZWxhdGVkIHJlc291cmNlcyB0b2dldGhlciwgcHJvdmlkaW5nXG4gICAqIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGVhc2Ugb2YgbWFuYWdlbWVudC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB5b3UgbmVlZCB0byB2ZXJzaW9uIGFuZCB1cGxvYWQgdGhlIGNsb3VkIGFzc2VtYmx5IHRvIGEgcGFja2FnZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBwa2dOYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqIElBTSBjb25maWcgKi9cbiAgcmVhZG9ubHkgaWFtUm9sZUFybnM6IElhbVJvbGVDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIGEgbGlzdCBvZiBzdGFnZXMgdGhhdCBzaG91bGQgYmUgZGVwbG95ZWQgdXNpbmcgYSBDSS9DRCBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VzOiBEZXBsb3ltZW50U3RhZ2VbXTtcblxuICAvKiogVGhpcyBzcGVjaWZpZXMgZGV0YWlscyBmb3IgaW5kZXBlbmRlbnQgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGluZGVwZW5kZW50U3RhZ2VzPzogSW5kZXBlbmRlbnRTdGFnZVtdO1xuXG4gIC8qKiBUaGlzIHNwZWNpZmllcyBkZXRhaWxzIGZvciBhIHBlcnNvbmFsIHN0YWdlICovXG4gIHJlYWRvbmx5IHBlcnNvbmFsU3RhZ2U/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLyoqIFRoaXMgc3BlY2lmaWVzIGRldGFpbHMgZm9yIGZlYXR1cmUgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGZlYXR1cmVTdGFnZXM/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHBpcGVsaW5lIHRvIGNyZWF0ZS4gSWYgc2V0IHRvIENPTlRJTlVPVVNfREVQTE9ZTUVOVCxcbiAgLy8gICogZXZlcnkgY29tbWl0IGlzIGRlcGxveWVkIGFzIGZhciBhcyBwb3NzaWJsZSwgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbi4gSWYgc2V0IHRvXG4gIC8vICAqIENPTlRJTlVPVVNfREVMSVZFUlksIGV2ZXJ5IGNvbW1pdCBpcyBidWlsdCBhbmQgYWxsIGFzc2V0cyBhcmUgcHJlcGFyZWQgZm9yIGEgbGF0ZXIgZGVwbG95bWVudC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgQ09OVElOVU9VU19ERUxJVkVSWVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgZGVwbG95bWVudFR5cGU/OiBEZXBsb3ltZW50VHlwZTtcblxuICByZWFkb25seSBwcmVJbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlU3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBwb3N0U3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIHJlYWRvbmx5IHByZUluc3RhbGxTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwcmVTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHBvc3RTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHBpcGVsaW5lIHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBjb21wdXRlZCBmb3Igc3VicHJvamVjdHMgYnV0IGNhbiBiZSBleHBsaWNpdGx5IHNldC5cbiAgICpcbiAgICogV2hlbiBzZXQsIENJIGpvYnMgd2lsbCBydW4gY29tbWFuZHMgaW4gdGhpcyBkaXJlY3RvcnksIGFuZCBhcnRpZmFjdCBwYXRoc1xuICAgKiB3aWxsIGJlIHByZWZpeGVkIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQgZnJvbSB0aGUgcHJvamVjdCdzIHBvc2l0aW9uIGluIHRoZSBtb25vcmVwbyAoZW1wdHkgc3RyaW5nIGZvciByb290IHByb2plY3RzKVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb21tYW5kIHRvIHJ1biBiZWZvcmUgdGhlIGJ1aWxkIHN0ZXAsIGV4ZWN1dGVkIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiBhIHdvcmtpbmdEaXJlY3RvcnkgaXMgc2V0IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgdGhlIGNvbW1hbmQgaXNcbiAgICogYXV0b21hdGljYWxseSB3cmFwcGVkIHRvIGV4ZWN1dGUgZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHJlZ2FyZGxlc3Mgb2ZcbiAgICogdGhlIGpvYidzIHdvcmtpbmcgZGlyZWN0b3J5IHNldHRpbmcuXG4gICAqXG4gICAqIEZvciBwbnBtIHdvcmtzcGFjZXM6IGBwbnBtIC1yIC0tZmlsdGVyIDxhcHBuYW1lPl4uLi4gcnVuIGJ1aWxkYFxuICAgKiBGb3IgbnBtIHdvcmtzcGFjZXM6IGBucG0gcnVuIGJ1aWxkIC0td29ya3NwYWNlcyAtLWlmLXByZXNlbnRgXG4gICAqIEZvciB5YXJuIHdvcmtzcGFjZXM6IGB5YXJuIHdvcmtzcGFjZXMgZm9yZWFjaCAtUnQgcnVuIGJ1aWxkYFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByZS1idWlsZCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBwcmVCdWlsZENvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb25pbmcgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbmluZz86IFZlcnNpb25pbmdDb25maWc7XG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lIGNsYXNzIGV4dGVuZHMgdGhlIENvbXBvbmVudCBjbGFzcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIGRlcGxveWluZyBBV1MgQ0RLIChDbG91ZCBEZXZlbG9wbWVudCBLaXQpIGFwcGxpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgc3RhZ2VzLlxuICogSXQgYWxzbyBtYW5hZ2VzIHRhc2tzIHN1Y2ggYXMgcHVibGlzaGluZyBDREsgYXNzZXRzLCBidW1waW5nIHZlcnNpb24gYmFzZWQgb24gZ2l0IHRhZ3MsIGFuZCBjbGVhbmluZyB1cCBjb25mbGljdGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENES1BpcGVsaW5lIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrUHJlZml4OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBicmFuY2hOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFByZWZpeCBmb3Igd29ya2Zsb3cgZmlsZXMsIGNvbmN1cnJlbmN5IGdyb3VwcywgYW5kIGFydGlmYWN0IG5hbWVzIHRvIHByZXZlbnQgY29sbGlzaW9ucyBpbiBtb25vcmVwb3MuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBuYW1lUHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290IGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBVbmRlZmluZWQgd2hlbiB0aGUgcGlwZWxpbmUgaXMgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByb3RlY3RlZCBiYXNlT3B0aW9uczogQ0RLUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgc3VwZXIoYXBwKTtcblxuICAgIC8vIENvbXB1dGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIG1vbm9yZXBvIHN1cHBvcnRcbiAgICBpZiAoYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVsID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFwcC5yb290Lm91dGRpciwgdGhpcy5hcHAub3V0ZGlyKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSByZWwgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZXZlbG9wbWVudCBkZXBlbmRlbmNpZXNcbiAgICB0aGlzLmFwcC5hZGREZXZEZXBzKFxuICAgICAgJ2NvbW1pdC1hbmQtdGFnLXZlcnNpb24nLFxuICAgICAgJ2Nkay1hc3NldHMnLFxuICAgICk7XG4gICAgLy8gdGhpcy5hcHAuYWRkRGVwcyhcbiAgICAvLyApO1xuICAgIHRoaXMucHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZSgnL2Nkay1vdXRwdXRzLSouanNvbicpO1xuXG4gICAgY29uc3QgcGlwZWxpbmVOYW1lID0gYmFzZU9wdGlvbnMucGlwZWxpbmVOYW1lID8/IChhcHAucGFyZW50ID8gYXBwLm5hbWUgOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZVByZWZpeCA9IHBpcGVsaW5lTmFtZSA/IGAke3BpcGVsaW5lTmFtZX0tYCA6ICcnO1xuICAgIHRoaXMuc3RhY2tQcmVmaXggPSBiYXNlT3B0aW9ucy5zdGFja1ByZWZpeCA/PyBhcHAubmFtZTtcbiAgICB0aGlzLmJyYW5jaE5hbWUgPSBiYXNlT3B0aW9ucy5icmFuY2hOYW1lID8/ICdtYWluJzsgLy8gVE9ETyB1c2UgZGVmYXVsdFJlbGVhc2VCcmFuY2ggb2YgTm9kZVByb2plY3RcblxuICAgIC8vIFJlbW92ZXMgdGhlIGNvbXBpbGVkIGNsb3VkIGFzc2VtYmx5IGJlZm9yZSBlYWNoIHN5bnRoXG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ3N5bnRoJyk/LnByZXBlbmRFeGVjKGBybSAtcmYgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fWApO1xuICAgIHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCdzeW50aDpzaWxlbnQnKT8ucHJlcGVuZEV4ZWMoYHJtIC1yZiAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9YCk7XG5cbiAgICAvLyBSZW1vdmUgdGFza3MgdGhhdCBtaWdodCBjb25mbGljdCB3aXRoIHRoZSBwaXBlbGluZSBwcm9jZXNzXG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2RlcGxveScpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkaWZmJyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2Rlc3Ryb3knKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnd2F0Y2gnKTtcblxuICAgIC8vIFNldHVwIHZlcnNpb25pbmcgaWYgZW5hYmxlZFxuICAgIGlmIChiYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkKSB7XG4gICAgICBuZXcgVmVyc2lvbmluZ1NldHVwKHRoaXMucHJvamVjdCwgYmFzZU9wdGlvbnMudmVyc2lvbmluZykuc2V0dXAoKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0YWdlc1xuICAgIGlmIChiYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBlcnNvbmFsU3RhZ2UoKTtcbiAgICB9XG4gICAgaWYgKGJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlRmVhdHVyZVN0YWdlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2UpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIChiYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXSkpIHtcbiAgICAgIHRoaXMuY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlcyB0YXNrcyB0byBoYW5kbGUgdGhlIHJlbGVhc2UgcHJvY2Vzc1xuICAgIHRoaXMuY3JlYXRlUmVsZWFzZVRhc2tzKCk7XG5cbiAgICAvLyBDcmVhdGVzIGEgc3BlY2lhbGl6ZWQgQ0RLIEFwcCBjbGFzc1xuICAgIHRoaXMuY3JlYXRlQXBwbGljYXRpb25FbnRyeXBvaW50KCk7XG5cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBlbmdpbmVUeXBlKCk6IFBpcGVsaW5lRW5naW5lO1xuXG4gIHByb3RlY3RlZCBwcm92aWRlSW5zdGFsbFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsU3RlcHMgPz8gW10pO1xuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgcG5wbSBzZXR1cCBpZiBuZWVkZWQgKEdpdEh1YiBvbmx5KVxuICAgIGlmICh0aGlzLmFwcC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSAmJiB0aGlzLmVuZ2luZVR5cGUoKSA9PT0gUGlwZWxpbmVFbmdpbmUuR0lUSFVCKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFBucG1TZXR1cFN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHZlcnNpb246ICh0aGlzLmFwcC5wYWNrYWdlIGFzIGFueSkucG5wbVZlcnNpb24sXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgY29yZXBhY2sgZW5hYmxlIGZvciBZYXJuIEJlcnJ5XG4gICAgaWYgKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IENvcmVwYWNrU2V0dXBTdGVwKHRoaXMucHJvamVjdCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzKSk7XG4gICAgfVxuICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCBbdGhpcy5hcHAucGFja2FnZS5pbnN0YWxsQ29tbWFuZF0pKTtcbiAgICByZXR1cm4gc2VxO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVTeW50aFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LnN5bnRoKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLnN5bnRoLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5zeW50aCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBzZXEuYWRkU3RlcHMoLi4udGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgW3RoaXMucHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpXSkpO1xuICAgIH1cblxuICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsICdidWlsZCcpKTtcblxuICAgIHNlcS5hZGRTdGVwcyguLi50aGlzLmJhc2VPcHRpb25zLnBvc3RTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wb3N0U3ludGhDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoQ29tbWFuZHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmVCdWlsZENvbW1hbmQgd3JhcHBlZCB0byBleGVjdXRlIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiB3b3JraW5nRGlyZWN0b3J5IGlzIHNldCwgdGhlIGNvbW1hbmQgaXMgcHJlZml4ZWQgd2l0aCBhIGNkIHRvIHRoZVxuICAgKiByZXBvIHJvb3QgdXNpbmcgZW5naW5lLWFwcHJvcHJpYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgcHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNtZCA9IHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kITtcbiAgICBpZiAoIXRoaXMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmVuZ2luZVR5cGUoKSkge1xuICAgICAgY2FzZSBQaXBlbGluZUVuZ2luZS5HSVRIVUI6XG4gICAgICAgIHJldHVybiBgY2QgJEdJVEhVQl9XT1JLU1BBQ0UgJiYgJHtjbWR9YDtcbiAgICAgIGNhc2UgUGlwZWxpbmVFbmdpbmUuR0lUTEFCOlxuICAgICAgICByZXR1cm4gYChjZCAkQ0lfUFJPSkVDVF9ESVIgJiYgJHtjbWR9KWA7XG4gICAgICBjYXNlIFBpcGVsaW5lRW5naW5lLkJBU0g6XG4gICAgICAgIHJldHVybiBgKGNkIFwiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbClcIiAmJiAke2NtZH0pYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoc3RhZ2VOYW1lPzogc3RyaW5nKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgY29uc3QgZ2xvYmFsUHVibGlzaFJvbGUgPSB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZyA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmRlZmF1bHQhO1xuICAgIGlmIChzdGFnZU5hbWUpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2UgP1xuICAgICAgICAgICh0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlTmFtZV0gPz8gZ2xvYmFsUHVibGlzaFJvbGUpIDpcbiAgICAgICAgICBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlTmFtZV0sXG4gICAgICB9KSk7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZU5hbWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZSkge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBbLi4udGhpcy5iYXNlT3B0aW9ucy5zdGFnZXMsIC4uLnRoaXMuYmFzZU9wdGlvbnMuaW5kZXBlbmRlbnRTdGFnZXMgPz8gW11dO1xuICAgICAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlLm5hbWVdID8/IGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlLm5hbWVdLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZS5uYW1lfWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICByb2xlQXJuOiBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5hc3NldFB1Ymxpc2hpbmcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3B1Ymxpc2g6YXNzZXRzJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZUFzc2VtYmx5VXBsb2FkU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGlmICghdGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGtnTmFtZXNwYWNlIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdmVyc2lvbmVkIGFydGlmYWN0cyAoZS5nLiBtYW51YWwgYXBwcm92YWxzKScpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN0ZXBTZXF1ZW5jZSh0aGlzLnByb2plY3QsIFtcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ2J1bXAnKSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScpLFxuICAgIF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVEZXBsb3lTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucyk6IFBpcGVsaW5lU3RlcCB7XG4gICAgcmV0dXJuIG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXG4gICAgICBuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlcGxveW1lbnQ/LltzdGFnZS5uYW1lXSA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgYGRlcGxveToke3N0YWdlLm5hbWV9YCksXG4gICAgICAuLi5zdGFnZS5wb3N0RGVwbG95U3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZURpZmZTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucywgZmFzdD86IGJvb2xlYW4pOiBQaXBlbGluZVN0ZXAge1xuICAgIHJldHVybiBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW1xuICAgICAgbmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kaWZmPy5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZXBsb3ltZW50Py5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgZmFzdCA/IGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCA6IGBkaWZmOiR7c3RhZ2UubmFtZX1gKSxcbiAgICAgIC4uLnN0YWdlLnBvc3REaWZmU3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5zdGFsbFBhY2thZ2VDb21tYW5kcyhwYWNrYWdlTmFtZTogc3RyaW5nLCBydW5QcmVJbnN0YWxsQ29tbWFuZHM6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb21tYW5kcyA9IHJ1blByZUluc3RhbGxDb21tYW5kcyA/IHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdIDogW107XG5cbiAgICBzd2l0Y2ggKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHlhcm4gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICBjb21tYW5kcy5wdXNoKGBucG0gaW5zdGFsbCAke3BhY2thZ2VOYW1lfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHBucG0gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpbnN0YWxsIHNjcmlwdHMgZm9yIHBhY2thZ2VNYW5hZ2VyOiAnICsgdGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlcik7XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kcztcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVTYWZlU3RhZ2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gUmVtb3ZlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgc3BsaXQgaW50byB3b3Jkc1xuICAgIGNvbnN0IHdvcmRzID0gbmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJykudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG5cbiAgICAvLyBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGFuZCBqb2luIHRoZW1cbiAgICByZXR1cm4gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9KS5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYXBwbGljYXRpb24sIGluY2x1ZGluZyBpbnRlcmZhY2VzIGFuZCBjbGFzc2VzXG4gICAqIG5lY2Vzc2FyeSB0byBzZXQgdXAgdGhlIHBpcGVsaW5lIGFuZCBkZWZpbmUgdGhlIEFXUyBDREsgc3RhY2tzIGZvciBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUFwcGxpY2F0aW9uRW50cnlwb2ludCgpIHtcbiAgICBsZXQgcHJvcHNDb2RlID0gJyc7XG4gICAgbGV0IGFwcENvZGUgPSAnJztcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICBwcm9wc0NvZGUgKz0gYCAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcGVyc29uYWwgc3RhY2suICovXG4gIHByb3ZpZGVQZXJzb25hbFN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBVU0VSIGlzIHNldCBhbmQgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY3JlYXRpbmcgYSBwZXJzb25hbCBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sgJiYgcHJvY2Vzcy5lbnYuVVNFUikge1xuICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gJ3BlcnNvbmFsLScgKyBwcm9jZXNzLmVudi5VU0VSLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sodGhpcywgJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH1wZXJzb25hbCcsIHsgZW52OiB7IGFjY291bnQ6ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9XFwke3N0YWdlTmFtZX1cXGAsIHN0YWdlTmFtZSB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBmZWF0dXJlIHN0YWNrLiAqL1xuICBwcm92aWRlRmVhdHVyZVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBCUkFOQ0ggaXMgc2V0IGFuZCBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIGZlYXR1cmUgc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGVGZWF0dXJlU3RhY2sgJiYgcHJvY2Vzcy5lbnYuQlJBTkNIKSB7XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSAnZmVhdHVyZS0nICsgcHJvY2Vzcy5lbnYuQlJBTkNILnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfWZlYXR1cmUnLCB7IGVudjogeyBhY2NvdW50OiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LmFjY291bnR9JywgcmVnaW9uOiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogXFxgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfVxcJHtzdGFnZU5hbWV9XFxgLCBzdGFnZU5hbWUgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHRoaXMuYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICBjb25zdCBuYW1lVXBwZXJGaXJzdCA9IHRoaXMuY3JlYXRlU2FmZVN0YWdlTmFtZShzdGFnZS5uYW1lKTtcblxuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhICR7c3RhZ2UubmFtZX0gc3RhY2suICovXG4gIHByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgJHtzdGFnZS5uYW1lfSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHsgZW52OiB7IGFjY291bnQ6ICcke3N0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7c3RhZ2UuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9Jywgc3RhZ2VOYW1lOiAnJHtzdGFnZS5uYW1lfScgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mICh0aGlzLmJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgY29uc3QgbmFtZVVwcGVyRmlyc3QgPSB0aGlzLmNyZWF0ZVNhZmVTdGFnZU5hbWUoc3RhZ2UubmFtZSk7XG5cbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSAke3N0YWdlLm5hbWV9IHN0YWNrLiAqL1xuICBwcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjazogKGFwcDogQXBwLCBzdGFja0lkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZUFwcFN0YWNrUHJvcHMpID0+IFN0YWNrO1xuYDtcbiAgICAgIGFwcENvZGUgKz0gYCAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhICR7c3RhZ2UubmFtZX0gc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKSB7XG4gICAgICBwcm9wcy5wcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2UubmFtZX0nLCB7IGVudjogeyBhY2NvdW50OiAnJHtzdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3N0YWdlLmVudi5yZWdpb259JyB9LCBzdGFja05hbWU6ICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHN0YWdlTmFtZTogJyR7c3RhZ2UubmFtZX0nIH0pO1xuICAgIH1cbmA7XG4gICAgfVxuXG4gICAgLy8gQWRkIHZlcnNpb25pbmcgbG9naWMgdG8gYXBwbHkgdG8gYWxsIHN0YWNrc1xuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIGFwcENvZGUgKz0gdGhpcy5nZW5lcmF0ZVZlcnNpb25pbmdBcHBDb2RlKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwRmlsZSA9IG5ldyBUZXh0RmlsZSh0aGlzLnByb2plY3QsIGAke3RoaXMuYXBwLnNyY2Rpcn0vYXBwLnRzYCk7XG5cbiAgICAvLyBHZW5lcmF0ZSB2ZXJzaW9uaW5nLWF3YXJlIGltcG9ydHMgYW5kIHV0aWxpdGllc1xuICAgIGNvbnN0IHZlcnNpb25pbmdJbXBvcnRzID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IHRoaXMuZ2VuZXJhdGVWZXJzaW9uaW5nSW1wb3J0cygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ1V0aWxpdGllcyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZFxuICAgICAgPyB0aGlzLmdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9uID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IGBcbmNvbnN0IHZlcnNpb25pbmdDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZywgbnVsbCwgMil9O1xuYFxuICAgICAgOiAnJztcblxuICAgIGFwcEZpbGUuYWRkTGluZShgLy8gJHtQUk9KRU5fTUFSS0VSfVxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFwcCwgQXBwUHJvcHMsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuJHt2ZXJzaW9uaW5nSW1wb3J0c31cbiR7dmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9ufVxuJHt2ZXJzaW9uaW5nVXRpbGl0aWVzfVxuXG4vKipcbiAqIFBpcGVsaW5lQXBwUHJvcHMgaXMgYW4gZXh0ZW5zaW9uIG9mIEFwcFByb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBvcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBBV1MgU3RhY2tzIGZvciBkaWZmZXJlbnQgc3RhZ2VzLlxuICpcbiAqIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gaW5zdGFudGlhdGUgeW91ciBhcHBsaWNhdGlvbiBzdGFja3Mgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3JcbiAqIGVhY2ggc3RhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFByb3BzIGV4dGVuZHMgQXBwUHJvcHMge1xuJHtwcm9wc0NvZGV9XG59XG5cbi8qKlxuICogUGlwZWxpbmVBcHBTdGFja1Byb3BzIGlzIGFuIGV4dGVuc2lvbiBvZiBTdGFja1Byb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIHN0YWdlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBQaXBlbGluZUFwcCBjbGFzcyBleHRlbmRzIHRoZSBBcHAgY2xhc3MgZnJvbSBBV1MgQ0RLIGFuZCBvdmVycmlkZXMgdGhlIGNvbnN0cnVjdG9yIHRvIHN1cHBvcnRcbiAqIGRpZmZlcmVudCBzdGFnZXMgb2YgdGhlIGFwcGxpY2F0aW9uIChkZXZlbG9wbWVudCwgcHJvZHVjdGlvbiwgcGVyc29uYWwsIGZlYXR1cmUpIGJ5IGludm9raW5nIHRoZSBwcm92aWRlZFxuICogc3RhY2stcHJvdmlkaW5nIGZ1bmN0aW9ucyBmcm9tIHRoZSBwcm9wcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lQXBwIGV4dGVuZHMgQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFBpcGVsaW5lQXBwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiR7YXBwQ29kZX1cblxuICB9XG59XG5gKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgdG8gcHVibGlzaCBDREsgYXNzZXRzIHRvIGFsbCBhY2NvdW50cyBhbmQgaGFuZGxlIHZlcnNpb25pbmcsIGluY2x1ZGluZyBidW1waW5nIHRoZSB2ZXJzaW9uXG4gICAqIGJhc2VkIG9uIHRoZSBsYXRlc3QgZ2l0IHRhZyBhbmQgcHVzaGluZyB0aGUgQ0RLIGFzc2VtYmx5IHRvIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVsZWFzZVRhc2tzKCkge1xuICAgIGNvbnN0IHN0YWdlcyA9IFsuLi50aGlzLmJhc2VPcHRpb25zLnN0YWdlcywgLi4udGhpcy5iYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXV07XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICAvLyBUYXNrIHRvIHB1Ymxpc2ggdGhlIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgICBzdGVwczogW3tcbiAgICAgICAgICBleGVjOiBgbnB4IGNkay1hc3NldHMgLXAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS8ke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfS5hc3NldHMuanNvbiBwdWJsaXNoYCxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3B1Ymxpc2g6YXNzZXRzJywge1xuICAgICAgc3RlcHM6IHN0YWdlcy5tYXAoc3RhZ2UgPT4gKHtcbiAgICAgICAgc3Bhd246IGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2J1bXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQnVtcHMgdmVyc2lvbiBiYXNlZCBvbiBsYXRlc3QgZ2l0IHRhZycsXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ3BpcGVsaW5lcy1yZWxlYXNlIGJ1bXAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ2dpdCBwdXNoIC0tdGFncycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScsIHtcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiBgcGlwZWxpbmVzLXJlbGVhc2UgY3JlYXRlLW1hbmlmZXN0IFwiJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fVwiICBcIiR7dGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2V9XCJgLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3dkOiB0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0LFxuICAgICAgICAgICAgZXhlYzogJ25wbSB2ZXJzaW9uIC0tbm8tZ2l0LXRhZy12ZXJzaW9uIGZyb20tZ2l0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGN3ZDogdGhpcy5hcHAuY2RrQ29uZmlnLmNka291dCxcbiAgICAgICAgICAgIGV4ZWM6ICducG0gcHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBwZXJzb25hbCBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgd2F0Y2hpbmcgZm9yIGNoYW5nZXMsXG4gICAqIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKSwgYW5kIGRlc3Ryb3lpbmcgdGhlIHN0YWNrIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVQZXJzb25hbFN0YWdlKCkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybigncGVyc29uYWwnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtcGVyc29uYWwuanNvbiAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnd2F0Y2g6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1wZXJzb25hbC5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdmYXN0ZGlmZjpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVzdHJveTpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRhc2tzIGZvciB0aGUgZmVhdHVyZSBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLFxuICAgKiBhbmQgZGVzdHJveWluZyB0aGUgc3RhY2sgd2hlbiBubyBsb25nZXIgbmVlZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUZlYXR1cmVTdGFnZSgpIHtcbiAgICBjb25zdCBzdGFja0lkID0gdGhpcy5nZXRDbGlTdGFja1BhdHRlcm4oJ2ZlYXR1cmUnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLWZlYXR1cmUuanNvbiAtLXByb2dyZXNzIGV2ZW50cyAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXIgZGVwbG95ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Zhc3RkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Rlc3Ryb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAtLWZvcmNlICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtZmVhdHVyZS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBnZW5lcmFsIHBpcGVsaW5lIHN0YWdlcyAoZGV2LCBwcm9kKSwgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtEZXBsb3lTdGFnZU9wdGlvbnN9IHN0YWdlIC0gVGhlIHN0YWdlIHRvIGNyZWF0ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2U6IERlcGxveW1lbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBpbmRlcGVuZGVudCBzdGFnZXMgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtOYW1lZFN0YWdlT3B0aW9uc30gc3RhZ2UgLSBUaGUgc3RhZ2UgdG8gY3JlYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZTogSW5kZXBlbmRlbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENsaVN0YWNrUGF0dGVybihzdGFnZTogc3RyaW5nKSB7XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlT3B0aW9ucy5kZXBsb3lTdWJTdGFja3MgPyBgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2V9ICR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlfS8qYCA6IGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB2ZXJzaW9uOmZldGNoOjxzdGFnZT4gdGFzayB0byBmZXRjaCB2ZXJzaW9uIGRhdGEgZnJvbSBkZXBsb3llZCBzdGFja1xuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVZlcnNpb25GZXRjaFRhc2soc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gYCR7dGhpcy5zdGFja1ByZWZpeH0ke3RoaXMuc3RhY2tQcmVmaXggPyAnLScgOiAnJ30ke3N0YWdlLm5hbWV9YDtcbiAgICBjb25zdCBzdGFnZUNvbmZpZyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uc3RhZ2VPdmVycmlkZXM/LltzdGFnZS5uYW1lXSB8fCB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc7XG5cbiAgICBpZiAoIXN0YWdlQ29uZmlnPy5vdXRwdXRzKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEZldGNoIGZyb20gQ2xvdWRGb3JtYXRpb24gb3V0cHV0c1xuICAgIGlmIChzdGFnZUNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5lbmFibGVkKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICBgZWNobyBcIkZldGNoaW5nIHZlcnNpb24gZGF0YSBmcm9tIENsb3VkRm9ybWF0aW9uIG91dHB1dHMgZm9yICR7c3RhZ2UubmFtZX0uLi5cImAsXG4gICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2tzIC0tc3RhY2stbmFtZSAke3N0YWNrTmFtZX0gLS1yZWdpb24gJHtzdGFnZS5lbnYucmVnaW9ufSAtLXF1ZXJ5IFwiU3RhY2tzWzBdLk91dHB1dHNbP3N0YXJ0c193aXRoKE91dHB1dEtleSwgJ0FwcFZlcnNpb24nKV0ue0tleTpPdXRwdXRLZXksVmFsdWU6T3V0cHV0VmFsdWV9XCIgLS1vdXRwdXQgdGFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCBmcm9tIFNTTSBQYXJhbWV0ZXIgU3RvcmVcbiAgICBpZiAoc3RhZ2VDb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZW5hYmxlZCkge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZS5uYW1lKTtcblxuICAgICAgaWYgKChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlIGFzIGFueSk/LmhpZXJhcmNoaWNhbCkge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSAoaGllcmFyY2hpY2FsKSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVycy1ieS1wYXRoIC0tcGF0aCBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcmVjdXJzaXZlIC0tcXVlcnkgXCJQYXJhbWV0ZXJzW10ue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVyIC0tbmFtZSBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcXVlcnkgXCJQYXJhbWV0ZXIue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGB2ZXJzaW9uOmZldGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRmV0Y2ggdmVyc2lvbiBkYXRhIGZyb20gZGVwbG95ZWQgJHtzdGFnZS5uYW1lfSBzdGFja2AsXG4gICAgICAgIGV4ZWM6IGNvbW1hbmRzLmpvaW4oJyAmJiAnKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDREsgYXBwbGljYXRpb24gY29kZSBmb3IgdmVyc2lvbmluZ1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0FwcENvZGUoY29uZmlnOiBWZXJzaW9uaW5nQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxuICAgIC8vIEFwcGx5IHZlcnNpb25pbmcgdG8gYWxsIHN0YWNrc1xuICAgIHRoaXMubm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3RhY2spIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gY2hpbGQuc3RhY2tOYW1lLnNwbGl0KCctJykucG9wKCkgfHwgJ2RlZmF1bHQnO1xuICAgICAgICBhZGRWZXJzaW9uaW5nVG9TdGFjayhjaGlsZCwgc3RhZ2VOYW1lLCAke2NvbmZpZy5zdGFnZU92ZXJyaWRlcyA/ICd2ZXJzaW9uaW5nQ29uZmlnLnN0YWdlT3ZlcnJpZGVzJyA6ICd1bmRlZmluZWQnfSk7XG4gICAgICB9XG4gICAgfSk7YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB2ZXJzaW9uaW5nIGltcG9ydHMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0ltcG9ydHMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcIik7XG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1wiKTtcblxuICAgIHJldHVybiBpbXBvcnRzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHZlcnNpb25pbmcgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXG4vKipcbiAqIFZlcnNpb24gaW5mb3JtYXRpb24gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbkluZm8ge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbW1pdEhhc2g6IHN0cmluZztcbiAgY29tbWl0SGFzaFNob3J0OiBzdHJpbmc7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBjb21taXRDb3VudDogbnVtYmVyO1xuICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nO1xuICBkZXBsb3llZEF0OiBzdHJpbmc7XG4gIGRlcGxveWVkQnk6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBMb2FkIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBnZW5lcmF0ZWQgZmlsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFZlcnNpb25JbmZvKCk6IFZlcnNpb25JbmZvIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoJ352ZXJzaW9uLmpzb24nLCAndXRmOCcpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBsb2FkIHZlcnNpb24gaW5mbywgdXNpbmcgZmFsbGJhY2snKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgIGNvbW1pdEhhc2g6ICd1bmtub3duJyxcbiAgICAgIGNvbW1pdEhhc2hTaG9ydDogJ3Vua25vd24nLFxuICAgICAgYnJhbmNoOiAndW5rbm93bicsXG4gICAgICBjb21taXRDb3VudDogMCxcbiAgICAgIHBhY2thZ2VWZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgZGVwbG95ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgZGVwbG95ZWRCeTogJ3Vua25vd24nLFxuICAgICAgZW52aXJvbm1lbnQ6ICd1bmtub3duJ1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdmVyc2lvbmluZyBjb25maWd1cmF0aW9uIGZvciBhIHNwZWNpZmljIHN0YWdlXG4gKi9cbmZ1bmN0aW9uIGdldFN0YWdlQ29uZmlnKHN0YWdlTmFtZTogc3RyaW5nLCBiYXNlQ29uZmlnOiBhbnksIHN0YWdlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYW55Pik6IGFueSB7XG4gIGlmICghc3RhZ2VPdmVycmlkZXMgfHwgIXN0YWdlT3ZlcnJpZGVzW3N0YWdlTmFtZV0pIHtcbiAgICByZXR1cm4gYmFzZUNvbmZpZztcbiAgfVxuICBcbiAgLy8gTWVyZ2Ugc3RhZ2Ugb3ZlcnJpZGUgd2l0aCBiYXNlIGNvbmZpZ1xuICBjb25zdCBvdmVycmlkZSA9IHN0YWdlT3ZlcnJpZGVzW3N0YWdlTmFtZV07XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbmZpZyxcbiAgICBvdXRwdXRzOiB7XG4gICAgICBjbG91ZEZvcm1hdGlvbjogb3ZlcnJpZGUub3V0cHV0cz8uY2xvdWRGb3JtYXRpb24gfHwgYmFzZUNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLFxuICAgICAgcGFyYW1ldGVyU3RvcmU6IG92ZXJyaWRlLm91dHB1dHM/LnBhcmFtZXRlclN0b3JlIHx8IGJhc2VDb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZSxcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQWRkIHZlcnNpb25pbmcgb3V0cHV0cyB0byBhIHN0YWNrXG4gKi9cbmZ1bmN0aW9uIGFkZFZlcnNpb25pbmdUb1N0YWNrKHN0YWNrOiBTdGFjaywgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlT3ZlcnJpZGVzPzogYW55KTogdm9pZCB7XG4gIGNvbnN0IHZlcnNpb25JbmZvID0gbG9hZFZlcnNpb25JbmZvKCk7XG4gIGNvbnN0IGJhc2VDb25maWcgPSB2ZXJzaW9uaW5nQ29uZmlnO1xuICBjb25zdCBjb25maWcgPSBnZXRTdGFnZUNvbmZpZyhzdGFnZU5hbWUsIGJhc2VDb25maWcsIHN0YWdlT3ZlcnJpZGVzKTtcbiAgXG4gIC8vIENoZWNrIGlmIGZvcm1hdCBpcyBzcGVjaWZpZWQgaW4gQ2xvdWRGb3JtYXRpb24gb3IgUGFyYW1ldGVyU3RvcmUgY29uZmlnc1xuICBjb25zdCBjZkZvcm1hdCA9IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5mb3JtYXQgfHwgJ3N0cnVjdHVyZWQnO1xuICBjb25zdCBzc21Gb3JtYXQgPSBjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZm9ybWF0IHx8ICdzdHJ1Y3R1cmVkJztcbiAgXG4gIC8vIEFkZCBDbG91ZEZvcm1hdGlvbiBvdXRwdXRzXG4gIGlmIChjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbj8uZW5hYmxlZCkge1xuICAgIGlmIChjZkZvcm1hdCA9PT0gJ3BsYWluJykge1xuICAgICAgLy8gUGxhaW4gZm9ybWF0IC0gc2luZ2xlIG91dHB1dCB3aXRoIHZlcnNpb24gc3RyaW5nXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbicsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLnZlcnNpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gdmVyc2lvbicsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RydWN0dXJlZCBmb3JtYXQgLSBtdWx0aXBsZSBvdXRwdXRzXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbicsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLnZlcnNpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gdmVyc2lvbicsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb25Db21taXRIYXNoJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8uY29tbWl0SGFzaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgY29tbWl0IGhhc2gnLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lID8gXFxgXFwke2NvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWV9Q29tbWl0SGFzaFxcYCA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbkJyYW5jaCcsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLmJyYW5jaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgYnJhbmNoJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSA/IFxcYFxcJHtjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lfUJyYW5jaFxcYCA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbkluZm8nLCB7XG4gICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2ZXJzaW9uSW5mbyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ29tcGxldGUgdmVyc2lvbiBpbmZvcm1hdGlvbicsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUgPyBcXGBcXCR7Y29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZX1JbmZvXFxgIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICAvLyBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXJzXG4gIGlmIChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZW5hYmxlZCkge1xuICAgIGlmIChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZS5oaWVyYXJjaGljYWwpIHtcbiAgICAgIC8vIEhpZXJhcmNoaWNhbCBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCBiYXNlUGFyYW1ldGVyTmFtZSA9IChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZS5wYXJhbWV0ZXJOYW1lIHx8ICcve3N0YWNrTmFtZX0vdmVyc2lvbicpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhY2tOYW1lfScsIHN0YWNrLnN0YWNrTmFtZSlcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFnZU5hbWV9Jywgc3RhZ2VOYW1lKTtcbiAgICAgICAgXG4gICAgICAvLyBDcmVhdGUgaGllcmFyY2hpY2FsIHBhcmFtZXRlcnNcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyVmVyc2lvbicsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS92ZXJzaW9uXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogdmVyc2lvbkluZm8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlckNvbW1pdEhhc2gnLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vY29tbWl0SGFzaFxcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHZlcnNpb25JbmZvLmNvbW1pdEhhc2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGNvbW1pdCBoYXNoJyxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlckJyYW5jaCcsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS9icmFuY2hcXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiB2ZXJzaW9uSW5mby5icmFuY2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGJyYW5jaCcsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJJbmZvJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L2luZm9cXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiBKU09OLnN0cmluZ2lmeSh2ZXJzaW9uSW5mbyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ29tcGxldGUgdmVyc2lvbiBpbmZvcm1hdGlvbicsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlclxuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IChjb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZS5wYXJhbWV0ZXJOYW1lIHx8ICcve3N0YWNrTmFtZX0vdmVyc2lvbicpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhY2tOYW1lfScsIHN0YWNrLnN0YWNrTmFtZSlcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFnZU5hbWV9Jywgc3RhZ2VOYW1lKTtcbiAgICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlcicsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHNzbUZvcm1hdCA9PT0gJ3BsYWluJyA/IHZlcnNpb25JbmZvLnZlcnNpb24gOiBKU09OLnN0cmluZ2lmeSh2ZXJzaW9uSW5mbyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzc21Gb3JtYXQgPT09ICdwbGFpbicgPyAnQXBwbGljYXRpb24gdmVyc2lvbicgOiAnQ29tcGxldGUgdmVyc2lvbiBpbmZvcm1hdGlvbicsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1gO1xuICB9XG59XG4iXX0=
|
|
766
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLG1DQUFxRDtBQUNyRCw4Q0FBa0Q7QUFDbEQsc0RBQTJEO0FBQzNELHNDQUEyQztBQUMzQyxvQ0FBZ0o7QUFDaEosOENBQWtFO0FBdUJsRSxNQUFNO0FBQ04seURBQXlEO0FBQ3pELE1BQU07QUFDTiwrQkFBK0I7QUFDL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQUMzQiw0RUFBNEU7QUFDNUUseUJBQXlCO0FBQ3pCLElBQUk7QUFFSixJQUFZLFdBT1g7QUFQRCxXQUFZLFdBQVc7SUFDckIsNEJBQTRCO0lBQzVCLDZDQUFJLENBQUE7SUFDSixvREFBb0Q7SUFDcEQsNkNBQUksQ0FBQTtJQUNKLHVEQUF1RDtJQUN2RCw2Q0FBSSxDQUFBO0FBQ04sQ0FBQyxFQVBXLFdBQVcsMkJBQVgsV0FBVyxRQU90QjtBQXNNRDs7O0dBR0c7QUFDSCxNQUFzQixXQUFZLFNBQVEsa0JBQVM7SUFhM0I7SUFBMkM7O0lBWmpELFdBQVcsQ0FBUztJQUNwQixVQUFVLENBQVM7SUFFbkMsNEdBQTRHO0lBQ3pGLFVBQVUsQ0FBUztJQUV0Qzs7O09BR0c7SUFDZ0IsZ0JBQWdCLENBQXFCO0lBRXhELFlBQXNCLEdBQStCLEVBQVksV0FBK0I7UUFDOUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRFMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFHOUYsaURBQWlEO1FBQ2pELElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFH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QUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLDJCQUEyQjtRQUNoQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUpULENBQUM7SUFDRCxDQUFDOztBQWp3Qkgsa0NBa3dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIFRleHRGaWxlLCBhd3NjZGsgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgUFJPSkVOX01BUktFUiB9IGZyb20gJ3Byb2plbi9saWIvY29tbW9uJztcbmltcG9ydCB7IE5vZGVQYWNrYWdlTWFuYWdlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBBd3NBc3N1bWVSb2xlU3RlcCwgUGlwZWxpbmVTdGVwLCBQcm9qZW5TY3JpcHRTdGVwLCBTaW1wbGVDb21tYW5kU3RlcCwgU3RlcFNlcXVlbmNlLCBQbnBtU2V0dXBTdGVwLCBDb3JlcGFja1NldHVwU3RlcCB9IGZyb20gJy4uL3N0ZXBzJztcbmltcG9ydCB7IFZlcnNpb25pbmdDb25maWcsIFZlcnNpb25pbmdTZXR1cCB9IGZyb20gJy4uL3ZlcnNpb25pbmcnO1xuXG4vKipcbiAqIFRoZSBFbnZpcm9ubWVudCBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gaG9sZCBBV1MgcmVsYXRlZCBpbmZvcm1hdGlvblxuICogZm9yIGEgc3BlY2lmaWMgZGVwbG95bWVudCBlbnZpcm9ubWVudCB3aXRoaW4geW91ciBpbmZyYXN0cnVjdHVyZS5cbiAqIEVhY2ggZW52aXJvbm1lbnQgcmVxdWlyZXMgYSBzcGVjaWZpYyBhY2NvdW50IGFuZCByZWdpb24gZm9yIGl0cyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnQge1xuICAvKipcbiAgICogVGhlIEFXUyBBY2NvdW50IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQuIEl0J3MgaW1wb3J0YW50IGJlY2F1c2VcbiAgICogZGlmZmVyZW50IHNlcnZpY2VzIG9yIGZlYXR1cmVzIGNvdWxkIGhhdmUgZGlzdGluY3QgcGVybWlzc2lvbnMgYW5kIHNldHRpbmdzXG4gICAqIGluIGRpZmZlcmVudCBhY2NvdW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBSZWdpb24gZm9yIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBkZXRlcm1pbmVzIHdoZXJlIHlvdXIgcmVzb3VyY2VzXG4gICAqIGFyZSBjcmVhdGVkIGFuZCB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgcnVuLiBJdCBjYW4gYWZmZWN0IGxhdGVuY3ksXG4gICAqIGF2YWlsYWJpbGl0eSwgYW5kIHByaWNpbmcuXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbn1cblxuLy8gLyoqXG4vLyAgKiBEZXNjcmliZXMgdGhlIHR5cGUgb2YgcGlwZWxpbmUgdGhhdCB3aWxsIGJlIGNyZWF0ZWRcbi8vICAqL1xuLy8gZXhwb3J0IGVudW0gRGVwbG95bWVudFR5cGUge1xuLy8gICAvKiogRGVwbG95IGV2ZXJ5IGNvbW1pdCBhcyBmYXIgYXMgcG9zc2libGU7IGhvcGVmdWxseSBpbnRvIHByb2R1Y3Rpb24gKi9cbi8vICAgQ09OVElOVU9VU19ERVBMT1lNRU5ULFxuLy8gICAvKiogQnVpbGQgZXZlcnkgY29tbWl0IGFuZCBwcmVwYXJlIGFsbCBhc3NldHMgZm9yIGEgbGF0ZXIgZGVwbG95bWVudCAqL1xuLy8gICBDT05USU5VT1VTX0RFTElWRVJZLFxuLy8gfVxuXG5leHBvcnQgZW51bSBDZGtEaWZmVHlwZSB7XG4gIC8qKiBEbyBub3QgcGVyZm9ybSBhIGRpZmYgKi9cbiAgTk9ORSxcbiAgLyoqIFBlcmZvcm0gYSBmYXN0IHRlbXBsYXRlIGRpZmYgKC0tbm8tY2hhbmdlc2V0KSAqL1xuICBGQVNULFxuICAvKiogUGVyZm9ybSBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gZGlmZiAoLS1jaGFuZ2VzZXQpICovXG4gIEZVTEwsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHBpcGVsaW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWdlIGV4dGVuZHMgTmFtZWRTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBtYW51YWxBcHByb3ZhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwaXBlbGluZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGVwZW5kZW50U3RhZ2UgZXh0ZW5kcyBOYW1lZFN0YWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzdGFnZSBzaG91bGQgYmUgZGVwbG95ZWQgb24gcHVzaFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T25QdXNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSB3aXRoIGEgbmFtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVkU3RhZ2VPcHRpb25zIGV4dGVuZHMgU3RhZ2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgR2l0SHViIGVudmlyb25tZW50IHRvIHVzZSBmb3IgdGhpcyBzdGFnZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHN0YWdlIG5hbWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBHaXRIdWIgZW52aXJvbm1lbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgc3RhZ2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgd2F0Y2hhYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGlmZlR5cGU/OiBDZGtEaWZmVHlwZTtcbiAgcmVhZG9ubHkgcG9zdERpZmZTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwb3N0RGVwbG95U3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSBsaWtlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBJQU0gcm9sZXMgdXNlZCBpbiB0aGUgQ0RLIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElhbVJvbGVDb25maWcge1xuICAvKiogRGVmYXVsdCBJQU0gcm9sZSBBUk4gdXNlZCBpZiBubyBzcGVjaWZpYyByb2xlIGlzIHByb3ZpZGVkLiAqL1xuICByZWFkb25seSBkZWZhdWx0Pzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgc3ludGhlc2lzIHN0ZXAuICovXG4gIHJlYWRvbmx5IHN5bnRoPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgYXNzZXQgcHVibGlzaGluZyBzdGVwLiAqL1xuICByZWFkb25seSBhc3NldFB1Ymxpc2hpbmc/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBhc3NldCBwdWJsaXNoaW5nIHN0ZXAgZm9yIGEgc3BlY2lmaWMgc3RhZ2UuICovXG4gIHJlYWRvbmx5IGFzc2V0UHVibGlzaGluZ1BlclN0YWdlPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRpZmYgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkaWZmPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkZXBsb3ltZW50PzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgICogSUFNIHJvbGUgQVJOcyBmb3IgdXNpbmcgYSBcImp1bXBcIiByb2xlIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUgaW4gYSBkaWZmZXJlbnQgQVdTIGFjY291bnQgdXNpbmcgUm9sZSBDaGFpbmluZy5cbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHM/dGFiPXJlYWRtZS1vdi1maWxlI2Fzc3VtZXJvbGUtd2l0aC1yb2xlLXByZXZpb3VzbHktYXNzdW1lZC1ieS1hY3Rpb24taW4tc2FtZS13b3JrZmxvd1xuICAgKiAqL1xuICByZWFkb25seSBqdW1wPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBDREtQaXBlbGluZU9wdGlvbnMgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBmb3IgYSBDREsgKENsb3VkIERldmVsb3BtZW50IEtpdCkgcGlwZWxpbmUuIEl0IGFsbG93cyB0aGUgZGVmaW5pdGlvblxuICogb2Ygc2V0dGluZ3Mgc3VjaCBhcyB0aGUgc3RhY2sgcHJlZml4IGFuZCBwYWNrYWdlIG5hbWVzcGFjZSB0byBiZSB1c2VkIGluIHRoZVxuICogQVdTIHN0YWNrLCBhbG9uZyB3aXRoIHRoZSBlbnZpcm9ubWVudHMgY29uZmlndXJhdGlvbiB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENES1BpcGVsaW5lT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUsIHVzZWQgYXMgYSBwcmVmaXggZm9yIHdvcmtmbG93IGZpbGVzLFxuICAgKiBjb25jdXJyZW5jeSBncm91cHMsIGFuZCBhcnRpZmFjdCBuYW1lcyB0byBwcmV2ZW50IGNvbGxpc2lvbnMgaW4gbW9ub3JlcG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0IG5hbWUgaWYgdGhlIHByb2plY3QgaGFzIGEgcGFyZW50IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgb3RoZXJ3aXNlIG5vIHByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIGRlcGxveSBmcm9tXG4gICAqIEBkZWZhdWx0IG1haW5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aCBwYXR0ZXJucyB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBwaXBlbGluZSB3aGVuIGNoYW5nZWQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBtb25vcmVwb3Mgd2hlcmUgeW91IG9ubHkgd2FudCB0byBydW4gdGhlIHBpcGVsaW5lXG4gICAqIHdoZW4gZmlsZXMgaW4gYSBzcGVjaWZpYyBzdWJwcm9qZWN0IGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogRm9yIEdpdEh1YiwgdGhlc2UgYXJlIHVzZWQgYXMgYG9uLnB1c2gucGF0aHNgIGFuZCBgb24ucHVsbF9yZXF1ZXN0LnBhdGhzYCBmaWx0ZXJzLlxuICAgKiBGb3IgR2l0TGFiLCB0aGVzZSBhcmUgdXNlZCBhcyBgb25seS5jaGFuZ2VzYCBmaWx0ZXJzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbJ3BhY2thZ2VzL215LWFwcC8qKicsICdzaGFyZWQtbGlicy8qKiddXG4gICAqIEBkZWZhdWx0IC0gYWxsIHBhdGhzIHRyaWdnZXIgdGhlIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZGVmaW5lIGEgcHJlZml4IGZvciB0aGUgQVdTIFN0YWNrIHJlc291cmNlcyBjcmVhdGVkXG4gICAqIGR1cmluZyB0aGUgcGlwZWxpbmUncyBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHByb2plY3QgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlIGFsbCBDREsgYWN0aW9ucyB3aWxsIGFsc28gaW5jbHVkZSA8c3RhY2tOYW1lPi8qIHRvIGRlcGxveS9kaWZmL2Rlc3Ryb3kgc3ViIHN0YWNrcyBvZiB0aGUgbWFpbiBzdGFjay5cbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBkZXBsb3kgQ0RrIGFwcGxpY2F0aW9ucyBjb250YWluaW5nIG11bHRpcGxlIHN0YWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveVN1YlN0YWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgZGV0ZXJtaW5lcyB0aGUgTlBNIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gcGFja2FnaW5nIENESyBjbG91ZFxuICAgKiBhc3NlbWJsaWVzLiBBIG5hbWVzcGFjZSBoZWxwcyBncm91cCByZWxhdGVkIHJlc291cmNlcyB0b2dldGhlciwgcHJvdmlkaW5nXG4gICAqIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGVhc2Ugb2YgbWFuYWdlbWVudC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB5b3UgbmVlZCB0byB2ZXJzaW9uIGFuZCB1cGxvYWQgdGhlIGNsb3VkIGFzc2VtYmx5IHRvIGEgcGFja2FnZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBwa2dOYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqIElBTSBjb25maWcgKi9cbiAgcmVhZG9ubHkgaWFtUm9sZUFybnM6IElhbVJvbGVDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIGEgbGlzdCBvZiBzdGFnZXMgdGhhdCBzaG91bGQgYmUgZGVwbG95ZWQgdXNpbmcgYSBDSS9DRCBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VzOiBEZXBsb3ltZW50U3RhZ2VbXTtcblxuICAvKiogVGhpcyBzcGVjaWZpZXMgZGV0YWlscyBmb3IgaW5kZXBlbmRlbnQgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGluZGVwZW5kZW50U3RhZ2VzPzogSW5kZXBlbmRlbnRTdGFnZVtdO1xuXG4gIC8qKiBUaGlzIHNwZWNpZmllcyBkZXRhaWxzIGZvciBhIHBlcnNvbmFsIHN0YWdlICovXG4gIHJlYWRvbmx5IHBlcnNvbmFsU3RhZ2U/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLyoqIFRoaXMgc3BlY2lmaWVzIGRldGFpbHMgZm9yIGZlYXR1cmUgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGZlYXR1cmVTdGFnZXM/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHBpcGVsaW5lIHRvIGNyZWF0ZS4gSWYgc2V0IHRvIENPTlRJTlVPVVNfREVQTE9ZTUVOVCxcbiAgLy8gICogZXZlcnkgY29tbWl0IGlzIGRlcGxveWVkIGFzIGZhciBhcyBwb3NzaWJsZSwgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbi4gSWYgc2V0IHRvXG4gIC8vICAqIENPTlRJTlVPVVNfREVMSVZFUlksIGV2ZXJ5IGNvbW1pdCBpcyBidWlsdCBhbmQgYWxsIGFzc2V0cyBhcmUgcHJlcGFyZWQgZm9yIGEgbGF0ZXIgZGVwbG95bWVudC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgQ09OVElOVU9VU19ERUxJVkVSWVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgZGVwbG95bWVudFR5cGU/OiBEZXBsb3ltZW50VHlwZTtcblxuICByZWFkb25seSBwcmVJbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlU3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBwb3N0U3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIHJlYWRvbmx5IHByZUluc3RhbGxTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwcmVTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHBvc3RTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHBpcGVsaW5lIHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBjb21wdXRlZCBmb3Igc3VicHJvamVjdHMgYnV0IGNhbiBiZSBleHBsaWNpdGx5IHNldC5cbiAgICpcbiAgICogV2hlbiBzZXQsIENJIGpvYnMgd2lsbCBydW4gY29tbWFuZHMgaW4gdGhpcyBkaXJlY3RvcnksIGFuZCBhcnRpZmFjdCBwYXRoc1xuICAgKiB3aWxsIGJlIHByZWZpeGVkIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQgZnJvbSB0aGUgcHJvamVjdCdzIHBvc2l0aW9uIGluIHRoZSBtb25vcmVwbyAoZW1wdHkgc3RyaW5nIGZvciByb290IHByb2plY3RzKVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb21tYW5kIHRvIHJ1biBiZWZvcmUgdGhlIGJ1aWxkIHN0ZXAsIGV4ZWN1dGVkIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiBhIHdvcmtpbmdEaXJlY3RvcnkgaXMgc2V0IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgdGhlIGNvbW1hbmQgaXNcbiAgICogYXV0b21hdGljYWxseSB3cmFwcGVkIHRvIGV4ZWN1dGUgZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHJlZ2FyZGxlc3Mgb2ZcbiAgICogdGhlIGpvYidzIHdvcmtpbmcgZGlyZWN0b3J5IHNldHRpbmcuXG4gICAqXG4gICAqIEZvciBwbnBtIHdvcmtzcGFjZXM6IGBwbnBtIC1yIC0tZmlsdGVyIDxhcHBuYW1lPl4uLi4gcnVuIGJ1aWxkYFxuICAgKiBGb3IgbnBtIHdvcmtzcGFjZXM6IGBucG0gcnVuIGJ1aWxkIC0td29ya3NwYWNlcyAtLWlmLXByZXNlbnRgXG4gICAqIEZvciB5YXJuIHdvcmtzcGFjZXM6IGB5YXJuIHdvcmtzcGFjZXMgZm9yZWFjaCAtUnQgcnVuIGJ1aWxkYFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByZS1idWlsZCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBwcmVCdWlsZENvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb25pbmcgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbmluZz86IFZlcnNpb25pbmdDb25maWc7XG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lIGNsYXNzIGV4dGVuZHMgdGhlIENvbXBvbmVudCBjbGFzcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIGRlcGxveWluZyBBV1MgQ0RLIChDbG91ZCBEZXZlbG9wbWVudCBLaXQpIGFwcGxpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgc3RhZ2VzLlxuICogSXQgYWxzbyBtYW5hZ2VzIHRhc2tzIHN1Y2ggYXMgcHVibGlzaGluZyBDREsgYXNzZXRzLCBidW1waW5nIHZlcnNpb24gYmFzZWQgb24gZ2l0IHRhZ3MsIGFuZCBjbGVhbmluZyB1cCBjb25mbGljdGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENES1BpcGVsaW5lIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrUHJlZml4OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBicmFuY2hOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFByZWZpeCBmb3Igd29ya2Zsb3cgZmlsZXMsIGNvbmN1cnJlbmN5IGdyb3VwcywgYW5kIGFydGlmYWN0IG5hbWVzIHRvIHByZXZlbnQgY29sbGlzaW9ucyBpbiBtb25vcmVwb3MuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBuYW1lUHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290IGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBVbmRlZmluZWQgd2hlbiB0aGUgcGlwZWxpbmUgaXMgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByb3RlY3RlZCBiYXNlT3B0aW9uczogQ0RLUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgc3VwZXIoYXBwKTtcblxuICAgIC8vIENvbXB1dGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIG1vbm9yZXBvIHN1cHBvcnRcbiAgICBpZiAoYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVsID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFwcC5yb290Lm91dGRpciwgdGhpcy5hcHAub3V0ZGlyKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSByZWwgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZXZlbG9wbWVudCBkZXBlbmRlbmNpZXNcbiAgICB0aGlzLmFwcC5hZGREZXZEZXBzKFxuICAgICAgJ2NvbW1pdC1hbmQtdGFnLXZlcnNpb24nLFxuICAgICAgJ2Nkay1hc3NldHMnLFxuICAgICk7XG4gICAgLy8gdGhpcy5hcHAuYWRkRGVwcyhcbiAgICAvLyApO1xuICAgIHRoaXMucHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZSgnL2Nkay1vdXRwdXRzLSouanNvbicpO1xuXG4gICAgY29uc3QgcGlwZWxpbmVOYW1lID0gYmFzZU9wdGlvbnMucGlwZWxpbmVOYW1lID8/IChhcHAucGFyZW50ID8gYXBwLm5hbWUgOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZVByZWZpeCA9IHBpcGVsaW5lTmFtZSA/IGAke3BpcGVsaW5lTmFtZX0tYCA6ICcnO1xuICAgIHRoaXMuc3RhY2tQcmVmaXggPSBiYXNlT3B0aW9ucy5zdGFja1ByZWZpeCA/PyBhcHAubmFtZTtcbiAgICB0aGlzLmJyYW5jaE5hbWUgPSBiYXNlT3B0aW9ucy5icmFuY2hOYW1lID8/ICdtYWluJzsgLy8gVE9ETyB1c2UgZGVmYXVsdFJlbGVhc2VCcmFuY2ggb2YgTm9kZVByb2plY3RcblxuICAgIC8vIFJlbW92ZXMgdGhlIGNvbXBpbGVkIGNsb3VkIGFzc2VtYmx5IGJlZm9yZSBlYWNoIHN5bnRoXG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ3N5bnRoJyk/LnByZXBlbmRFeGVjKGBybSAtcmYgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fWApO1xuICAgIHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCdzeW50aDpzaWxlbnQnKT8ucHJlcGVuZEV4ZWMoYHJtIC1yZiAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9YCk7XG5cbiAgICAvLyBSZW1vdmUgdGFza3MgdGhhdCBtaWdodCBjb25mbGljdCB3aXRoIHRoZSBwaXBlbGluZSBwcm9jZXNzXG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2RlcGxveScpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkaWZmJyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2Rlc3Ryb3knKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnd2F0Y2gnKTtcblxuICAgIC8vIFNldHVwIHZlcnNpb25pbmcgaWYgZW5hYmxlZFxuICAgIGlmIChiYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkKSB7XG4gICAgICBuZXcgVmVyc2lvbmluZ1NldHVwKHRoaXMucHJvamVjdCwgYmFzZU9wdGlvbnMudmVyc2lvbmluZykuc2V0dXAoKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0YWdlc1xuICAgIGlmIChiYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBlcnNvbmFsU3RhZ2UoKTtcbiAgICB9XG4gICAgaWYgKGJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlRmVhdHVyZVN0YWdlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2UpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIChiYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXSkpIHtcbiAgICAgIHRoaXMuY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlcyB0YXNrcyB0byBoYW5kbGUgdGhlIHJlbGVhc2UgcHJvY2Vzc1xuICAgIHRoaXMuY3JlYXRlUmVsZWFzZVRhc2tzKCk7XG5cbiAgICAvLyBDcmVhdGVzIGEgc3BlY2lhbGl6ZWQgQ0RLIEFwcCBjbGFzc1xuICAgIHRoaXMuY3JlYXRlQXBwbGljYXRpb25FbnRyeXBvaW50KCk7XG5cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBlbmdpbmVUeXBlKCk6IFBpcGVsaW5lRW5naW5lO1xuXG4gIHByb3RlY3RlZCBwcm92aWRlSW5zdGFsbFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsU3RlcHMgPz8gW10pO1xuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgcG5wbSBzZXR1cCBpZiBuZWVkZWQgKEdpdEh1YiBvbmx5KVxuICAgIGlmICh0aGlzLmFwcC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSAmJiB0aGlzLmVuZ2luZVR5cGUoKSA9PT0gUGlwZWxpbmVFbmdpbmUuR0lUSFVCKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFBucG1TZXR1cFN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHZlcnNpb246ICh0aGlzLmFwcC5wYWNrYWdlIGFzIGFueSkucG5wbVZlcnNpb24sXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgY29yZXBhY2sgZW5hYmxlIGZvciBZYXJuIEJlcnJ5XG4gICAgaWYgKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IENvcmVwYWNrU2V0dXBTdGVwKHRoaXMucHJvamVjdCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzKSk7XG4gICAgfVxuICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCBbdGhpcy5hcHAucGFja2FnZS5pbnN0YWxsQ29tbWFuZF0pKTtcbiAgICByZXR1cm4gc2VxO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVTeW50aFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LnN5bnRoKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLnN5bnRoLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5zeW50aCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBzZXEuYWRkU3RlcHMoLi4udGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgW3RoaXMucHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpXSkpO1xuICAgIH1cblxuICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsICdidWlsZCcpKTtcblxuICAgIHNlcS5hZGRTdGVwcyguLi50aGlzLmJhc2VPcHRpb25zLnBvc3RTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wb3N0U3ludGhDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoQ29tbWFuZHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmVCdWlsZENvbW1hbmQgd3JhcHBlZCB0byBleGVjdXRlIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiB3b3JraW5nRGlyZWN0b3J5IGlzIHNldCwgdGhlIGNvbW1hbmQgaXMgcHJlZml4ZWQgd2l0aCBhIGNkIHRvIHRoZVxuICAgKiByZXBvIHJvb3QgdXNpbmcgZW5naW5lLWFwcHJvcHJpYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgcHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNtZCA9IHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kITtcbiAgICBpZiAoIXRoaXMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmVuZ2luZVR5cGUoKSkge1xuICAgICAgY2FzZSBQaXBlbGluZUVuZ2luZS5HSVRIVUI6XG4gICAgICAgIHJldHVybiBgY2QgJEdJVEhVQl9XT1JLU1BBQ0UgJiYgJHtjbWR9YDtcbiAgICAgIGNhc2UgUGlwZWxpbmVFbmdpbmUuR0lUTEFCOlxuICAgICAgICByZXR1cm4gYChjZCAkQ0lfUFJPSkVDVF9ESVIgJiYgJHtjbWR9KWA7XG4gICAgICBjYXNlIFBpcGVsaW5lRW5naW5lLkJBU0g6XG4gICAgICAgIHJldHVybiBgKGNkIFwiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbClcIiAmJiAke2NtZH0pYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoc3RhZ2VOYW1lPzogc3RyaW5nKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgY29uc3QgZ2xvYmFsUHVibGlzaFJvbGUgPSB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZyA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmRlZmF1bHQhO1xuICAgIGlmIChzdGFnZU5hbWUpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2UgP1xuICAgICAgICAgICh0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlTmFtZV0gPz8gZ2xvYmFsUHVibGlzaFJvbGUpIDpcbiAgICAgICAgICBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlTmFtZV0sXG4gICAgICB9KSk7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZU5hbWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZSkge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBbLi4udGhpcy5iYXNlT3B0aW9ucy5zdGFnZXMsIC4uLnRoaXMuYmFzZU9wdGlvbnMuaW5kZXBlbmRlbnRTdGFnZXMgPz8gW11dO1xuICAgICAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlLm5hbWVdID8/IGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlLm5hbWVdLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZS5uYW1lfWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICByb2xlQXJuOiBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5hc3NldFB1Ymxpc2hpbmcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3B1Ymxpc2g6YXNzZXRzJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZUFzc2VtYmx5VXBsb2FkU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGlmICghdGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGtnTmFtZXNwYWNlIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdmVyc2lvbmVkIGFydGlmYWN0cyAoZS5nLiBtYW51YWwgYXBwcm92YWxzKScpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN0ZXBTZXF1ZW5jZSh0aGlzLnByb2plY3QsIFtcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ2J1bXAnKSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScpLFxuICAgIF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVEZXBsb3lTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucyk6IFBpcGVsaW5lU3RlcCB7XG4gICAgcmV0dXJuIG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXG4gICAgICBuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlcGxveW1lbnQ/LltzdGFnZS5uYW1lXSA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgYGRlcGxveToke3N0YWdlLm5hbWV9YCksXG4gICAgICAuLi5zdGFnZS5wb3N0RGVwbG95U3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZURpZmZTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucywgZmFzdD86IGJvb2xlYW4pOiBQaXBlbGluZVN0ZXAge1xuICAgIHJldHVybiBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW1xuICAgICAgbmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kaWZmPy5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZXBsb3ltZW50Py5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgZmFzdCA/IGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCA6IGBkaWZmOiR7c3RhZ2UubmFtZX1gKSxcbiAgICAgIC4uLnN0YWdlLnBvc3REaWZmU3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5zdGFsbFBhY2thZ2VDb21tYW5kcyhwYWNrYWdlTmFtZTogc3RyaW5nLCBydW5QcmVJbnN0YWxsQ29tbWFuZHM6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb21tYW5kcyA9IHJ1blByZUluc3RhbGxDb21tYW5kcyA/IHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdIDogW107XG5cbiAgICBzd2l0Y2ggKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHlhcm4gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICBjb21tYW5kcy5wdXNoKGBucG0gaW5zdGFsbCAke3BhY2thZ2VOYW1lfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHBucG0gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpbnN0YWxsIHNjcmlwdHMgZm9yIHBhY2thZ2VNYW5hZ2VyOiAnICsgdGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlcik7XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kcztcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVTYWZlU3RhZ2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gUmVtb3ZlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgc3BsaXQgaW50byB3b3Jkc1xuICAgIGNvbnN0IHdvcmRzID0gbmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJykudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG5cbiAgICAvLyBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGFuZCBqb2luIHRoZW1cbiAgICByZXR1cm4gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9KS5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYXBwbGljYXRpb24sIGluY2x1ZGluZyBpbnRlcmZhY2VzIGFuZCBjbGFzc2VzXG4gICAqIG5lY2Vzc2FyeSB0byBzZXQgdXAgdGhlIHBpcGVsaW5lIGFuZCBkZWZpbmUgdGhlIEFXUyBDREsgc3RhY2tzIGZvciBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUFwcGxpY2F0aW9uRW50cnlwb2ludCgpIHtcbiAgICBsZXQgcHJvcHNDb2RlID0gJyc7XG4gICAgbGV0IGFwcENvZGUgPSAnJztcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICBwcm9wc0NvZGUgKz0gYCAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcGVyc29uYWwgc3RhY2suICovXG4gIHByb3ZpZGVQZXJzb25hbFN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBVU0VSIGlzIHNldCBhbmQgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY3JlYXRpbmcgYSBwZXJzb25hbCBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sgJiYgcHJvY2Vzcy5lbnYuVVNFUikge1xuICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gJ3BlcnNvbmFsLScgKyBwcm9jZXNzLmVudi5VU0VSLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sodGhpcywgJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH1wZXJzb25hbCcsIHsgZW52OiB7IGFjY291bnQ6ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9XFwke3N0YWdlTmFtZX1cXGAsIHN0YWdlTmFtZSB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBmZWF0dXJlIHN0YWNrLiAqL1xuICBwcm92aWRlRmVhdHVyZVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBCUkFOQ0ggaXMgc2V0IGFuZCBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIGZlYXR1cmUgc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGVGZWF0dXJlU3RhY2sgJiYgcHJvY2Vzcy5lbnYuQlJBTkNIKSB7XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSAnZmVhdHVyZS0nICsgcHJvY2Vzcy5lbnYuQlJBTkNILnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfWZlYXR1cmUnLCB7IGVudjogeyBhY2NvdW50OiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LmFjY291bnR9JywgcmVnaW9uOiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogXFxgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfVxcJHtzdGFnZU5hbWV9XFxgLCBzdGFnZU5hbWUgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHRoaXMuYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICBjb25zdCBuYW1lVXBwZXJGaXJzdCA9IHRoaXMuY3JlYXRlU2FmZVN0YWdlTmFtZShzdGFnZS5uYW1lKTtcblxuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhICR7c3RhZ2UubmFtZX0gc3RhY2suICovXG4gIHByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgJHtzdGFnZS5uYW1lfSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHsgZW52OiB7IGFjY291bnQ6ICcke3N0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7c3RhZ2UuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9Jywgc3RhZ2VOYW1lOiAnJHtzdGFnZS5uYW1lfScgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mICh0aGlzLmJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgY29uc3QgbmFtZVVwcGVyRmlyc3QgPSB0aGlzLmNyZWF0ZVNhZmVTdGFnZU5hbWUoc3RhZ2UubmFtZSk7XG5cbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSAke3N0YWdlLm5hbWV9IHN0YWNrLiAqL1xuICBwcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjazogKGFwcDogQXBwLCBzdGFja0lkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZUFwcFN0YWNrUHJvcHMpID0+IFN0YWNrO1xuYDtcbiAgICAgIGFwcENvZGUgKz0gYCAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhICR7c3RhZ2UubmFtZX0gc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKSB7XG4gICAgICBwcm9wcy5wcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2UubmFtZX0nLCB7IGVudjogeyBhY2NvdW50OiAnJHtzdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3N0YWdlLmVudi5yZWdpb259JyB9LCBzdGFja05hbWU6ICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHN0YWdlTmFtZTogJyR7c3RhZ2UubmFtZX0nIH0pO1xuICAgIH1cbmA7XG4gICAgfVxuXG4gICAgLy8gQWRkIHZlcnNpb25pbmcgbG9naWMgdG8gYXBwbHkgdG8gYWxsIHN0YWNrc1xuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIGFwcENvZGUgKz0gdGhpcy5nZW5lcmF0ZVZlcnNpb25pbmdBcHBDb2RlKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwRmlsZSA9IG5ldyBUZXh0RmlsZSh0aGlzLnByb2plY3QsIGAke3RoaXMuYXBwLnNyY2Rpcn0vYXBwLnRzYCk7XG5cbiAgICAvLyBHZW5lcmF0ZSB2ZXJzaW9uaW5nLWF3YXJlIGltcG9ydHMgYW5kIHV0aWxpdGllc1xuICAgIGNvbnN0IHZlcnNpb25pbmdJbXBvcnRzID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IHRoaXMuZ2VuZXJhdGVWZXJzaW9uaW5nSW1wb3J0cygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ1V0aWxpdGllcyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZFxuICAgICAgPyB0aGlzLmdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9uID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IGBcbmNvbnN0IHZlcnNpb25pbmdDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZywgbnVsbCwgMil9O1xuYFxuICAgICAgOiAnJztcblxuICAgIGFwcEZpbGUuYWRkTGluZShgLy8gJHtQUk9KRU5fTUFSS0VSfVxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFwcCwgQXBwUHJvcHMsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuJHt2ZXJzaW9uaW5nSW1wb3J0c31cbiR7dmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9ufVxuJHt2ZXJzaW9uaW5nVXRpbGl0aWVzfVxuXG4vKipcbiAqIFBpcGVsaW5lQXBwUHJvcHMgaXMgYW4gZXh0ZW5zaW9uIG9mIEFwcFByb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBvcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBBV1MgU3RhY2tzIGZvciBkaWZmZXJlbnQgc3RhZ2VzLlxuICpcbiAqIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gaW5zdGFudGlhdGUgeW91ciBhcHBsaWNhdGlvbiBzdGFja3Mgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3JcbiAqIGVhY2ggc3RhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFByb3BzIGV4dGVuZHMgQXBwUHJvcHMge1xuJHtwcm9wc0NvZGV9XG59XG5cbi8qKlxuICogUGlwZWxpbmVBcHBTdGFja1Byb3BzIGlzIGFuIGV4dGVuc2lvbiBvZiBTdGFja1Byb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIHN0YWdlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBQaXBlbGluZUFwcCBjbGFzcyBleHRlbmRzIHRoZSBBcHAgY2xhc3MgZnJvbSBBV1MgQ0RLIGFuZCBvdmVycmlkZXMgdGhlIGNvbnN0cnVjdG9yIHRvIHN1cHBvcnRcbiAqIGRpZmZlcmVudCBzdGFnZXMgb2YgdGhlIGFwcGxpY2F0aW9uIChkZXZlbG9wbWVudCwgcHJvZHVjdGlvbiwgcGVyc29uYWwsIGZlYXR1cmUpIGJ5IGludm9raW5nIHRoZSBwcm92aWRlZFxuICogc3RhY2stcHJvdmlkaW5nIGZ1bmN0aW9ucyBmcm9tIHRoZSBwcm9wcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lQXBwIGV4dGVuZHMgQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFBpcGVsaW5lQXBwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiR7YXBwQ29kZX1cblxuICB9XG59XG5gKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgdG8gcHVibGlzaCBDREsgYXNzZXRzIHRvIGFsbCBhY2NvdW50cyBhbmQgaGFuZGxlIHZlcnNpb25pbmcsIGluY2x1ZGluZyBidW1waW5nIHRoZSB2ZXJzaW9uXG4gICAqIGJhc2VkIG9uIHRoZSBsYXRlc3QgZ2l0IHRhZyBhbmQgcHVzaGluZyB0aGUgQ0RLIGFzc2VtYmx5IHRvIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVsZWFzZVRhc2tzKCkge1xuICAgIGNvbnN0IHN0YWdlcyA9IFsuLi50aGlzLmJhc2VPcHRpb25zLnN0YWdlcywgLi4udGhpcy5iYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXV07XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICAvLyBUYXNrIHRvIHB1Ymxpc2ggdGhlIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgICBzdGVwczogW3tcbiAgICAgICAgICBleGVjOiBgbnB4IGNkay1hc3NldHMgLXAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS8ke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfS5hc3NldHMuanNvbiBwdWJsaXNoYCxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3B1Ymxpc2g6YXNzZXRzJywge1xuICAgICAgc3RlcHM6IHN0YWdlcy5tYXAoc3RhZ2UgPT4gKHtcbiAgICAgICAgc3Bhd246IGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2J1bXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQnVtcHMgdmVyc2lvbiBiYXNlZCBvbiBsYXRlc3QgZ2l0IHRhZycsXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ3BpcGVsaW5lcy1yZWxlYXNlIGJ1bXAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ2dpdCBwdXNoIC0tdGFncycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScsIHtcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiBgcGlwZWxpbmVzLXJlbGVhc2UgY3JlYXRlLW1hbmlmZXN0IFwiJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fVwiICBcIiR7dGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2V9XCJgLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3dkOiB0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0LFxuICAgICAgICAgICAgZXhlYzogJ25wbSB2ZXJzaW9uIC0tbm8tZ2l0LXRhZy12ZXJzaW9uIGZyb20tZ2l0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGN3ZDogdGhpcy5hcHAuY2RrQ29uZmlnLmNka291dCxcbiAgICAgICAgICAgIGV4ZWM6ICducG0gcHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBwZXJzb25hbCBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgd2F0Y2hpbmcgZm9yIGNoYW5nZXMsXG4gICAqIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKSwgYW5kIGRlc3Ryb3lpbmcgdGhlIHN0YWNrIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVQZXJzb25hbFN0YWdlKCkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybigncGVyc29uYWwnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtcGVyc29uYWwuanNvbiAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnd2F0Y2g6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1wZXJzb25hbC5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdmYXN0ZGlmZjpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVzdHJveTpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRhc2tzIGZvciB0aGUgZmVhdHVyZSBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLFxuICAgKiBhbmQgZGVzdHJveWluZyB0aGUgc3RhY2sgd2hlbiBubyBsb25nZXIgbmVlZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUZlYXR1cmVTdGFnZSgpIHtcbiAgICBjb25zdCBzdGFja0lkID0gdGhpcy5nZXRDbGlTdGFja1BhdHRlcm4oJ2ZlYXR1cmUnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLWZlYXR1cmUuanNvbiAtLXByb2dyZXNzIGV2ZW50cyAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXIgZGVwbG95ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Zhc3RkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Rlc3Ryb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAtLWZvcmNlICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtZmVhdHVyZS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBnZW5lcmFsIHBpcGVsaW5lIHN0YWdlcyAoZGV2LCBwcm9kKSwgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtEZXBsb3lTdGFnZU9wdGlvbnN9IHN0YWdlIC0gVGhlIHN0YWdlIHRvIGNyZWF0ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2U6IERlcGxveW1lbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBpbmRlcGVuZGVudCBzdGFnZXMgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtOYW1lZFN0YWdlT3B0aW9uc30gc3RhZ2UgLSBUaGUgc3RhZ2UgdG8gY3JlYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZTogSW5kZXBlbmRlbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENsaVN0YWNrUGF0dGVybihzdGFnZTogc3RyaW5nKSB7XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlT3B0aW9ucy5kZXBsb3lTdWJTdGFja3MgPyBgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2V9ICR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlfS8qYCA6IGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB2ZXJzaW9uOmZldGNoOjxzdGFnZT4gdGFzayB0byBmZXRjaCB2ZXJzaW9uIGRhdGEgZnJvbSBkZXBsb3llZCBzdGFja1xuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVZlcnNpb25GZXRjaFRhc2soc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gYCR7dGhpcy5zdGFja1ByZWZpeH0ke3RoaXMuc3RhY2tQcmVmaXggPyAnLScgOiAnJ30ke3N0YWdlLm5hbWV9YDtcbiAgICBjb25zdCBzdGFnZUNvbmZpZyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uc3RhZ2VPdmVycmlkZXM/LltzdGFnZS5uYW1lXSB8fCB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc7XG5cbiAgICBpZiAoIXN0YWdlQ29uZmlnPy5vdXRwdXRzKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEZldGNoIGZyb20gQ2xvdWRGb3JtYXRpb24gb3V0cHV0c1xuICAgIGlmIChzdGFnZUNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5lbmFibGVkKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICBgZWNobyBcIkZldGNoaW5nIHZlcnNpb24gZGF0YSBmcm9tIENsb3VkRm9ybWF0aW9uIG91dHB1dHMgZm9yICR7c3RhZ2UubmFtZX0uLi5cImAsXG4gICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2tzIC0tc3RhY2stbmFtZSAke3N0YWNrTmFtZX0gLS1yZWdpb24gJHtzdGFnZS5lbnYucmVnaW9ufSAtLXF1ZXJ5IFwiU3RhY2tzWzBdLk91dHB1dHNbP3N0YXJ0c193aXRoKE91dHB1dEtleSwgJ0FwcFZlcnNpb24nKV0ue0tleTpPdXRwdXRLZXksVmFsdWU6T3V0cHV0VmFsdWV9XCIgLS1vdXRwdXQgdGFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCBmcm9tIFNTTSBQYXJhbWV0ZXIgU3RvcmVcbiAgICBpZiAoc3RhZ2VDb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZW5hYmxlZCkge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZS5uYW1lKTtcblxuICAgICAgaWYgKChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlIGFzIGFueSk/LmhpZXJhcmNoaWNhbCkge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSAoaGllcmFyY2hpY2FsKSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVycy1ieS1wYXRoIC0tcGF0aCBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcmVjdXJzaXZlIC0tcXVlcnkgXCJQYXJhbWV0ZXJzW10ue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVyIC0tbmFtZSBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcXVlcnkgXCJQYXJhbWV0ZXIue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGB2ZXJzaW9uOmZldGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRmV0Y2ggdmVyc2lvbiBkYXRhIGZyb20gZGVwbG95ZWQgJHtzdGFnZS5uYW1lfSBzdGFja2AsXG4gICAgICAgIGV4ZWM6IGNvbW1hbmRzLmpvaW4oJyAmJiAnKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDREsgYXBwbGljYXRpb24gY29kZSBmb3IgdmVyc2lvbmluZ1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0FwcENvZGUoY29uZmlnOiBWZXJzaW9uaW5nQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxuICAgIC8vIEFwcGx5IHZlcnNpb25pbmcgdG8gYWxsIHN0YWNrc1xuICAgIHRoaXMubm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3RhY2spIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gY2hpbGQuc3RhY2tOYW1lLnNwbGl0KCctJykucG9wKCkgfHwgJ2RlZmF1bHQnO1xuICAgICAgICBhZGRWZXJzaW9uaW5nVG9TdGFjayhjaGlsZCwgc3RhZ2VOYW1lLCAke2NvbmZpZy5zdGFnZU92ZXJyaWRlcyA/ICd2ZXJzaW9uaW5nQ29uZmlnLnN0YWdlT3ZlcnJpZGVzJyA6ICd1bmRlZmluZWQnfSk7XG4gICAgICB9XG4gICAgfSk7YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB2ZXJzaW9uaW5nIGltcG9ydHMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0ltcG9ydHMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcIik7XG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1wiKTtcblxuICAgIHJldHVybiBpbXBvcnRzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHZlcnNpb25pbmcgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXG4vKipcbiAqIFZlcnNpb24gaW5mb3JtYXRpb24gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbkluZm8ge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbW1pdEhhc2g6IHN0cmluZztcbiAgY29tbWl0SGFzaFNob3J0OiBzdHJpbmc7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBjb21taXRDb3VudDogbnVtYmVyO1xuICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nO1xuICBkZXBsb3llZEF0OiBzdHJpbmc7XG4gIGRlcGxveWVkQnk6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBMb2FkIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBnZW5lcmF0ZWQgZmlsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFZlcnNpb25JbmZvKCk6IFZlcnNpb25JbmZvIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoJy52ZXJzaW9uLnRtcC5qc29uJywgJ3V0ZjgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKCdDb3VsZCBub3QgbG9hZCB2ZXJzaW9uIGluZm8sIHVzaW5nIGZhbGxiYWNrJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246ICcwLjAuMCcsXG4gICAgICBjb21taXRIYXNoOiAndW5rbm93bicsXG4gICAgICBjb21taXRIYXNoU2hvcnQ6ICd1bmtub3duJyxcbiAgICAgIGJyYW5jaDogJ3Vua25vd24nLFxuICAgICAgY29tbWl0Q291bnQ6IDAsXG4gICAgICBwYWNrYWdlVmVyc2lvbjogJzAuMC4wJyxcbiAgICAgIGRlcGxveWVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRlcGxveWVkQnk6ICd1bmtub3duJyxcbiAgICAgIGVudmlyb25tZW50OiAndW5rbm93bidcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogR2V0IHZlcnNpb25pbmcgY29uZmlndXJhdGlvbiBmb3IgYSBzcGVjaWZpYyBzdGFnZVxuICovXG5mdW5jdGlvbiBnZXRTdGFnZUNvbmZpZyhzdGFnZU5hbWU6IHN0cmluZywgYmFzZUNvbmZpZzogYW55LCBzdGFnZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBhbnkge1xuICBpZiAoIXN0YWdlT3ZlcnJpZGVzIHx8ICFzdGFnZU92ZXJyaWRlc1tzdGFnZU5hbWVdKSB7XG4gICAgcmV0dXJuIGJhc2VDb25maWc7XG4gIH1cbiAgXG4gIC8vIE1lcmdlIHN0YWdlIG92ZXJyaWRlIHdpdGggYmFzZSBjb25maWdcbiAgY29uc3Qgb3ZlcnJpZGUgPSBzdGFnZU92ZXJyaWRlc1tzdGFnZU5hbWVdO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb25maWcsXG4gICAgb3V0cHV0czoge1xuICAgICAgY2xvdWRGb3JtYXRpb246IG92ZXJyaWRlLm91dHB1dHM/LmNsb3VkRm9ybWF0aW9uIHx8IGJhc2VDb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbixcbiAgICAgIHBhcmFtZXRlclN0b3JlOiBvdmVycmlkZS5vdXRwdXRzPy5wYXJhbWV0ZXJTdG9yZSB8fCBiYXNlQ29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUsXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIEFkZCB2ZXJzaW9uaW5nIG91dHB1dHMgdG8gYSBzdGFja1xuICovXG5mdW5jdGlvbiBhZGRWZXJzaW9uaW5nVG9TdGFjayhzdGFjazogU3RhY2ssIHN0YWdlTmFtZTogc3RyaW5nLCBzdGFnZU92ZXJyaWRlcz86IGFueSk6IHZvaWQge1xuICBjb25zdCB2ZXJzaW9uSW5mbyA9IGxvYWRWZXJzaW9uSW5mbygpO1xuICBjb25zdCBiYXNlQ29uZmlnID0gdmVyc2lvbmluZ0NvbmZpZztcbiAgY29uc3QgY29uZmlnID0gZ2V0U3RhZ2VDb25maWcoc3RhZ2VOYW1lLCBiYXNlQ29uZmlnLCBzdGFnZU92ZXJyaWRlcyk7XG4gIFxuICAvLyBDaGVjayBpZiBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIENsb3VkRm9ybWF0aW9uIG9yIFBhcmFtZXRlclN0b3JlIGNvbmZpZ3NcbiAgY29uc3QgY2ZGb3JtYXQgPSBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbj8uZm9ybWF0IHx8ICdzdHJ1Y3R1cmVkJztcbiAgY29uc3Qgc3NtRm9ybWF0ID0gY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmU/LmZvcm1hdCB8fCAnc3RydWN0dXJlZCc7XG4gIFxuICAvLyBBZGQgQ2xvdWRGb3JtYXRpb24gb3V0cHV0c1xuICBpZiAoY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24/LmVuYWJsZWQpIHtcbiAgICBpZiAoY2ZGb3JtYXQgPT09ICdwbGFpbicpIHtcbiAgICAgIC8vIFBsYWluIGZvcm1hdCAtIHNpbmdsZSBvdXRwdXQgd2l0aCB2ZXJzaW9uIHN0cmluZ1xuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb24nLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIHZlcnNpb24nLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cnVjdHVyZWQgZm9ybWF0IC0gbXVsdGlwbGUgb3V0cHV0c1xuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb24nLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIHZlcnNpb24nLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uQ29tbWl0SGFzaCcsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLmNvbW1pdEhhc2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGNvbW1pdCBoYXNoJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSA/IFxcYFxcJHtjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lfUNvbW1pdEhhc2hcXGAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb25CcmFuY2gnLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby5icmFuY2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGJyYW5jaCcsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUgPyBcXGBcXCR7Y29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZX1CcmFuY2hcXGAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb25JbmZvJywge1xuICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmVyc2lvbkluZm8pLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbXBsZXRlIHZlcnNpb24gaW5mb3JtYXRpb24nLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lID8gXFxgXFwke2NvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWV9SW5mb1xcYCA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gQWRkIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyc1xuICBpZiAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmU/LmVuYWJsZWQpIHtcbiAgICBpZiAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUuaGllcmFyY2hpY2FsKSB7XG4gICAgICAvLyBIaWVyYXJjaGljYWwgcGFyYW1ldGVyc1xuICAgICAgY29uc3QgYmFzZVBhcmFtZXRlck5hbWUgPSAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUucGFyYW1ldGVyTmFtZSB8fCAnL3tzdGFja05hbWV9L3ZlcnNpb24nKVxuICAgICAgICAucmVwbGFjZSgne3N0YWNrTmFtZX0nLCBzdGFjay5zdGFja05hbWUpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhZ2VOYW1lfScsIHN0YWdlTmFtZSk7XG4gICAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGhpZXJhcmNoaWNhbCBwYXJhbWV0ZXJzXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlclZlcnNpb24nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vdmVyc2lvblxcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHZlcnNpb25JbmZvLnZlcnNpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gdmVyc2lvbicsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJDb21taXRIYXNoJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L2NvbW1pdEhhc2hcXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiB2ZXJzaW9uSW5mby5jb21taXRIYXNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBjb21taXQgaGFzaCcsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJCcmFuY2gnLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vYnJhbmNoXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogdmVyc2lvbkluZm8uYnJhbmNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBicmFuY2gnLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVySW5mbycsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS9pbmZvXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogSlNPTi5zdHJpbmdpZnkodmVyc2lvbkluZm8pLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbXBsZXRlIHZlcnNpb24gaW5mb3JtYXRpb24nLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpbmdsZSBwYXJhbWV0ZXJcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUucGFyYW1ldGVyTmFtZSB8fCAnL3tzdGFja05hbWV9L3ZlcnNpb24nKVxuICAgICAgICAucmVwbGFjZSgne3N0YWNrTmFtZX0nLCBzdGFjay5zdGFja05hbWUpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhZ2VOYW1lfScsIHN0YWdlTmFtZSk7XG4gICAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXInLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWUsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiBzc21Gb3JtYXQgPT09ICdwbGFpbicgPyB2ZXJzaW9uSW5mby52ZXJzaW9uIDogSlNPTi5zdHJpbmdpZnkodmVyc2lvbkluZm8pLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3NtRm9ybWF0ID09PSAncGxhaW4nID8gJ0FwcGxpY2F0aW9uIHZlcnNpb24nIDogJ0NvbXBsZXRlIHZlcnNpb24gaW5mb3JtYXRpb24nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59YDtcbiAgfVxufVxuIl19
|
package/lib/awscdk/bash.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.BashCDKPipeline = void 0;
|
|
5
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
@@ -7,6 +6,7 @@ const projen_1 = require("projen");
|
|
|
7
6
|
const base_1 = require("./base");
|
|
8
7
|
const engine_1 = require("../engine");
|
|
9
8
|
class BashCDKPipeline extends base_1.CDKPipeline {
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.BashCDKPipeline", version: "0.3.23" };
|
|
10
10
|
constructor(app, options) {
|
|
11
11
|
super(app, options);
|
|
12
12
|
const readme = new projen_1.TextFile(this, 'pipeline.md', { lines: [] });
|
|
@@ -97,6 +97,4 @@ class BashCDKPipeline extends base_1.CDKPipeline {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
exports.BashCDKPipeline = BashCDKPipeline;
|
|
100
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
101
|
-
BashCDKPipeline[_a] = { fqn: "projen-pipelines.BashCDKPipeline", version: "0.3.21" };
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUEwQztBQUMxQyxpQ0FBc0U7QUFDdEUsc0NBQTJDO0FBTTNDLE1BQWEsZUFBZ0IsU0FBUSxrQkFBVztJQUU5QyxZQUFZLEdBQStCLEVBQUUsT0FBK0I7UUFDMUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2RkFBNkYsSUFBSSxDQUFDLGdCQUFnQixlQUFlLENBQUMsQ0FBQztZQUNsSixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuQixNQUFNLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDL0MsTUFB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Z0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUVBQW1FLENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVyQixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sdUJBQWMsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQzs7QUFuR0gsMENBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDZGtEaWZmVHlwZSwgQ0RLUGlwZWxpbmUsIENES1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaENES1BpcGVsaW5lT3B0aW9ucyBleHRlbmRzIENES1BpcGVsaW5lT3B0aW9ucyB7XG4gIC8vXG59XG5cbmV4cG9ydCBjbGFzcyBCYXNoQ0RLUGlwZWxpbmUgZXh0ZW5kcyBDREtQaXBlbGluZSB7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgb3B0aW9uczogQmFzaENES1BpcGVsaW5lT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCwgb3B0aW9ucyk7XG5cbiAgICBjb25zdCByZWFkbWUgPSBuZXcgVGV4dEZpbGUodGhpcywgJ3BpcGVsaW5lLm1kJywgeyBsaW5lczogW10gfSk7XG5cbiAgICByZWFkbWUuYWRkTGluZSgnIyBIb3cgdG8gcnVuIHlvdXIgcGlwZWxpbmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgPiAqKk5vdGU6KiogVGhpcyBwaXBlbGluZSBpcyBmb3IgYSBtb25vcmVwbyBzdWJwcm9qZWN0LiBDb21tYW5kcyBzaG91bGQgYmUgcnVuIGZyb20gdGhlIFxcYCR7dGhpcy53b3JraW5nRGlyZWN0b3J5fVxcYCBkaXJlY3RvcnkuYCk7XG4gICAgICByZWFkbWUuYWRkTGluZSgnJyk7XG4gICAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoYGNkICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWApO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIH1cblxuICAgIHJlYWRtZS5hZGRMaW5lKCcjIyBCdWlsZCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcblxuICAgIHJlYWRtZS5hZGRMaW5lKCdTeW50aGVzaXplIHlvdXIgQ0RLIHByb2plY3Q6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgY2QgJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCk7XG4gICAgfVxuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUluc3RhbGxTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlU3ludGhTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcblxuICAgIHJlYWRtZS5hZGRMaW5lKCdQdWJsaXNoIGFsbCB5b3VyIENESyBhc3NldHMgbGlrZSBMYW1iZGEgZnVuY3Rpb24gY29kZSBhbmQgY29udGFpbmVyIGltYWdlczonKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIGlmICh0aGlzLndvcmtpbmdEaXJlY3RvcnkpIHtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlSW5zdGFsbFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIGNsb3VkIGFzc2VtYmx5IGFuZCBhc3NldHMgZm9yIGZ1dHVyZSB1c2Ugb3IgY29tcGxpYW5jZSByZWFzb25zLCB1c2U6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgY2QgJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCk7XG4gICAgfVxuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUluc3RhbGxTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlQXNzZXRVcGxvYWRTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVBc3NlbWJseVVwbG9hZFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnIyMgRGVwbG95bWVudCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnRm9yIGV2ZXJ5IHN0YWdlIHNvbWUgc2NyaXB0cyBhcmUgZ2VuZXJhdGVkIGZvciBkaWZmIGFuZCBkZXBsb3knKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIG9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgU3RhZ2U6ICR7c3RhZ2UubmFtZX1gKTtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFnZS5kaWZmVHlwZSAhPT0gQ2RrRGlmZlR5cGUuTk9ORSkge1xuICAgICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVEaWZmU3RlcChzdGFnZSwgc3RhZ2UuZGlmZlR5cGUgPT0gQ2RrRGlmZlR5cGUuRkFTVCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICAgIH1cbiAgICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZURlcGxveVN0ZXAoc3RhZ2UpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIH1cblxuICAgIHJlYWRtZS5hZGRMaW5lKCdUaGUgc3RhZ2UgYHBlcnNvbmFsYCBpcyBtZWFudCB0byBiZSBkZXBsb3llZCBtYW51YWxseSBieSB0aGUgZGV2ZWxvcGVyIGFuZCBhbHNvIGhhcyBhIHdhdGNoIHNjcmlwdCBmb3IgbGl2ZSB1cGRhdGVzLicpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgaWYgKHRoaXMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgcmVhZG1lLmFkZExpbmUoYGNkICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWApO1xuICAgIH1cbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkaWZmOnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVwbG95OnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVzdHJveTpwZXJzb25hbCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCducHggcHJvamVuIHdhdGNoOnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnVGhlIHN0YWdlIGBmZWF0dXJlYCBpcyBtZWFudCB0byBiZSBkZXBsb3llZCBmb3IgZmVhdHVyZSBicmFuY2hlcy4nKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIGlmICh0aGlzLndvcmtpbmdEaXJlY3RvcnkpIHtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGlmZjpmZWF0dXJlJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVwbG95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkZXN0cm95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuXG4gIH1cblxuICBwdWJsaWMgZW5naW5lVHlwZSgpOiBQaXBlbGluZUVuZ2luZSB7XG4gICAgcmV0dXJuIFBpcGVsaW5lRW5naW5lLkJBU0g7XG4gIH1cblxufVxuIl19
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQTBDO0FBQzFDLGlDQUFzRTtBQUN0RSxzQ0FBMkM7QUFNM0MsTUFBYSxlQUFnQixTQUFRLGtCQUFXOztJQUU5QyxZQUFZLEdBQStCLEVBQUUsT0FBK0I7UUFDMUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2RkFBNkYsSUFBSSxDQUFDLGdCQUFnQixlQUFlLENBQUMsQ0FBQztZQUNsSixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuQixNQUFNLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDL0MsTUFB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Z0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUVBQW1FLENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVyQixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sdUJBQWMsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQzs7QUFuR0gsMENBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDZGtEaWZmVHlwZSwgQ0RLUGlwZWxpbmUsIENES1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaENES1BpcGVsaW5lT3B0aW9ucyBleHRlbmRzIENES1BpcGVsaW5lT3B0aW9ucyB7XG4gIC8vXG59XG5cbmV4cG9ydCBjbGFzcyBCYXNoQ0RLUGlwZWxpbmUgZXh0ZW5kcyBDREtQaXBlbGluZSB7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgb3B0aW9uczogQmFzaENES1BpcGVsaW5lT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCwgb3B0aW9ucyk7XG5cbiAgICBjb25zdCByZWFkbWUgPSBuZXcgVGV4dEZpbGUodGhpcywgJ3BpcGVsaW5lLm1kJywgeyBsaW5lczogW10gfSk7XG5cbiAgICByZWFkbWUuYWRkTGluZSgnIyBIb3cgdG8gcnVuIHlvdXIgcGlwZWxpbmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgPiAqKk5vdGU6KiogVGhpcyBwaXBlbGluZSBpcyBmb3IgYSBtb25vcmVwbyBzdWJwcm9qZWN0LiBDb21tYW5kcyBzaG91bGQgYmUgcnVuIGZyb20gdGhlIFxcYCR7dGhpcy53b3JraW5nRGlyZWN0b3J5fVxcYCBkaXJlY3RvcnkuYCk7XG4gICAgICByZWFkbWUuYWRkTGluZSgnJyk7XG4gICAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoYGNkICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWApO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIH1cblxuICAgIHJlYWRtZS5hZGRMaW5lKCcjIyBCdWlsZCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcblxuICAgIHJlYWRtZS5hZGRMaW5lKCdTeW50aGVzaXplIHlvdXIgQ0RLIHByb2plY3Q6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgY2QgJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCk7XG4gICAgfVxuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUluc3RhbGxTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlU3ludGhTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcblxuICAgIHJlYWRtZS5hZGRMaW5lKCdQdWJsaXNoIGFsbCB5b3VyIENESyBhc3NldHMgbGlrZSBMYW1iZGEgZnVuY3Rpb24gY29kZSBhbmQgY29udGFpbmVyIGltYWdlczonKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIGlmICh0aGlzLndvcmtpbmdEaXJlY3RvcnkpIHtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlSW5zdGFsbFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIGNsb3VkIGFzc2VtYmx5IGFuZCBhc3NldHMgZm9yIGZ1dHVyZSB1c2Ugb3IgY29tcGxpYW5jZSByZWFzb25zLCB1c2U6Jyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYGJhc2gnKTtcbiAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgY2QgJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCk7XG4gICAgfVxuICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZUluc3RhbGxTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgcmVhZG1lLmFkZExpbmUoYCR7dGhpcy5wcm92aWRlQXNzZXRVcGxvYWRTdGVwKCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVBc3NlbWJseVVwbG9hZFN0ZXAoKS50b0Jhc2goKS5jb21tYW5kcy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnIyMgRGVwbG95bWVudCBwaGFzZScpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnRm9yIGV2ZXJ5IHN0YWdlIHNvbWUgc2NyaXB0cyBhcmUgZ2VuZXJhdGVkIGZvciBkaWZmIGFuZCBkZXBsb3knKTtcbiAgICByZWFkbWUuYWRkTGluZSgnJyk7XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIG9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICByZWFkbWUuYWRkTGluZShgU3RhZ2U6ICR7c3RhZ2UubmFtZX1gKTtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgICBpZiAodGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFnZS5kaWZmVHlwZSAhPT0gQ2RrRGlmZlR5cGUuTk9ORSkge1xuICAgICAgICByZWFkbWUuYWRkTGluZShgJHt0aGlzLnByb3ZpZGVEaWZmU3RlcChzdGFnZSwgc3RhZ2UuZGlmZlR5cGUgPT0gQ2RrRGlmZlR5cGUuRkFTVCkudG9CYXNoKCkuY29tbWFuZHMuam9pbignXFxuJyl9YCk7XG4gICAgICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICAgIH1cbiAgICAgIHJlYWRtZS5hZGRMaW5lKGAke3RoaXMucHJvdmlkZURlcGxveVN0ZXAoc3RhZ2UpLnRvQmFzaCgpLmNvbW1hbmRzLmpvaW4oJ1xcbicpfWApO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgICAgcmVhZG1lLmFkZExpbmUoJycpO1xuICAgIH1cblxuICAgIHJlYWRtZS5hZGRMaW5lKCdUaGUgc3RhZ2UgYHBlcnNvbmFsYCBpcyBtZWFudCB0byBiZSBkZXBsb3llZCBtYW51YWxseSBieSB0aGUgZGV2ZWxvcGVyIGFuZCBhbHNvIGhhcyBhIHdhdGNoIHNjcmlwdCBmb3IgbGl2ZSB1cGRhdGVzLicpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCdgYGBiYXNoJyk7XG4gICAgaWYgKHRoaXMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgcmVhZG1lLmFkZExpbmUoYGNkICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWApO1xuICAgIH1cbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkaWZmOnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVwbG95OnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVzdHJveTpwZXJzb25hbCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCducHggcHJvamVuIHdhdGNoOnBlcnNvbmFsJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ2BgYCcpO1xuICAgIHJlYWRtZS5hZGRMaW5lKCcnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnVGhlIHN0YWdlIGBmZWF0dXJlYCBpcyBtZWFudCB0byBiZSBkZXBsb3llZCBmb3IgZmVhdHVyZSBicmFuY2hlcy4nKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgYmFzaCcpO1xuICAgIGlmICh0aGlzLndvcmtpbmdEaXJlY3RvcnkpIHtcbiAgICAgIHJlYWRtZS5hZGRMaW5lKGBjZCAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gKTtcbiAgICB9XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGlmZjpmZWF0dXJlJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJ25weCBwcm9qZW4gZGVwbG95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnbnB4IHByb2plbiBkZXN0cm95OmZlYXR1cmUnKTtcbiAgICByZWFkbWUuYWRkTGluZSgnYGBgJyk7XG4gICAgcmVhZG1lLmFkZExpbmUoJycpO1xuXG4gIH1cblxuICBwdWJsaWMgZW5naW5lVHlwZSgpOiBQaXBlbGluZUVuZ2luZSB7XG4gICAgcmV0dXJuIFBpcGVsaW5lRW5naW5lLkJBU0g7XG4gIH1cblxufVxuIl19
|