@aws-cdk/toolkit-lib 1.2.3 → 1.3.0
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/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/diff/index.d.ts +7 -0
- package/lib/actions/diff/index.js +1 -1
- package/lib/actions/diff/private/helpers.js +7 -1
- package/lib/actions/refactor/index.d.ts +15 -34
- package/lib/actions/refactor/index.js +1 -54
- package/lib/actions/refactor/private/mapping-helpers.d.ts +11 -0
- package/lib/actions/refactor/private/mapping-helpers.js +44 -0
- package/lib/api/cloud-assembly/private/context-aware-source.js +3 -16
- package/lib/api/cloud-assembly/private/exec.js +12 -3
- package/lib/api/cloud-assembly/private/prepare-source.d.ts +29 -5
- package/lib/api/cloud-assembly/private/prepare-source.js +45 -20
- package/lib/api/cloud-assembly/source-builder.d.ts +11 -0
- package/lib/api/cloud-assembly/source-builder.js +11 -10
- package/lib/api/cloud-assembly/stack-collection.js +2 -1
- package/lib/api/diff/diff-formatter.d.ts +8 -0
- package/lib/api/diff/diff-formatter.js +29 -7
- package/lib/api/io/private/message-maker.d.ts +5 -5
- package/lib/api/io/private/messages.d.ts +1 -0
- package/lib/api/io/private/messages.js +6 -1
- package/lib/api/io/toolkit-action.d.ts +1 -1
- package/lib/api/io/toolkit-action.js +1 -1
- package/lib/api/refactoring/cloudformation.d.ts +1 -0
- package/lib/api/refactoring/cloudformation.js +6 -4
- package/lib/api/refactoring/context.d.ts +4 -5
- package/lib/api/refactoring/context.js +122 -52
- package/lib/api/refactoring/digest.d.ts +7 -12
- package/lib/api/refactoring/digest.js +22 -42
- package/lib/api/refactoring/graph.d.ts +6 -1
- package/lib/api/refactoring/graph.js +21 -8
- package/lib/api/refactoring/index.d.ts +13 -4
- package/lib/api/refactoring/index.js +38 -18
- package/lib/api/tree.js +1 -1
- package/lib/context-providers/cc-api-provider.js +23 -14
- package/lib/index_bg.wasm +0 -0
- package/lib/payloads/refactor.d.ts +1 -1
- package/lib/payloads/refactor.js +1 -1
- package/lib/payloads/stack-details.d.ts +4 -0
- package/lib/payloads/stack-details.js +1 -1
- package/lib/toolkit/toolkit.d.ts +6 -2
- package/lib/toolkit/toolkit.js +114 -79
- package/lib/toolkit/types.d.ts +7 -0
- package/lib/toolkit/types.js +1 -1
- package/lib/util/arrays.d.ts +1 -0
- package/lib/util/arrays.js +16 -1
- package/lib/util/sets.d.ts +5 -0
- package/lib/util/sets.js +18 -0
- package/package.json +9 -9
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExecutionEnvironment = void 0;
|
|
4
4
|
exports.writeContextToEnv = writeContextToEnv;
|
|
5
|
+
exports.frameworkSupportsContextOverflow = frameworkSupportsContextOverflow;
|
|
5
6
|
exports.assemblyFromDirectory = assemblyFromDirectory;
|
|
6
7
|
exports.settingsFromSynthOptions = settingsFromSynthOptions;
|
|
7
8
|
exports.parametersFromSynthOptions = parametersFromSynthOptions;
|
|
@@ -21,8 +22,6 @@ const settings_1 = require("../../settings");
|
|
|
21
22
|
const tree_1 = require("../../tree");
|
|
22
23
|
const environment_1 = require("../environment");
|
|
23
24
|
class ExecutionEnvironment {
|
|
24
|
-
outdir;
|
|
25
|
-
outDirIsTemporary;
|
|
26
25
|
/**
|
|
27
26
|
* Create an ExecutionEnvironment
|
|
28
27
|
*
|
|
@@ -35,33 +34,51 @@ class ExecutionEnvironment {
|
|
|
35
34
|
* If `markSuccessful()` is called, the writer lock is converted to a reader lock
|
|
36
35
|
* and temporary directories will not be cleaned up anymore.
|
|
37
36
|
*/
|
|
38
|
-
static async create(services,
|
|
39
|
-
let
|
|
40
|
-
let dir =
|
|
37
|
+
static async create(services, options) {
|
|
38
|
+
let outDirIsTemporary = false;
|
|
39
|
+
let dir = options.outdir;
|
|
41
40
|
if (!dir) {
|
|
42
|
-
|
|
41
|
+
outDirIsTemporary = true;
|
|
43
42
|
dir = fs.mkdtempSync(path.join(fs.realpathSync(os.tmpdir()), 'cdk.out'));
|
|
44
43
|
}
|
|
45
44
|
const lock = await new rwlock_1.RWLock(dir).acquireWrite();
|
|
46
|
-
|
|
45
|
+
const opts = {
|
|
46
|
+
outdir: dir,
|
|
47
|
+
resolveDefaultAppEnv: options.resolveDefaultAppEnv,
|
|
48
|
+
};
|
|
49
|
+
return new ExecutionEnvironment(services, opts, {
|
|
50
|
+
lock,
|
|
51
|
+
outDirIsTemporary,
|
|
52
|
+
});
|
|
47
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Should the outdir be disposed of.
|
|
56
|
+
*/
|
|
57
|
+
get shouldDisposeOutDir() {
|
|
58
|
+
return this.shouldClean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The directory the cloud assembly will be written to.
|
|
62
|
+
*/
|
|
63
|
+
outdir;
|
|
64
|
+
options;
|
|
48
65
|
ioHelper;
|
|
49
66
|
sdkProvider;
|
|
50
67
|
debugFn;
|
|
51
68
|
lock;
|
|
52
69
|
shouldClean;
|
|
53
|
-
constructor(services,
|
|
54
|
-
this.outdir = outdir;
|
|
55
|
-
this.outDirIsTemporary = outDirIsTemporary;
|
|
70
|
+
constructor(services, options, { lock, outDirIsTemporary }) {
|
|
56
71
|
this.ioHelper = services.ioHelper;
|
|
57
72
|
this.sdkProvider = services.sdkProvider;
|
|
58
73
|
this.debugFn = (msg) => this.ioHelper.defaults.debug(msg);
|
|
59
74
|
this.lock = lock;
|
|
60
75
|
this.shouldClean = outDirIsTemporary;
|
|
76
|
+
this.outdir = options.outdir;
|
|
77
|
+
this.options = options;
|
|
61
78
|
}
|
|
62
79
|
async [Symbol.asyncDispose]() {
|
|
63
80
|
await this.lock?.release();
|
|
64
|
-
if (this.
|
|
81
|
+
if (this.shouldDisposeOutDir) {
|
|
65
82
|
await fs.rm(this.outdir, { recursive: true, force: true });
|
|
66
83
|
}
|
|
67
84
|
}
|
|
@@ -125,7 +142,7 @@ class ExecutionEnvironment {
|
|
|
125
142
|
*/
|
|
126
143
|
async defaultEnvVars() {
|
|
127
144
|
const debugFn = (msg) => this.ioHelper.notify(private_1.IO.CDK_ASSEMBLY_I0010.msg(msg));
|
|
128
|
-
const env = await (0, environment_1.prepareDefaultEnvironment)(this.sdkProvider, debugFn);
|
|
145
|
+
const env = this.options.resolveDefaultAppEnv ? await (0, environment_1.prepareDefaultEnvironment)(this.sdkProvider, debugFn) : {};
|
|
129
146
|
env[cxapi.OUTDIR_ENV] = this.outdir;
|
|
130
147
|
await debugFn((0, node_util_1.format)('outdir:', this.outdir));
|
|
131
148
|
// CLI version information
|
|
@@ -200,18 +217,26 @@ function writeContextToEnv(env, context, completeness) {
|
|
|
200
217
|
async function checkContextOverflowSupport(assembly, ioHelper) {
|
|
201
218
|
const traceFn = (msg) => ioHelper.defaults.trace(msg);
|
|
202
219
|
const tree = await (0, tree_1.loadTree)(assembly, traceFn);
|
|
203
|
-
const frameworkDoesNotSupportContextOverflow = (0, tree_1.some)(tree, node => {
|
|
204
|
-
const fqn = node.constructInfo?.fqn;
|
|
205
|
-
const version = node.constructInfo?.version;
|
|
206
|
-
return (fqn === 'aws-cdk-lib.App' && version != null && (0, semver_1.lte)(version, '2.38.0')) // v2
|
|
207
|
-
|| fqn === '@aws-cdk/core.App'; // v1
|
|
208
|
-
});
|
|
209
220
|
// We're dealing with an old version of the framework here. It is unaware of the temporary
|
|
210
221
|
// file, which means that it will ignore the context overflow.
|
|
211
|
-
if (
|
|
222
|
+
if (!frameworkSupportsContextOverflow(tree)) {
|
|
212
223
|
await ioHelper.notify(private_1.IO.CDK_ASSEMBLY_W0010.msg('Part of the context could not be sent to the application. Please update the AWS CDK library to the latest version.'));
|
|
213
224
|
}
|
|
214
225
|
}
|
|
226
|
+
/**
|
|
227
|
+
* Checks if the framework supports context overflow
|
|
228
|
+
*/
|
|
229
|
+
function frameworkSupportsContextOverflow(tree) {
|
|
230
|
+
return !(0, tree_1.some)(tree, node => {
|
|
231
|
+
const fqn = node.constructInfo?.fqn;
|
|
232
|
+
const version = node.constructInfo?.version;
|
|
233
|
+
return (fqn === 'aws-cdk-lib.App' // v2 app
|
|
234
|
+
&& version !== '0.0.0' // ignore developer builds
|
|
235
|
+
&& version != null && (0, semver_1.lte)(version, '2.38.0') // last version not supporting large context
|
|
236
|
+
) // v2
|
|
237
|
+
|| fqn === '@aws-cdk/core.App'; // v1 app => not supported
|
|
238
|
+
});
|
|
239
|
+
}
|
|
215
240
|
/**
|
|
216
241
|
* Safely create an assembly from a cloud assembly directory
|
|
217
242
|
*/
|
|
@@ -256,4 +281,4 @@ function settingsFromSynthOptions(synthOpts = {}) {
|
|
|
256
281
|
function parametersFromSynthOptions(synthOptions) {
|
|
257
282
|
return (0, environment_1.synthParametersFromSettings)(settingsFromSynthOptions(synthOptions ?? {}));
|
|
258
283
|
}
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVwYXJlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwTEEsOENBMkJDO0FBMkJELHNEQW9CQztBQUVELDREQVNDO0FBUUQsZ0VBRUM7QUF6UkQsNkNBQTJDO0FBQzNDLDhCQUE4QjtBQUM5QixrQ0FBa0M7QUFDbEMseUNBQW1DO0FBQ25DLDJEQUEyRDtBQUMzRCx5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLG1DQUE2QjtBQUU3QixrRUFBOEQ7QUFDOUQsd0NBQTJEO0FBRzNELDhDQUFzQztBQUV0Qyx5Q0FBc0M7QUFDdEMsNkNBQTBDO0FBQzFDLHFDQUE0QztBQUU1QyxnREFBbUk7QUFHbkksTUFBYSxvQkFBb0I7SUFpQ2I7SUFDQTtJQWpDbEI7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUF5QixFQUFFLFFBQTZCLEVBQUU7UUFDbkYsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNmLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksZUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRWdCLFFBQVEsQ0FBVztJ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QUFDLENBQUM7QUFDWCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQiwwQkFBMEIsQ0FBQyxZQUE4QjtJQUN2RSxPQUFPLElBQUEseUNBQTJCLEVBQUMsd0JBQXdCLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi4vLi4vLi4vcHJpdmF0ZS9kaXNwb3NlLXBvbHlmaWxsJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgbHRlIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB0eXBlIHsgVG9vbGtpdFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vdG9vbGtpdC9wcml2YXRlJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBzcGxpdEJ5U2l6ZSwgdmVyc2lvbk51bWJlciB9IGZyb20gJy4uLy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uLy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgSU8gfSBmcm9tICcuLi8uLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSVJlYWRMb2NrLCBJV3JpdGVMb2NrIH0gZnJvbSAnLi4vLi4vcndsb2NrJztcbmltcG9ydCB7IFJXTG9jayB9IGZyb20gJy4uLy4uL3J3bG9jayc7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3NldHRpbmdzJztcbmltcG9ydCB7IGxvYWRUcmVlLCBzb21lIH0gZnJvbSAnLi4vLi4vdHJlZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIEVudiB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IHByZXBhcmVEZWZhdWx0RW52aXJvbm1lbnQsIHNwYWNlQXZhaWxhYmxlRm9yQ29udGV4dCwgZ3Vlc3NFeGVjdXRhYmxlLCBzeW50aFBhcmFtZXRlcnNGcm9tU2V0dGluZ3MgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgdHlwZSB7IEFwcFN5bnRoT3B0aW9ucywgTG9hZEFzc2VtYmx5T3B0aW9ucyB9IGZyb20gJy4uL3NvdXJjZS1idWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvbkVudmlyb25tZW50IGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBFeGVjdXRpb25FbnZpcm9ubWVudFxuICAgKlxuICAgKiBBbiBFeGVjdXRpb25FbnZpcm9ubWVudCBob2xkcyBhIHdyaXRlciBsb2NrIG9uIHRoZSBnaXZlbiBkaXJlY3Rvcnkgd2hpY2ggd2lsbFxuICAgKiBiZSBjbGVhbmVkIHVwIHdoZW4gdGhlIG9iamVjdCBpcyBkaXNwb3NlZC5cbiAgICpcbiAgICogQSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZCBpZiBub25lIGlzIHN1cHBsaWVkLCB3aGljaCB3aWxsIGJlIGNsZWFuZWRcbiAgICogdXAgd2hlbiB0aGlzIG9iamVjdCBpcyBkaXNwb3NlZC5cbiAgICpcbiAgICogSWYgYG1hcmtTdWNjZXNzZnVsKClgIGlzIGNhbGxlZCwgdGhlIHdyaXRlciBsb2NrIGlzIGNvbnZlcnRlZCB0byBhIHJlYWRlciBsb2NrXG4gICAqIGFuZCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgd2lsbCBub3QgYmUgY2xlYW5lZCB1cCBhbnltb3JlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGUoc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcywgcHJvcHM6IHsgb3V0ZGlyPzogc3RyaW5nIH0gPSB7fSkge1xuICAgIGxldCB0ZW1wRGlyID0gZmFsc2U7XG4gICAgbGV0IGRpciA9IHByb3BzLm91dGRpcjtcbiAgICBpZiAoIWRpcikge1xuICAgICAgdGVtcERpciA9IHRydWU7XG4gICAgICBkaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4oZnMucmVhbHBhdGhTeW5jKG9zLnRtcGRpcigpKSwgJ2Nkay5vdXQnKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jayA9IGF3YWl0IG5ldyBSV0xvY2soZGlyKS5hY3F1aXJlV3JpdGUoKTtcbiAgICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVudmlyb25tZW50KHNlcnZpY2VzLCBkaXIsIHRlbXBEaXIsIGxvY2spO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnRm46IChtc2c6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBsb2NrOiBJV3JpdGVMb2NrIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNob3VsZENsZWFuOiBib29sZWFuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3V0ZGlyOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IG91dERpcklzVGVtcG9yYXJ5OiBib29sZWFuLFxuICAgIGxvY2s6IElXcml0ZUxvY2ssXG4gICkge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBzZXJ2aWNlcy5pb0hlbHBlcjtcbiAgICB0aGlzLnNka1Byb3ZpZGVyID0gc2VydmljZXMuc2RrUHJvdmlkZXI7XG4gICAgdGhpcy5kZWJ1Z0ZuID0gKG1zZzogc3RyaW5nKSA9PiB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKG1zZyk7XG4gICAgdGhpcy5sb2NrID0gbG9jaztcbiAgICB0aGlzLnNob3VsZENsZWFuID0gb3V0RGlySXNUZW1wb3Jhcnk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkge1xuICAgIGF3YWl0IHRoaXMubG9jaz8ucmVsZWFzZSgpO1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkQ2xlYW4pIHtcbiAgICAgIGF3YWl0IGZzLnJtKHRoaXMub3V0ZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGV4ZWN1dGlvbiBhcyBzdWNjZXNzZnVsLCB3aGljaCBzdG9wcyB0aGUgd3JpdGVyIGxvY2sgZnJvbSBiZWluZyByZWxlYXNlZCB1cG9uIGRpc3Bvc2FsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFya1N1Y2Nlc3NmdWwoKSB7XG4gICAgaWYgKCF0aGlzLmxvY2spIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBtYXJrIHN1Y2Nlc3NmdWwgbW9yZSB0aGFuIG9uY2UnKTtcbiAgICB9XG4gICAgY29uc3QgcmVhZExvY2sgPSBhd2FpdCB0aGlzLmxvY2suY29udmVydFRvUmVhZGVyTG9jaygpO1xuICAgIHRoaXMubG9jayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNob3VsZENsZWFuID0gZmFsc2U7XG4gICAgcmV0dXJuIHsgcmVhZExvY2sgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbiBhbiBleGVjdXRpb24gaW4gdGhpcyBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBUaGlzIHdpbGwgYWNxdWlyZSBhIHdyaXRlIGxvY2sgb24gdGhlIGdpdmVuIGVudmlyb25tZW50LiBUaGUgd3JpdGUgbG9ja1xuICAgKiB3aWxsIGJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcmV0dXJuIG9iamVjdCBpcyBkaXNwb3NlZCwgdW5sZXNzIGl0XG4gICAqIGlzIGNvbnZlcnRlZCB0byBhIHJlYWRlciBsb2NrLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJlZ2luRXhlY3V0aW9uKCk6IFByb21pc2U8eyB3cml0ZVRvUmVhZExvY2soKTogUHJvbWlzZTxJUmVhZExvY2s+IH0gJiBBc3luY0Rpc3Bvc2FibGU+IHtcbiAgICBjb25zdCBsb2NrID0gYXdhaXQgbmV3IFJXTG9jayh0aGlzLm91dGRpcikuYWNxdWlyZVdyaXRlKCk7XG5cbiAgICBsZXQgY29udmVydGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFzeW5jIHdyaXRlVG9SZWFkTG9jaygpIHtcbiAgICAgICAgY29udmVydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGxvY2suY29udmVydFRvUmVhZGVyTG9jaygpO1xuICAgICAgfSxcbiAgICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZWxlYXNlIGlmIG5vdCBjb252ZXJ0ZWRcbiAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHtcbiAgICAgICAgICBhd2FpdCBsb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEd1ZXNzIHRoZSBleGVjdXRhYmxlIGZyb20gdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudFxuICAgKlxuICAgKiBPbmx5IGRvIHRoaXMgaWYgdGhlIGZpbGUgaXMgTk9UIG1hcmtlZCBhcyBleGVjdXRhYmxlLiBJZiBpdCBpcyxcbiAgICogd2UnbGwgZGVmZXIgdG8gdGhlIHNoZWJhbmcgaW5zaWRlIHRoZSBmaWxlIGl0c2VsZi5cbiAgICpcbiAgICogSWYgd2UncmUgb24gV2luZG93cywgd2UgQUxXQVlTIHRha2UgdGhlIGhhbmRsZXIsIHNpbmNlIGl0J3MgaGFyZCB0b1xuICAgKiB2ZXJpZnkgaWYgcmVnaXN0cnkgYXNzb2NpYXRpb25zIGhhdmUgb3IgaGF2ZSBub3QgYmVlbiBzZXQgdXAgZm9yIHRoaXNcbiAgICogZmlsZSB0eXBlLCBzbyB3ZSdsbCBhc3N1bWUgdGhlIHdvcnN0IGFuZCB0YWtlIGNvbnRyb2wuXG4gICAqL1xuICBwdWJsaWMgZ3Vlc3NFeGVjdXRhYmxlKGFwcDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGd1ZXNzRXhlY3V0YWJsZShhcHAsIHRoaXMuZGVidWdGbik7XG4gIH1cblxuICAvKipcbiAgICogSWYgd2UgZG9uJ3QgaGF2ZSByZWdpb24vYWNjb3VudCBkZWZpbmVkIGluIGNvbnRleHQsIHdlIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBTREsgYmVoYXZpb3JcbiAgICogd2hlcmUgcmVnaW9uIGlzIHJldHJpZXZlZCBmcm9tIH4vLmF3cy9jb25maWcgYW5kIGFjY291bnQgaXMgYmFzZWQgb24gZGVmYXVsdCBjcmVkZW50aWFscyBwcm92aWRlclxuICAgKiBjaGFpbiBhbmQgdGhlbiBTVFMgaXMgcXVlcmllZC5cbiAgICpcbiAgICogVGhpcyBpcyBkb25lIG9wcG9ydHVuaXN0aWNhbGx5OiBmb3IgZXhhbXBsZSwgaWYgd2UgY2FuJ3QgYWNjZXNzIFNUUyBmb3Igc29tZSByZWFzb24gb3IgdGhlIHJlZ2lvblxuICAgKiBpcyBub3QgY29uZmlndXJlZCwgdGhlIGNvbnRleHQgdmFsdWUgd2lsbCBiZSAnbnVsbCcgYW5kIHRoZXJlIGNvdWxkIGZhaWx1cmVzIGRvd24gdGhlIGxpbmUuIEluXG4gICAqIHNvbWUgY2FzZXMsIHN5bnRoZXNpcyBkb2VzIG5vdCByZXF1aXJlIHJlZ2lvbi9hY2NvdW50IGluZm9ybWF0aW9uIGF0IGFsbCwgc28gdGhhdCBtaWdodCBiZSBwZXJmZWN0bHlcbiAgICogZmluZSBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWZhdWx0RW52VmFycygpOiBQcm9taXNlPEVudj4ge1xuICAgIGNvbnN0IGRlYnVnRm4gPSAobXNnOiBzdHJpbmcpID0+IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMDAxMC5tc2cobXNnKSk7XG4gICAgY29uc3QgZW52ID0gYXdhaXQgcHJlcGFyZURlZmF1bHRFbnZpcm9ubWVudCh0aGlzLnNka1Byb3ZpZGVyLCBkZWJ1Z0ZuKTtcblxuICAgIGVudltjeGFwaS5PVVRESVJfRU5WXSA9IHRoaXMub3V0ZGlyO1xuICAgIGF3YWl0IGRlYnVnRm4oZm9ybWF0KCdvdXRkaXI6JywgdGhpcy5vdXRkaXIpKTtcblxuICAgIC8vIENMSSB2ZXJzaW9uIGluZm9ybWF0aW9uXG4gICAgZW52W2N4YXBpLkNMSV9BU01fVkVSU0lPTl9FTlZdID0gY3hzY2hlbWEuTWFuaWZlc3QudmVyc2lvbigpO1xuICAgIGVudltjeGFwaS5DTElfVkVSU0lPTl9FTlZdID0gdmVyc2lvbk51bWJlcigpO1xuXG4gICAgYXdhaXQgZGVidWdGbihmb3JtYXQoJ2VudjonLCBlbnYpKTtcbiAgICByZXR1cm4gZW52O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjb2RlIGZyb20gYSBkaWZmZXJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VEaXI8VD4oYmxvY2s6ICgpID0+IFByb21pc2U8VD4sIHdvcmtpbmdEaXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcmlnaW5hbFdvcmtpbmdEaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAod29ya2luZ0Rpcikge1xuICAgICAgICBwcm9jZXNzLmNoZGlyKHdvcmtpbmdEaXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgYmxvY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHdvcmtpbmdEaXIpIHtcbiAgICAgICAgcHJvY2Vzcy5jaGRpcihvcmlnaW5hbFdvcmtpbmdEaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIGNvbnRleHQgdG8gYSBzZXQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICpcbiAqIE5lZWRzIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIHJlc3Qgb2YgdGhlIGVudiBiZWNhdXNlIHRoYXQncyBuZWNlc3NhcnkgdG8gZG9cbiAqIGFuIG92ZXJmbG93IGNvbXB1dGF0aW9uIG9uIFdpbmRvd3MuIFRoaXMgZnVuY3Rpb24gd2lsbCBtdXRhdGUgdGhlIGdpdmVuXG4gKiBlbnZpcm9ubWVudCBpbi1wbGFjZS4gSXQgc2hvdWxkIGJlIGNhbGxlZCBhcyB0aGUgdmVyeSBsYXN0IG9wZXJhdGlvbiBvbiB0aGVcbiAqIGVudmlyb25tZW50LCBiZWNhdXNlIGFmdGVyd2FyZHMgaXMgbWlnaHQgYmUgYXQgdGhlIG1heGltdW0gc2l6ZS5cbiAqXG4gKiBUaGlzICp3b3VsZCogaGF2ZSByZXR1cm5lZCBhbiBgSUFzeW5jRGlzcG9zYWJsZWAgYnV0IHRoYXQgcmVxdWlyZXMgbWVzc2luZ1xuICogd2l0aCBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgdG8gdXNlIGl0IGluIGF3cy1jZGssIHNvIHJldHVybmluZyBhblxuICogZXhwbGljaXQgY2xlYW51cCBmdW5jdGlvbiBpcyBlYXNpZXIuXG4gKlxuICogYGNvbXBsZXRlbmVzc2AgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBgZW52YCBibG9jayByZXByZXNlbnRzIHRoZSBmdWxsIGBlbnZgXG4gKiB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGEgc3VicHJvY2Vzcywgb3Igd2hldGhlciBpdCB3aWxsIGJlIG1peGVkIGludG9cbiAqIGBwcm9jZXNzLmVudmAgbGF0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRleHRUb0VudihlbnY6IEVudiwgY29udGV4dDogQ29udGV4dCwgY29tcGxldGVuZXNzOiAnYWRkLXByb2Nlc3MtZW52LWxhdGVyJyB8ICdlbnYtaXMtY29tcGxldGUnKSB7XG4gIGxldCBjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbiA9IG51bGw7XG5cbiAgLy8gT24gV2luZG93cywgYWxsIGVudnZhcnMgdG9nZXRoZXIgbXVzdCBmaXQgaW4gYSAzMmsgYmxvY2sgKDxodHRwczovL2RldmJsb2dzLm1pY3Jvc29mdC5jb20vb2xkbmV3dGhpbmcvMjAxMDAyMDMtMDA+KVxuICAvLyBPbiBMaW51eCwgYSBzaW5nbGUgZW50cnkgbWF5IG5vdCBleGNlZWQgMTMxazsgYnV0IHdlJ3JlIHRyZWF0aW5nIGl0IGFzIGFsbCB0b2dldGhlciBiZWNhdXNlIHRoYXQncyBzYWZlXG4gIC8vIGFuZCBpdCdzIGEgc2luZ2xlIGV4ZWN1dGlvbiBwYXRoIGZvciBib3RoIHBsYXRmb3Jtcy5cbiAgY29uc3QgZW52VmFyaWFibGVTaXplTGltaXQgPSBvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInID8gMzI3NjAgOiAxMzEwNzI7XG5cbiAgY29uc3QgY29tcGxldGVFbnYgPSB7IC4uLmNvbXBsZXRlbmVzcyA9PT0gJ2FkZC1wcm9jZXNzLWVudi1sYXRlcicgPyBwcm9jZXNzLmVudiA6IHt9LCAuLi5lbnYgfTtcbiAgY29uc3QgW3NtYWxsQ29udGV4dCwgb3ZlcmZsb3ddID0gc3BsaXRCeVNpemUoY29udGV4dCwgc3BhY2VBdmFpbGFibGVGb3JDb250ZXh0KGNvbXBsZXRlRW52LCBlbnZWYXJpYWJsZVNpemVMaW1pdCkpO1xuXG4gIC8vIFN0b3JlIHRoZSBzYWZlIHBhcnQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4gIGVudltjeGFwaS5DT05URVhUX0VOVl0gPSBKU09OLnN0cmluZ2lmeShzbWFsbENvbnRleHQpO1xuXG4gIC8vIElmIHRoZXJlIHdhcyBhbnkgb3ZlcmZsb3csIHdyaXRlIGl0IHRvIGEgdGVtcG9yYXJ5IGZpbGVcbiAgaWYgKE9iamVjdC5rZXlzKG92ZXJmbG93ID8/IHt9KS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY29udGV4dERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1jb250ZXh0JykpO1xuICAgIGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uID0gcGF0aC5qb2luKGNvbnRleHREaXIsICdjb250ZXh0LW92ZXJmbG93Lmpzb24nKTtcbiAgICBmcy53cml0ZUpTT05TeW5jKGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uLCBvdmVyZmxvdyk7XG4gICAgZW52W2N4YXBpLkNPTlRFWFRfT1ZFUkZMT1dfTE9DQVRJT05fRU5WXSA9IGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBpZiAoY29udGV4dE92ZXJmbG93TG9jYXRpb24pIHtcbiAgICAgIGF3YWl0IGZzLnByb21pc2VzLnJtKHBhdGguZGlybmFtZShjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbiksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYXNzZW1ibHkgc3VwcG9ydHMgY29udGV4dCBvdmVyZmxvdywgd2FybiBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIGFzc2VtYmx5IC0gdGhlIGFzc2VtYmx5IHRvIGNoZWNrXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrQ29udGV4dE92ZXJmbG93U3VwcG9ydChhc3NlbWJseTogY3hhcGkuQ2xvdWRBc3NlbWJseSwgaW9IZWxwZXI6IElvSGVscGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYWNlRm4gPSAobXNnOiBzdHJpbmcpID0+IGlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKG1zZyk7XG4gIGNvbnN0IHRyZWUgPSBhd2FpdCBsb2FkVHJlZShhc3NlbWJseSwgdHJhY2VGbik7XG4gIGNvbnN0IGZyYW1ld29ya0RvZXNOb3RTdXBwb3J0Q29udGV4dE92ZXJmbG93ID0gc29tZSh0cmVlLCBub2RlID0+IHtcbiAgICBjb25zdCBmcW4gPSBub2RlLmNvbnN0cnVjdEluZm8/LmZxbjtcbiAgICBjb25zdCB2ZXJzaW9uID0gbm9kZS5jb25zdHJ1Y3RJbmZvPy52ZXJzaW9uO1xuICAgIHJldHVybiAoZnFuID09PSAnYXdzLWNkay1saWIuQXBwJyAmJiB2ZXJzaW9uICE9IG51bGwgJiYgbHRlKHZlcnNpb24sICcyLjM4LjAnKSkgLy8gdjJcbiAgICB8fCBmcW4gPT09ICdAYXdzLWNkay9jb3JlLkFwcCc7IC8vIHYxXG4gIH0pO1xuXG4gIC8vIFdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBvbGQgdmVyc2lvbiBvZiB0aGUgZnJhbWV3b3JrIGhlcmUuIEl0IGlzIHVuYXdhcmUgb2YgdGhlIHRlbXBvcmFyeVxuICAvLyBmaWxlLCB3aGljaCBtZWFucyB0aGF0IGl0IHdpbGwgaWdub3JlIHRoZSBjb250ZXh0IG92ZXJmbG93LlxuICBpZiAoZnJhbWV3b3JrRG9lc05vdFN1cHBvcnRDb250ZXh0T3ZlcmZsb3cpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX1cwMDEwLm1zZygnUGFydCBvZiB0aGUgY29udGV4dCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUgYXBwbGljYXRpb24uIFBsZWFzZSB1cGRhdGUgdGhlIEFXUyBDREsgbGlicmFyeSB0byB0aGUgbGF0ZXN0IHZlcnNpb24uJykpO1xuICB9XG59XG5cbi8qKlxuICogU2FmZWx5IGNyZWF0ZSBhbiBhc3NlbWJseSBmcm9tIGEgY2xvdWQgYXNzZW1ibHkgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlbWJseUZyb21EaXJlY3RvcnkoYXNzZW1ibHlEaXI6IHN0cmluZywgaW9IZWxwZXI6IElvSGVscGVyLCBsb2FkT3B0aW9uczogTG9hZEFzc2VtYmx5T3B0aW9ucyA9IHt9KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBuZXcgY3hhcGkuQ2xvdWRBc3NlbWJseShhc3NlbWJseURpciwge1xuICAgICAgc2tpcFZlcnNpb25DaGVjazogIShsb2FkT3B0aW9ucy5jaGVja1ZlcnNpb24gPz8gdHJ1ZSksXG4gICAgICBza2lwRW51bUNoZWNrOiAhKGxvYWRPcHRpb25zLmNoZWNrRW51bXMgPz8gdHJ1ZSksXG4gICAgICAvLyBXZSBzb3J0IGFzIHdlIGRlcGxveVxuICAgICAgdG9wb1NvcnQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIGF3YWl0IGNoZWNrQ29udGV4dE92ZXJmbG93U3VwcG9ydChhc3NlbWJseSwgaW9IZWxwZXIpO1xuICAgIHJldHVybiBhc3NlbWJseTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoY3hzY2hlbWEuVkVSU0lPTl9NSVNNQVRDSCkpIHtcbiAgICAgIC8vIHRoaXMgbWVhbnMgdGhlIENMSSB2ZXJzaW9uIGlzIHRvbyBvbGQuXG4gICAgICAvLyB3ZSBpbnN0cnVjdCB0aGUgdXNlciB0byB1cGdyYWRlLlxuICAgICAgY29uc3QgbWVzc2FnZSA9ICdUaGlzIEFXUyBDREsgVG9vbGtpdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBBV1MgQ0RLIGxpYnJhcnkgdXNlZCBieSB5b3VyIGFwcGxpY2F0aW9uLiBQbGVhc2UgdXBncmFkZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24uJztcbiAgICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfRTExMTEubXNnKG1lc3NhZ2UsIHsgZXJyb3I6IGVyciB9KSk7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGAke21lc3NhZ2V9XFxuKCR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NGcm9tU3ludGhPcHRpb25zKHN5bnRoT3B0czogQXBwU3ludGhPcHRpb25zID0ge30pOiBTZXR0aW5ncyB7XG4gIHJldHVybiBuZXcgU2V0dGluZ3Moe1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBwYXRoTWV0YWRhdGE6IHRydWUsXG4gICAgdmVyc2lvblJlcG9ydGluZzogdHJ1ZSxcbiAgICBhc3NldE1ldGFkYXRhOiB0cnVlLFxuICAgIGFzc2V0U3RhZ2luZzogdHJ1ZSxcbiAgICAuLi5zeW50aE9wdHMsXG4gIH0sIHRydWUpO1xufVxuXG4vKipcbiAqIFR1cm4gc3ludGhlc2lzIG9wdGlvbnMgaW50byBjb250ZXh0L2Vudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdpbGwgZ28gdG8gdGhlIENESyBhcHBcbiAqXG4gKiBUaGVzZSBhcmUgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgdGhlIHN5bnRoZXNpcyBvcGVyYXRpb24sIGNvbmZpZ3VyYWJsZSBieSB0aGUgdXNlclxuICogZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgYXBwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21TeW50aE9wdGlvbnMoc3ludGhPcHRpb25zPzogQXBwU3ludGhPcHRpb25zKSB7XG4gIHJldHVybiBzeW50aFBhcmFtZXRlcnNGcm9tU2V0dGluZ3Moc2V0dGluZ3NGcm9tU3ludGhPcHRpb25zKHN5bnRoT3B0aW9ucyA/PyB7fSkpO1xufVxuIl19
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVwYXJlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvT0EsOENBMkJDO0FBcUJELDRFQVdDO0FBS0Qsc0RBb0JDO0FBRUQsNERBU0M7QUFRRCxnRUFFQztBQTdVRCw2Q0FBMkM7QUFDM0MsOEJBQThCO0FBQzlCLGtDQUFrQztBQUNsQyx5Q0FBbUM7QUFDbkMsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywrQkFBK0I7QUFDL0IsbUNBQTZCO0FBRTdCLGtFQUE4RDtBQUM5RCx3Q0FBMkQ7QUFHM0QsOENBQXNDO0FBRXRDLHlDQUFzQztBQUN0Qyw2Q0FBMEM7QUFFMUMscUNBQTRDO0FBRTVDLGdEQUFtSTtBQW1CbkksTUFBYSxvQkFBb0I7SUFDL0I7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUF5QixFQUFFLE9BQW9DO1FBQ3hGLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksZUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxELE1BQU0sSUFBSSxHQUFHO1lBQ1gsTUFBTSxFQUFFLEdBQUc7WUFDWCxvQkFBb0IsRUFBRSxPQUFPLENBQUMsb0JBQW9CO1NBQ25ELENBQUM7UUFFRixPQUFPLElBQUks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QUNsSixNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sSUFBSSw0QkFBWSxDQUFDLEdBQUcsT0FBTyxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsWUFBNkIsRUFBRTtJQUN0RSxPQUFPLElBQUksbUJBQVEsQ0FBQztRQUNsQixLQUFLLEVBQUUsS0FBSztRQUNaLFlBQVksRUFBRSxJQUFJO1FBQ2xCLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsWUFBWSxFQUFFLElBQUk7UUFDbEIsR0FBRyxTQUFTO0tBQ2IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLFlBQThCO0lBQ3ZFLE9BQU8sSUFBQSx5Q0FBMkIsRUFBQyx3QkFBd0IsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuLi8uLi8uLi9wcml2YXRlL2Rpc3Bvc2UtcG9seWZpbGwnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBsdGUgfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHR5cGUgeyBUb29sa2l0U2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi90b29sa2l0L3ByaXZhdGUnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IHNwbGl0QnlTaXplLCB2ZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBJTyB9IGZyb20gJy4uLy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJUmVhZExvY2ssIElXcml0ZUxvY2sgfSBmcm9tICcuLi8uLi9yd2xvY2snO1xuaW1wb3J0IHsgUldMb2NrIH0gZnJvbSAnLi4vLi4vcndsb2NrJztcbmltcG9ydCB7IFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vc2V0dGluZ3MnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RUcmVlTm9kZSB9IGZyb20gJy4uLy4uL3RyZWUnO1xuaW1wb3J0IHsgbG9hZFRyZWUsIHNvbWUgfSBmcm9tICcuLi8uLi90cmVlJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dCwgRW52IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgcHJlcGFyZURlZmF1bHRFbnZpcm9ubWVudCwgc3BhY2VBdmFpbGFibGVGb3JDb250ZXh0LCBndWVzc0V4ZWN1dGFibGUsIHN5bnRoUGFyYW1ldGVyc0Zyb21TZXR0aW5ncyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgQXBwU3ludGhPcHRpb25zLCBMb2FkQXNzZW1ibHlPcHRpb25zIH0gZnJvbSAnLi4vc291cmNlLWJ1aWxkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkVudmlyb25tZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRoZSBjbG91ZCBhc3NlbWJseSB3aWxsIGJlIHdyaXR0ZW4gdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhcyBvdXRwdXQgZGlyZWN0b3J5LCB0aGlzIHdpbGwgYmUgY2xlYW5lZCB1cCB3aGVuIHRoaXMgb2JqZWN0IGlzIGRpc3Bvc2VkXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYW5kIGFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBhcHAncyBkZWZhdWx0IGVudmlyb25tZW50LlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbWFrZSBhIGNhbGwgdG8gU1RTLCB3aGljaCBpcyBub3QgYWx3YXlzIGRlc2lyYWJsZSBlLmcuIGlmIHRoZSBlbnYgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlRGVmYXVsdEFwcEVudjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvbkVudmlyb25tZW50IGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBFeGVjdXRpb25FbnZpcm9ubWVudFxuICAgKlxuICAgKiBBbiBFeGVjdXRpb25FbnZpcm9ubWVudCBob2xkcyBhIHdyaXRlciBsb2NrIG9uIHRoZSBnaXZlbiBkaXJlY3Rvcnkgd2hpY2ggd2lsbFxuICAgKiBiZSBjbGVhbmVkIHVwIHdoZW4gdGhlIG9iamVjdCBpcyBkaXNwb3NlZC5cbiAgICpcbiAgICogQSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZCBpZiBub25lIGlzIHN1cHBsaWVkLCB3aGljaCB3aWxsIGJlIGNsZWFuZWRcbiAgICogdXAgd2hlbiB0aGlzIG9iamVjdCBpcyBkaXNwb3NlZC5cbiAgICpcbiAgICogSWYgYG1hcmtTdWNjZXNzZnVsKClgIGlzIGNhbGxlZCwgdGhlIHdyaXRlciBsb2NrIGlzIGNvbnZlcnRlZCB0byBhIHJlYWRlciBsb2NrXG4gICAqIGFuZCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgd2lsbCBub3QgYmUgY2xlYW5lZCB1cCBhbnltb3JlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGUoc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcywgb3B0aW9uczogRXhlY3V0aW9uRW52aXJvbm1lbnRPcHRpb25zKSB7XG4gICAgbGV0IG91dERpcklzVGVtcG9yYXJ5ID0gZmFsc2U7XG4gICAgbGV0IGRpciA9IG9wdGlvbnMub3V0ZGlyO1xuICAgIGlmICghZGlyKSB7XG4gICAgICBvdXREaXJJc1RlbXBvcmFyeSA9IHRydWU7XG4gICAgICBkaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4oZnMucmVhbHBhdGhTeW5jKG9zLnRtcGRpcigpKSwgJ2Nkay5vdXQnKSk7XG4gICAgfVxuICAgIGNvbnN0IGxvY2sgPSBhd2FpdCBuZXcgUldMb2NrKGRpcikuYWNxdWlyZVdyaXRlKCk7XG5cbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgb3V0ZGlyOiBkaXIsXG4gICAgICByZXNvbHZlRGVmYXVsdEFwcEVudjogb3B0aW9ucy5yZXNvbHZlRGVmYXVsdEFwcEVudixcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBFeGVjdXRpb25FbnZpcm9ubWVudChzZXJ2aWNlcywgb3B0cywge1xuICAgICAgbG9jayxcbiAgICAgIG91dERpcklzVGVtcG9yYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgb3V0ZGlyIGJlIGRpc3Bvc2VkIG9mLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG91bGREaXNwb3NlT3V0RGlyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3VsZENsZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RvcnkgdGhlIGNsb3VkIGFzc2VtYmx5IHdpbGwgYmUgd3JpdHRlbiB0by5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvdXRkaXI6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPEV4ZWN1dGlvbkVudmlyb25tZW50T3B0aW9ucz47XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z0ZuOiAobXNnOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgbG9jazogSVdyaXRlTG9jayB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzaG91bGRDbGVhbjogYm9vbGVhbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHNlcnZpY2VzOiBUb29sa2l0U2VydmljZXMsXG4gICAgb3B0aW9uczogUmVxdWlyZWQ8RXhlY3V0aW9uRW52aXJvbm1lbnRPcHRpb25zPixcbiAgICB7IGxvY2ssIG91dERpcklzVGVtcG9yYXJ5IH06IHtcbiAgICAgIHJlYWRvbmx5IG91dERpcklzVGVtcG9yYXJ5OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgbG9jazogSVdyaXRlTG9jaztcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLmlvSGVscGVyID0gc2VydmljZXMuaW9IZWxwZXI7XG4gICAgdGhpcy5zZGtQcm92aWRlciA9IHNlcnZpY2VzLnNka1Byb3ZpZGVyO1xuICAgIHRoaXMuZGVidWdGbiA9IChtc2c6IHN0cmluZykgPT4gdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhtc2cpO1xuICAgIHRoaXMubG9jayA9IGxvY2s7XG4gICAgdGhpcy5zaG91bGRDbGVhbiA9IG91dERpcklzVGVtcG9yYXJ5O1xuICAgIHRoaXMub3V0ZGlyID0gb3B0aW9ucy5vdXRkaXI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG4gICAgYXdhaXQgdGhpcy5sb2NrPy5yZWxlYXNlKCk7XG5cbiAgICBpZiAodGhpcy5zaG91bGREaXNwb3NlT3V0RGlyKSB7XG4gICAgICBhd2FpdCBmcy5ybSh0aGlzLm91dGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBleGVjdXRpb24gYXMgc3VjY2Vzc2Z1bCwgd2hpY2ggc3RvcHMgdGhlIHdyaXRlciBsb2NrIGZyb20gYmVpbmcgcmVsZWFzZWQgdXBvbiBkaXNwb3NhbFxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1hcmtTdWNjZXNzZnVsKCkge1xuICAgIGlmICghdGhpcy5sb2NrKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgbWFyayBzdWNjZXNzZnVsIG1vcmUgdGhhbiBvbmNlJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlYWRMb2NrID0gYXdhaXQgdGhpcy5sb2NrLmNvbnZlcnRUb1JlYWRlckxvY2soKTtcbiAgICB0aGlzLmxvY2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zaG91bGRDbGVhbiA9IGZhbHNlO1xuICAgIHJldHVybiB7IHJlYWRMb2NrIH07XG4gIH1cblxuICAvKipcbiAgICogQmVnaW4gYW4gZXhlY3V0aW9uIGluIHRoaXMgZW52aXJvbm1lbnRcbiAgICpcbiAgICogVGhpcyB3aWxsIGFjcXVpcmUgYSB3cml0ZSBsb2NrIG9uIHRoZSBnaXZlbiBlbnZpcm9ubWVudC4gVGhlIHdyaXRlIGxvY2tcbiAgICogd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHJldHVybiBvYmplY3QgaXMgZGlzcG9zZWQsIHVubGVzcyBpdFxuICAgKiBpcyBjb252ZXJ0ZWQgdG8gYSByZWFkZXIgbG9jay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBiZWdpbkV4ZWN1dGlvbigpOiBQcm9taXNlPHsgd3JpdGVUb1JlYWRMb2NrKCk6IFByb21pc2U8SVJlYWRMb2NrPiB9ICYgQXN5bmNEaXNwb3NhYmxlPiB7XG4gICAgY29uc3QgbG9jayA9IGF3YWl0IG5ldyBSV0xvY2sodGhpcy5vdXRkaXIpLmFjcXVpcmVXcml0ZSgpO1xuXG4gICAgbGV0IGNvbnZlcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICBhc3luYyB3cml0ZVRvUmVhZExvY2soKSB7XG4gICAgICAgIGNvbnZlcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBsb2NrLmNvbnZlcnRUb1JlYWRlckxvY2soKTtcbiAgICAgIH0sXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gUmVsZWFzZSBpZiBub3QgY29udmVydGVkXG4gICAgICAgIGlmICghY29udmVydGVkKSB7XG4gICAgICAgICAgYXdhaXQgbG9jay5yZWxlYXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHdWVzcyB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRcbiAgICpcbiAgICogT25seSBkbyB0aGlzIGlmIHRoZSBmaWxlIGlzIE5PVCBtYXJrZWQgYXMgZXhlY3V0YWJsZS4gSWYgaXQgaXMsXG4gICAqIHdlJ2xsIGRlZmVyIHRvIHRoZSBzaGViYW5nIGluc2lkZSB0aGUgZmlsZSBpdHNlbGYuXG4gICAqXG4gICAqIElmIHdlJ3JlIG9uIFdpbmRvd3MsIHdlIEFMV0FZUyB0YWtlIHRoZSBoYW5kbGVyLCBzaW5jZSBpdCdzIGhhcmQgdG9cbiAgICogdmVyaWZ5IGlmIHJlZ2lzdHJ5IGFzc29jaWF0aW9ucyBoYXZlIG9yIGhhdmUgbm90IGJlZW4gc2V0IHVwIGZvciB0aGlzXG4gICAqIGZpbGUgdHlwZSwgc28gd2UnbGwgYXNzdW1lIHRoZSB3b3JzdCBhbmQgdGFrZSBjb250cm9sLlxuICAgKi9cbiAgcHVibGljIGd1ZXNzRXhlY3V0YWJsZShhcHA6IHN0cmluZykge1xuICAgIHJldHVybiBndWVzc0V4ZWN1dGFibGUoYXBwLCB0aGlzLmRlYnVnRm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHdlIGRvbid0IGhhdmUgcmVnaW9uL2FjY291bnQgZGVmaW5lZCBpbiBjb250ZXh0LCB3ZSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgU0RLIGJlaGF2aW9yXG4gICAqIHdoZXJlIHJlZ2lvbiBpcyByZXRyaWV2ZWQgZnJvbSB+Ly5hd3MvY29uZmlnIGFuZCBhY2NvdW50IGlzIGJhc2VkIG9uIGRlZmF1bHQgY3JlZGVudGlhbHMgcHJvdmlkZXJcbiAgICogY2hhaW4gYW5kIHRoZW4gU1RTIGlzIHF1ZXJpZWQuXG4gICAqXG4gICAqIFRoaXMgaXMgZG9uZSBvcHBvcnR1bmlzdGljYWxseTogZm9yIGV4YW1wbGUsIGlmIHdlIGNhbid0IGFjY2VzcyBTVFMgZm9yIHNvbWUgcmVhc29uIG9yIHRoZSByZWdpb25cbiAgICogaXMgbm90IGNvbmZpZ3VyZWQsIHRoZSBjb250ZXh0IHZhbHVlIHdpbGwgYmUgJ251bGwnIGFuZCB0aGVyZSBjb3VsZCBmYWlsdXJlcyBkb3duIHRoZSBsaW5lLiBJblxuICAgKiBzb21lIGNhc2VzLCBzeW50aGVzaXMgZG9lcyBub3QgcmVxdWlyZSByZWdpb24vYWNjb3VudCBpbmZvcm1hdGlvbiBhdCBhbGwsIHNvIHRoYXQgbWlnaHQgYmUgcGVyZmVjdGx5XG4gICAqIGZpbmUgaW4gY2VydGFpbiBzY2VuYXJpb3MuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVmYXVsdEVudlZhcnMoKTogUHJvbWlzZTxFbnY+IHtcbiAgICBjb25zdCBkZWJ1Z0ZuID0gKG1zZzogc3RyaW5nKSA9PiB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTAwMTAubXNnKG1zZykpO1xuICAgIGNvbnN0IGVudiA9IHRoaXMub3B0aW9ucy5yZXNvbHZlRGVmYXVsdEFwcEVudiA/IGF3YWl0IHByZXBhcmVEZWZhdWx0RW52aXJvbm1lbnQodGhpcy5zZGtQcm92aWRlciwgZGVidWdGbikgOiB7fTtcblxuICAgIGVudltjeGFwaS5PVVRESVJfRU5WXSA9IHRoaXMub3V0ZGlyO1xuICAgIGF3YWl0IGRlYnVnRm4oZm9ybWF0KCdvdXRkaXI6JywgdGhpcy5vdXRkaXIpKTtcblxuICAgIC8vIENMSSB2ZXJzaW9uIGluZm9ybWF0aW9uXG4gICAgZW52W2N4YXBpLkNMSV9BU01fVkVSU0lPTl9FTlZdID0gY3hzY2hlbWEuTWFuaWZlc3QudmVyc2lvbigpO1xuICAgIGVudltjeGFwaS5DTElfVkVSU0lPTl9FTlZdID0gdmVyc2lvbk51bWJlcigpO1xuXG4gICAgYXdhaXQgZGVidWdGbihmb3JtYXQoJ2VudjonLCBlbnYpKTtcbiAgICByZXR1cm4gZW52O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjb2RlIGZyb20gYSBkaWZmZXJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VEaXI8VD4oYmxvY2s6ICgpID0+IFByb21pc2U8VD4sIHdvcmtpbmdEaXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcmlnaW5hbFdvcmtpbmdEaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAod29ya2luZ0Rpcikge1xuICAgICAgICBwcm9jZXNzLmNoZGlyKHdvcmtpbmdEaXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgYmxvY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHdvcmtpbmdEaXIpIHtcbiAgICAgICAgcHJvY2Vzcy5jaGRpcihvcmlnaW5hbFdvcmtpbmdEaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIGNvbnRleHQgdG8gYSBzZXQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICpcbiAqIE5lZWRzIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIHJlc3Qgb2YgdGhlIGVudiBiZWNhdXNlIHRoYXQncyBuZWNlc3NhcnkgdG8gZG9cbiAqIGFuIG92ZXJmbG93IGNvbXB1dGF0aW9uIG9uIFdpbmRvd3MuIFRoaXMgZnVuY3Rpb24gd2lsbCBtdXRhdGUgdGhlIGdpdmVuXG4gKiBlbnZpcm9ubWVudCBpbi1wbGFjZS4gSXQgc2hvdWxkIGJlIGNhbGxlZCBhcyB0aGUgdmVyeSBsYXN0IG9wZXJhdGlvbiBvbiB0aGVcbiAqIGVudmlyb25tZW50LCBiZWNhdXNlIGFmdGVyd2FyZHMgaXMgbWlnaHQgYmUgYXQgdGhlIG1heGltdW0gc2l6ZS5cbiAqXG4gKiBUaGlzICp3b3VsZCogaGF2ZSByZXR1cm5lZCBhbiBgSUFzeW5jRGlzcG9zYWJsZWAgYnV0IHRoYXQgcmVxdWlyZXMgbWVzc2luZ1xuICogd2l0aCBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgdG8gdXNlIGl0IGluIGF3cy1jZGssIHNvIHJldHVybmluZyBhblxuICogZXhwbGljaXQgY2xlYW51cCBmdW5jdGlvbiBpcyBlYXNpZXIuXG4gKlxuICogYGNvbXBsZXRlbmVzc2AgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBgZW52YCBibG9jayByZXByZXNlbnRzIHRoZSBmdWxsIGBlbnZgXG4gKiB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGEgc3VicHJvY2Vzcywgb3Igd2hldGhlciBpdCB3aWxsIGJlIG1peGVkIGludG9cbiAqIGBwcm9jZXNzLmVudmAgbGF0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRleHRUb0VudihlbnY6IEVudiwgY29udGV4dDogQ29udGV4dCwgY29tcGxldGVuZXNzOiAnYWRkLXByb2Nlc3MtZW52LWxhdGVyJyB8ICdlbnYtaXMtY29tcGxldGUnKSB7XG4gIGxldCBjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbiA9IG51bGw7XG5cbiAgLy8gT24gV2luZG93cywgYWxsIGVudnZhcnMgdG9nZXRoZXIgbXVzdCBmaXQgaW4gYSAzMmsgYmxvY2sgKDxodHRwczovL2RldmJsb2dzLm1pY3Jvc29mdC5jb20vb2xkbmV3dGhpbmcvMjAxMDAyMDMtMDA+KVxuICAvLyBPbiBMaW51eCwgYSBzaW5nbGUgZW50cnkgbWF5IG5vdCBleGNlZWQgMTMxazsgYnV0IHdlJ3JlIHRyZWF0aW5nIGl0IGFzIGFsbCB0b2dldGhlciBiZWNhdXNlIHRoYXQncyBzYWZlXG4gIC8vIGFuZCBpdCdzIGEgc2luZ2xlIGV4ZWN1dGlvbiBwYXRoIGZvciBib3RoIHBsYXRmb3Jtcy5cbiAgY29uc3QgZW52VmFyaWFibGVTaXplTGltaXQgPSBvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInID8gMzI3NjAgOiAxMzEwNzI7XG5cbiAgY29uc3QgY29tcGxldGVFbnYgPSB7IC4uLmNvbXBsZXRlbmVzcyA9PT0gJ2FkZC1wcm9jZXNzLWVudi1sYXRlcicgPyBwcm9jZXNzLmVudiA6IHt9LCAuLi5lbnYgfTtcbiAgY29uc3QgW3NtYWxsQ29udGV4dCwgb3ZlcmZsb3ddID0gc3BsaXRCeVNpemUoY29udGV4dCwgc3BhY2VBdmFpbGFibGVGb3JDb250ZXh0KGNvbXBsZXRlRW52LCBlbnZWYXJpYWJsZVNpemVMaW1pdCkpO1xuXG4gIC8vIFN0b3JlIHRoZSBzYWZlIHBhcnQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4gIGVudltjeGFwaS5DT05URVhUX0VOVl0gPSBKU09OLnN0cmluZ2lmeShzbWFsbENvbnRleHQpO1xuXG4gIC8vIElmIHRoZXJlIHdhcyBhbnkgb3ZlcmZsb3csIHdyaXRlIGl0IHRvIGEgdGVtcG9yYXJ5IGZpbGVcbiAgaWYgKE9iamVjdC5rZXlzKG92ZXJmbG93ID8/IHt9KS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY29udGV4dERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1jb250ZXh0JykpO1xuICAgIGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uID0gcGF0aC5qb2luKGNvbnRleHREaXIsICdjb250ZXh0LW92ZXJmbG93Lmpzb24nKTtcbiAgICBmcy53cml0ZUpTT05TeW5jKGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uLCBvdmVyZmxvdyk7XG4gICAgZW52W2N4YXBpLkNPTlRFWFRfT1ZFUkZMT1dfTE9DQVRJT05fRU5WXSA9IGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBpZiAoY29udGV4dE92ZXJmbG93TG9jYXRpb24pIHtcbiAgICAgIGF3YWl0IGZzLnByb21pc2VzLnJtKHBhdGguZGlybmFtZShjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbiksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYXNzZW1ibHkgc3VwcG9ydHMgY29udGV4dCBvdmVyZmxvdywgd2FybiBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIGFzc2VtYmx5IC0gdGhlIGFzc2VtYmx5IHRvIGNoZWNrXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrQ29udGV4dE92ZXJmbG93U3VwcG9ydChhc3NlbWJseTogY3hhcGkuQ2xvdWRBc3NlbWJseSwgaW9IZWxwZXI6IElvSGVscGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYWNlRm4gPSAobXNnOiBzdHJpbmcpID0+IGlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKG1zZyk7XG4gIGNvbnN0IHRyZWUgPSBhd2FpdCBsb2FkVHJlZShhc3NlbWJseSwgdHJhY2VGbik7XG5cbiAgLy8gV2UncmUgZGVhbGluZyB3aXRoIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBmcmFtZXdvcmsgaGVyZS4gSXQgaXMgdW5hd2FyZSBvZiB0aGUgdGVtcG9yYXJ5XG4gIC8vIGZpbGUsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBpZ25vcmUgdGhlIGNvbnRleHQgb3ZlcmZsb3cuXG4gIGlmICghZnJhbWV3b3JrU3VwcG9ydHNDb250ZXh0T3ZlcmZsb3codHJlZSkpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX1cwMDEwLm1zZygnUGFydCBvZiB0aGUgY29udGV4dCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUgYXBwbGljYXRpb24uIFBsZWFzZSB1cGRhdGUgdGhlIEFXUyBDREsgbGlicmFyeSB0byB0aGUgbGF0ZXN0IHZlcnNpb24uJykpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBmcmFtZXdvcmsgc3VwcG9ydHMgY29udGV4dCBvdmVyZmxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gZnJhbWV3b3JrU3VwcG9ydHNDb250ZXh0T3ZlcmZsb3codHJlZTogQ29uc3RydWN0VHJlZU5vZGUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuICFzb21lKHRyZWUsIG5vZGUgPT4ge1xuICAgIGNvbnN0IGZxbiA9IG5vZGUuY29uc3RydWN0SW5mbz8uZnFuO1xuICAgIGNvbnN0IHZlcnNpb24gPSBub2RlLmNvbnN0cnVjdEluZm8/LnZlcnNpb247XG4gICAgcmV0dXJuIChcbiAgICAgIGZxbiA9PT0gJ2F3cy1jZGstbGliLkFwcCcgLy8gdjIgYXBwXG4gICAgICAmJiB2ZXJzaW9uICE9PSAnMC4wLjAnIC8vIGlnbm9yZSBkZXZlbG9wZXIgYnVpbGRzXG4gICAgICAmJiB2ZXJzaW9uICE9IG51bGwgJiYgbHRlKHZlcnNpb24sICcyLjM4LjAnKSAvLyBsYXN0IHZlcnNpb24gbm90IHN1cHBvcnRpbmcgbGFyZ2UgY29udGV4dFxuICAgICkgLy8gdjJcbiAgICB8fCBmcW4gPT09ICdAYXdzLWNkay9jb3JlLkFwcCc7IC8vIHYxIGFwcCA9PiBub3Qgc3VwcG9ydGVkXG4gIH0pO1xufVxuXG4vKipcbiAqIFNhZmVseSBjcmVhdGUgYW4gYXNzZW1ibHkgZnJvbSBhIGNsb3VkIGFzc2VtYmx5IGRpcmVjdG9yeVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZW1ibHlGcm9tRGlyZWN0b3J5KGFzc2VtYmx5RGlyOiBzdHJpbmcsIGlvSGVscGVyOiBJb0hlbHBlciwgbG9hZE9wdGlvbnM6IExvYWRBc3NlbWJseU9wdGlvbnMgPSB7fSkge1xuICB0cnkge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gbmV3IGN4YXBpLkNsb3VkQXNzZW1ibHkoYXNzZW1ibHlEaXIsIHtcbiAgICAgIHNraXBWZXJzaW9uQ2hlY2s6ICEobG9hZE9wdGlvbnMuY2hlY2tWZXJzaW9uID8/IHRydWUpLFxuICAgICAgc2tpcEVudW1DaGVjazogIShsb2FkT3B0aW9ucy5jaGVja0VudW1zID8/IHRydWUpLFxuICAgICAgLy8gV2Ugc29ydCBhcyB3ZSBkZXBsb3lcbiAgICAgIHRvcG9Tb3J0OiBmYWxzZSxcbiAgICB9KTtcbiAgICBhd2FpdCBjaGVja0NvbnRleHRPdmVyZmxvd1N1cHBvcnQoYXNzZW1ibHksIGlvSGVscGVyKTtcbiAgICByZXR1cm4gYXNzZW1ibHk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKGN4c2NoZW1hLlZFUlNJT05fTUlTTUFUQ0gpKSB7XG4gICAgICAvLyB0aGlzIG1lYW5zIHRoZSBDTEkgdmVyc2lvbiBpcyB0b28gb2xkLlxuICAgICAgLy8gd2UgaW5zdHJ1Y3QgdGhlIHVzZXIgdG8gdXBncmFkZS5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnVGhpcyBBV1MgQ0RLIFRvb2xraXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgQVdTIENESyBsaWJyYXJ5IHVzZWQgYnkgeW91ciBhcHBsaWNhdGlvbi4gUGxlYXNlIHVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLic7XG4gICAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0UxMTExLm1zZyhtZXNzYWdlLCB7IGVycm9yOiBlcnIgfSkpO1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgJHttZXNzYWdlfVxcbigke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzRnJvbVN5bnRoT3B0aW9ucyhzeW50aE9wdHM6IEFwcFN5bnRoT3B0aW9ucyA9IHt9KTogU2V0dGluZ3Mge1xuICByZXR1cm4gbmV3IFNldHRpbmdzKHtcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgcGF0aE1ldGFkYXRhOiB0cnVlLFxuICAgIHZlcnNpb25SZXBvcnRpbmc6IHRydWUsXG4gICAgYXNzZXRNZXRhZGF0YTogdHJ1ZSxcbiAgICBhc3NldFN0YWdpbmc6IHRydWUsXG4gICAgLi4uc3ludGhPcHRzLFxuICB9LCB0cnVlKTtcbn1cblxuLyoqXG4gKiBUdXJuIHN5bnRoZXNpcyBvcHRpb25zIGludG8gY29udGV4dC9lbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3aWxsIGdvIHRvIHRoZSBDREsgYXBwXG4gKlxuICogVGhlc2UgYXJlIHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIHRoZSBzeW50aGVzaXMgb3BlcmF0aW9uLCBjb25maWd1cmFibGUgYnkgdGhlIHVzZXJcbiAqIGZyb20gdGhlIG91dHNpZGUgb2YgdGhlIGFwcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tU3ludGhPcHRpb25zKHN5bnRoT3B0aW9ucz86IEFwcFN5bnRoT3B0aW9ucykge1xuICByZXR1cm4gc3ludGhQYXJhbWV0ZXJzRnJvbVNldHRpbmdzKHNldHRpbmdzRnJvbVN5bnRoT3B0aW9ucyhzeW50aE9wdGlvbnMgPz8ge30pKTtcbn1cbiJdfQ==
|
|
@@ -92,6 +92,17 @@ export interface AssemblySourceProps {
|
|
|
92
92
|
* @default - `true` if `outdir` is not given, `false` otherwise
|
|
93
93
|
*/
|
|
94
94
|
readonly disposeOutdir?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Resolve the current default environment an provide as environment variables to the app.
|
|
97
|
+
*
|
|
98
|
+
* This will make a (cached) call to STS to resolve the current account using
|
|
99
|
+
* base credentials. The behavior is not always desirable and can add
|
|
100
|
+
* unnecessary delays, e.g. when an app specifies an environment explicitly
|
|
101
|
+
* or when local actions are be performed without internet access.
|
|
102
|
+
*
|
|
103
|
+
* @default true
|
|
104
|
+
*/
|
|
105
|
+
readonly resolveDefaultEnvironment?: boolean;
|
|
95
106
|
}
|
|
96
107
|
/**
|
|
97
108
|
* Options for the `fromAssemblyBuilder` Assembly Source constructor
|
|
@@ -107,7 +107,10 @@ class CloudAssemblySourceBuilder {
|
|
|
107
107
|
produce: async () => {
|
|
108
108
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
109
109
|
try {
|
|
110
|
-
const execution = __addDisposableResource(env_1, await prepare_source_1.ExecutionEnvironment.create(services, {
|
|
110
|
+
const execution = __addDisposableResource(env_1, await prepare_source_1.ExecutionEnvironment.create(services, {
|
|
111
|
+
outdir,
|
|
112
|
+
resolveDefaultAppEnv: props.resolveDefaultEnvironment ?? true,
|
|
113
|
+
}), true);
|
|
111
114
|
const synthParams = (0, prepare_source_1.parametersFromSynthOptions)(props.synthOptions);
|
|
112
115
|
const fullContext = {
|
|
113
116
|
...await contextStore.read(),
|
|
@@ -146,7 +149,7 @@ class CloudAssemblySourceBuilder {
|
|
|
146
149
|
? assembly
|
|
147
150
|
: await (0, prepare_source_1.assemblyFromDirectory)(assembly.directory, services.ioHelper, props.loadAssemblyOptions);
|
|
148
151
|
const success = await execution.markSuccessful();
|
|
149
|
-
const deleteOnDispose = props.disposeOutdir ?? execution.
|
|
152
|
+
const deleteOnDispose = props.disposeOutdir ?? execution.shouldDisposeOutDir;
|
|
150
153
|
return new readable_assembly_1.ReadableCloudAssembly(asm, success.readLock, { deleteOnDispose });
|
|
151
154
|
}
|
|
152
155
|
catch (e_1) {
|
|
@@ -242,18 +245,16 @@ class CloudAssemblySourceBuilder {
|
|
|
242
245
|
produce: async () => {
|
|
243
246
|
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
244
247
|
try {
|
|
245
|
-
// @todo build
|
|
246
|
-
// const build = this.props.configuration.settings.get(['build']);
|
|
247
|
-
// if (build) {
|
|
248
|
-
// await execInChildProcess(build, { cwd: props.workingDirectory });
|
|
249
|
-
// }
|
|
250
248
|
try {
|
|
251
249
|
fs.mkdirpSync(outdir);
|
|
252
250
|
}
|
|
253
251
|
catch (e) {
|
|
254
252
|
throw new toolkit_error_1.ToolkitError(`Could not create output directory at '${outdir}' (${e.message}).`);
|
|
255
253
|
}
|
|
256
|
-
const execution = __addDisposableResource(env_2, await prepare_source_1.ExecutionEnvironment.create(services, {
|
|
254
|
+
const execution = __addDisposableResource(env_2, await prepare_source_1.ExecutionEnvironment.create(services, {
|
|
255
|
+
outdir,
|
|
256
|
+
resolveDefaultAppEnv: props.resolveDefaultEnvironment ?? true,
|
|
257
|
+
}), true);
|
|
257
258
|
const commandLine = await execution.guessExecutable(app);
|
|
258
259
|
const synthParams = (0, prepare_source_1.parametersFromSynthOptions)(props.synthOptions);
|
|
259
260
|
const fullContext = {
|
|
@@ -294,7 +295,7 @@ class CloudAssemblySourceBuilder {
|
|
|
294
295
|
}
|
|
295
296
|
const asm = await (0, prepare_source_1.assemblyFromDirectory)(outdir, services.ioHelper, props.loadAssemblyOptions);
|
|
296
297
|
const success = await execution.markSuccessful();
|
|
297
|
-
const deleteOnDispose = props.disposeOutdir ?? execution.
|
|
298
|
+
const deleteOnDispose = props.disposeOutdir ?? execution.shouldDisposeOutDir;
|
|
298
299
|
return new readable_assembly_1.ReadableCloudAssembly(asm, success.readLock, { deleteOnDispose });
|
|
299
300
|
}
|
|
300
301
|
catch (e_2) {
|
|
@@ -311,4 +312,4 @@ class CloudAssemblySourceBuilder {
|
|
|
311
312
|
}
|
|
312
313
|
}
|
|
313
314
|
exports.CloudAssemblySourceBuilder = CloudAssemblySourceBuilder;
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLCtCQUE4QjtBQUU5Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLG1EQUF3RjtBQUN4RixzQ0FBbUM7QUFDbkMsbURBQXNEO0FBRXRELHlFQUFpRjtBQUNqRix5Q0FBb0Q7QUFDcEQsNkRBQXNJO0FBQ3RJLG1FQUFvRTtBQUdwRSwrREFBMEU7QUFDMUUscUNBQXlDO0FBQ3pDLDJDQUFtQztBQUNuQywrQ0FBNEU7QUFtUTVFLE1BQXNCLDBCQUEwQjtJQU85Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bd0JHO0lBQ0ksS0FBSyxDQUFDLG1CQUFtQixDQUM5QixPQUF3QixFQUN4QixRQUFvQyxFQUFFO1FBRXRDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLDZCQUFhLEVBQUUsQ0FBQztRQUMvRCxNQUFNLG9CQUFvQixHQUFtQztZQUMzRCxRQUFRO1lBQ1IsWUFBWTtZQUNaLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVyRSxPQUFPLElBQUksc0RBQStCLENBQ3hDO1lBQ0UsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFOzs7b0JBQ2xCLE1BQVksU0FBUyxrQ0FBRyxNQUFNLHFDQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVB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QUMsQ0FBQyxDQUFDO3dDQUNoRSxNQUFNO29DQUNSLEtBQUssYUFBYTt3Q0FDaEIsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQ2hFLE1BQU07Z0NBQ1YsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELEdBQUc7NEJBQ0gsR0FBRyxFQUFFLGdCQUFnQjt5QkFDdEIsQ0FBQyxDQUFDO29CQUNMLENBQUM7NEJBQVMsQ0FBQzt3QkFDVCxNQUFNLFdBQVcsRUFBRSxDQUFDO29CQUN0QixDQUFDO29CQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxzQ0FBcUIsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFFOUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ2pELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDO29CQUMzRSxPQUFPLElBQUkseUNBQXFCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7Ozs7OzthQUM5RTtTQUNGLEVBQ0Qsb0JBQW9CLENBQ3JCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE3UEQsZ0VBNlBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IENka0FwcE11bHRpQ29udGV4dCwgTWVtb3J5Q29udGV4dCwgdHlwZSBJQ29udGV4dFN0b3JlIH0gZnJvbSAnLi9jb250ZXh0LXN0b3JlJztcbmltcG9ydCB7IFJXTG9jayB9IGZyb20gJy4uL3J3bG9jayc7XG5pbXBvcnQgeyBDYWNoZWRDbG91ZEFzc2VtYmx5IH0gZnJvbSAnLi9jYWNoZWQtc291cmNlJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVByb3BzIH0gZnJvbSAnLi9wcml2YXRlL2NvbnRleHQtYXdhcmUtc291cmNlJztcbmltcG9ydCB7IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlTb3VyY2UgfSBmcm9tICcuL3ByaXZhdGUvY29udGV4dC1hd2FyZS1zb3VyY2UnO1xuaW1wb3J0IHsgZXhlY0luQ2hpbGRQcm9jZXNzIH0gZnJvbSAnLi9wcml2YXRlL2V4ZWMnO1xuaW1wb3J0IHsgRXhlY3V0aW9uRW52aXJvbm1lbnQsIGFzc2VtYmx5RnJvbURpcmVjdG9yeSwgcGFyYW1ldGVyc0Zyb21TeW50aE9wdGlvbnMsIHdyaXRlQ29udGV4dFRvRW52IH0gZnJvbSAnLi9wcml2YXRlL3ByZXBhcmUtc291cmNlJztcbmltcG9ydCB7IFJlYWRhYmxlQ2xvdWRBc3NlbWJseSB9IGZyb20gJy4vcHJpdmF0ZS9yZWFkYWJsZS1hc3NlbWJseSc7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEFzc2VtYmx5U291cmNlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xraXRTZXJ2aWNlcyB9IGZyb20gJy4uLy4uL3Rvb2xraXQvcHJpdmF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IsIEFzc2VtYmx5RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgbm9VbmRlZmluZWQgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IElPIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBtaXNzaW5nQ29udGV4dEtleXMsIHRlbXBvcmFyaWx5V3JpdGVFbnYgfSBmcm9tICcuL3ByaXZhdGUvaGVscGVycyc7XG5cbi8qKlxuICogUHJvcGVydGllcyB0aGUgYnVpbGRlciBmdW5jdGlvbiByZWNlaXZlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlbWJseUJ1aWxkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0IGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRvIHRoZSBidWlsZGVyIGFwcCB3aWxsIGVtaXQgc3ludGhlc2l6ZWQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0ZGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBwcm92aWRlZCB0cCB0aGUgYnVpbGRlciBhcHAgdG8gc3ludGhlc2l6ZSB0aGUgQ2xvdWQgQXNzZW1ibHksIGluY2x1ZGluZyBsb29rZWQtdXAgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdGhhdCB3b3VsZCBub3JtYWxseSBiZSBwYXNzZWQgdG8gYSBDREsgYXBwIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKlxuICAgKiBUaGlzIGNvbnRhaW5zIHZhcmlhYmxlcyBpbnRlbmRlZCBmb3IgdGhlIHVzZXIgcG9ydGlvbiBvZiBhIENESyBhcHAgKG5vdGFibHlcbiAgICogYENES19ERUZBVUxUX0FDQ09VTlRgIGFuZCBgQ0RLX0RFRkFVTFRfUkVHSU9OYCksIHdoaWNoIHlvdSBjYW4gZnJlZWx5IHJlYWQuXG4gICAqXG4gICAqIEl0IGFsc28gY29udGFpbnMgdmFyaWFibGVzIGludGVuZGVkIGZvciB0aGUgQ0RLIFRvb2xraXQgdG8gY29tbXVuaWNhdGUgd2l0aFxuICAgKiB0aGUgaW50ZXJuYWxzIG9mIHRoZSBjb25zdHJ1Y3QgbGlicmFyeSwgbGlrZSBgQ0RLX0RFQlVHYCBhbmRcbiAgICogYENES19DTElfQVNNX1ZFUlNJT05gLiBSZWFkaW5nIHRoZXNlIGxhdHRlciB2YXJpYWJsZXMgaXMgcG9zc2libGUgYnV0IG5vdFxuICAgKiByZWNvbW1lbmRlZCwgYXMgdGhlaXIgbWVhbmluZyBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBzeW50aGVzaXMgcGFyYW1ldGVycyBhbmQgcHJvZHVjZXMgYSBDbG91ZCBBc3NlbWJseVxuICpcbiAqIE1vc3QgdHlwaWNhbGx5LCB0aGUgcHJvcGVydGllcyBwYXNzZWQgaGVyZSB3aWxsIGJlIHVzZWQgdG8gY29uc3RydWN0IGFcbiAqIGBjZGsuQXBwYCwgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgYXBwLnN5bnRoKClgLlxuICovXG5leHBvcnQgdHlwZSBBc3NlbWJseUJ1aWxkZXIgPSAocHJvcHM6IEFzc2VtYmx5QnVpbGRlclByb3BzKSA9PiBQcm9taXNlPGN4c2NoZW1hLklDbG91ZEFzc2VtYmx5PjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIENMSSBmcm9tIGFuIEFXUyBDREsgQXBwIGRpcmVjdG9yeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2VtYmx5RGlyZWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogT3B0aW9ucyB0byBjb25maWd1cmUgbG9hZGluZyBvZiB0aGUgYXNzZW1ibHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc3ludGhlc2l6ZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRBc3NlbWJseU9wdGlvbnM/OiBMb2FkQXNzZW1ibHlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBmYWlsIGlmIHRoZSBzeW50aGVzaXplZCBhc3NlbWJseSBjb250YWluc1xuICAgKiBtaXNzaW5nIGNvbnRleHRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbE9uTWlzc2luZ0NvbnRleHQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIGEgQ0xJIGZyb20gYW4gQVdTIENESyBBcHAgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZW1ibHlTb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc3ludGhlc2l6ZWQgY2xvdWQgYXNzZW1ibHkgaW50byB0aGUgZ2l2ZW4gZGlyZWN0b3J5XG4gICAqXG4gICAqIEBkZWZhdWx0IFwiY2RrLm91dFwiXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gY29udGV4dCBsb29rdXBzLlxuICAgKlxuICAgKiBTeW50aGVzaXMgZmFpbHMgaWYgdGhpcyBpcyBkaXNhYmxlZCBhbmQgY29udGV4dCBsb29rdXBzIG5lZWQgdG8gYmUgcGVyZm9ybWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBjb250ZXh0IHN0b3JlIGZvciB0aGlzIG9wZXJhdGlvblxuICAgKlxuICAgKiBUaGUgY29udGV4dCBzdG9yZSB3aWxsIGJlIHVzZWQgdG8gc291cmNlIGluaXRpYWwgY29udGV4dCB2YWx1ZXMsXG4gICAqIGFuZCB1cGRhdGVkIHZhbHVlcyB3aWxsIGJlIHN0b3JlZCBoZXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlcGVuZHMgb24gdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dFN0b3JlPzogSUNvbnRleHRTdG9yZTtcblxuICAvKipcbiAgICogT3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdGhyb3VnaCB0aGUgY29udGV4dCB0byBhIENESyBhcHAgb24gc3ludGhcbiAgICovXG4gIHJlYWRvbmx5IHN5bnRoT3B0aW9ucz86IEFwcFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9ucyB0byBjb25maWd1cmUgbG9hZGluZyBvZiB0aGUgYXNzZW1ibHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc3ludGhlc2l6ZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRBc3NlbWJseU9wdGlvbnM/OiBMb2FkQXNzZW1ibHlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGBvdXRkaXJgIHdoZW4gdGhlIGFzc2VtYmx5IGlzIGRpc3Bvc2VkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHRydWVgIGlmIGBvdXRkaXJgIGlzIG5vdCBnaXZlbiwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2VPdXRkaXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBgZnJvbUFzc2VtYmx5QnVpbGRlcmAgQXNzZW1ibHkgU291cmNlIGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbUFzc2VtYmx5QnVpbGRlck9wdGlvbnMgZXh0ZW5kcyBBc3NlbWJseVNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIE11dGF0ZSBjdXJyZW50IHByb2Nlc3MnIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjb21tdW5pY2F0ZSB3aXRoIENESyBhcHBcbiAgICpcbiAgICogVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGUgVG9vbGtpdCB1c2VzIHRvIHBhc3NcbiAgICogaW5mb3JtYXRpb24gdG8gdGhlIENESyBhcHAuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGN1cnJlbnRcbiAgICogcHJvY2VzcycgZ2xvYmFsIHNoYXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYmVmb3JlIHRoZSBidWlsZGVyIGlzIGludm9rZWQsXG4gICAqIGFuZCB5b3UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBlbHNlLiBIb3dldmVyLCBiZWNhdXNlIHRoaXMgbXV0YXRlc1xuICAgKiBzaGFyZWQgc3RhdGUgaXQgaXMgbm90IHNhZmUgdG8gcnVuIG11bHRpcGxlIGJ1aWxkZXJzIGNvbmN1cnJlbnRseS5cbiAgICpcbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBhdm9pZCBtdXRhdGluZyB0aGUgc2hhcmVkIGVudmlyb25tZW50LiBJbnN0ZWFkLFxuICAgKiB5b3Ugd2lsbCBuZWVkIHRvIHBhc3MgdGhlIGBvdXRkaXJgIGFuZCBgY29udGV4dGAgdG8gdGhlIGBBcHBgIGNvbnN0cnVjdG9yXG4gICAqIGRpcmVjdGx5IGluIHlvdXIgYnVpbGRlciwgYW5kIGluc3BlY3QgdGhlIGBlbnZgIG1hcCBkaXJlY3RseVxuICAgKiBmb3IgaW5mb3JtYXRpb24gbGlrZSB0aGUgYENES19ERUZBVUxUX0FDQ09VTlRgIGFuZCBgQ0RLX0RFRkFVTFRfUkVHSU9OYC5cbiAgICpcbiAgICogYGBgdHNcbiAgICogY29uc3QgY3ggPSBhd2FpdCB0b29sa2l0LmZyb21Bc3NlbWJseUJ1aWxkZXIoYXN5bmMgKHByb3BzKSA9PiB7XG4gICAqICAgLy8gSW1wb3J0YW50OiBwYXNzIG9uIHN5bnRoZXNpcyBwYXJhbWV0ZXJzXG4gICAqICAgY29uc3QgYXBwID0gbmV3IGNvcmUuQXBwKHtcbiAgICogICAgIG91dGRpcjogcHJvcHMub3V0ZGlyLFxuICAgKiAgICAgY29udGV4dDogcHJvcHMuY29udGV4dCxcbiAgICogICB9KTtcbiAgICpcbiAgICogICBuZXcgTXlTdGFjayhhcHAsICdNeVN0YWNrJywge1xuICAgKiAgICAgZW52OiB7XG4gICAqICAgICAgIGFjY291bnQ6IHByb3BzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5ULFxuICAgKiAgICAgICByZWdpb246IHByb3BzLmVudi5DREtfREVGQVVMVF9SRUdJT04sXG4gICAqICAgICB9LFxuICAgKiAgIH0pO1xuICAgKlxuICAgKiAgIC8vIC4uLlxuICAgKiB9LCB7XG4gICAqICAgY2xvYmJlckVudjogZmFsc2UsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2xvYmJlckVudj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGBmcm9tQ2RrQXBwYCBBc3NlbWJseSBTb3VyY2UgY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9tQ2RrQXBwT3B0aW9ucyBleHRlbmRzIEFzc2VtYmx5U291cmNlUHJvcHMge1xuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgYXBwbGljYXRpb24gaW4gdGhpcyB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKlxuICAgKiBUaGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBiZSBzZXQgaW4gYWRkaXRpb24gdG8gdGhlIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlcyBjdXJyZW50bHkgc2V0IGluIHRoZSBwcm9jZXNzLiBBIHZhbHVlIG9mIGB1bmRlZmluZWRgIHdpbGxcbiAgICogdW5zZXQgYSBwYXJ0aWN1bGFyIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbn1cblxuLyoqXG4gKiBTZXR0aW5ncyB0aGF0IGFyZSBwYXNzZWQgdG8gYSBDREsgYXBwIHZpYSB0aGUgY29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcFN5bnRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZWJ1ZyB0aGUgQ0RLIGFwcC5cbiAgICogTG9ncyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGR1cmluZyBzeW50aGVzaXMsIHN1Y2ggYXMgY3JlYXRpb24gc3RhY2sgdHJhY2VzIG9mIHRva2Vucy5cbiAgICogVGhpcyBhbHNvIHNldHMgdGhlIGBDREtfREVCVUdgIGVudiB2YXJpYWJsZSBhbmQgd2lsbCBzbG93IGRvd24gc3ludGhlc2lzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBlbWJlZGRpbmcgb2YgdGhlIFwiYXdzOmNkazpwYXRoXCIgaW4gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhNZXRhZGF0YT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgY29sbGVjdGlvbiBhbmQgcmVwb3J0aW5nIG9mIHZlcnNpb24gaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb25SZXBvcnRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGUgZW5hYmxlZCwgYGF3czphc3NldDp4eHhgIG1ldGFkYXRhIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZS5cbiAgICpcbiAgICogRGlzYWJsaW5nIHRoaXMgY2FuIGJlIHVzZWZ1bCBpbiBjZXJ0YWluIGNhc2VzIGxpa2UgaW50ZWdyYXRpb24gdGVzdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TWV0YWRhdGE/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgYXNzZXQgc3RhZ2luZy5cbiAgICpcbiAgICogRGlzYWJsaW5nIGFzc2V0IHN0YWdpbmcgbWVhbnMgdGhhdCBjb3B5YWJsZSBhc3NldHMgd2lsbCBub3QgYmUgY29waWVkIHRvIHRoZVxuICAgKiBvdXRwdXQgZGlyZWN0b3J5IGFuZCB3aWxsIGJlIHJlZmVyZW5jZWQgd2l0aCBhYnNvbHV0ZSBwYXRocy5cbiAgICpcbiAgICogTm90IGNvcGllZCB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeTogdGhpcyBpcyBzbyB1c2VycyBjYW4gaXRlcmF0ZSBvbiB0aGVcbiAgICogTGFtYmRhIHNvdXJjZSBhbmQgcnVuIFNBTSBDTEkgd2l0aG91dCBoYXZpbmcgdG8gcmUtcnVuIENESyAobm90ZTogd2VcbiAgICogY2Fubm90IGFjaGlldmUgdGhpcyBmb3IgYnVuZGxlZCBhc3NldHMsIGlmIGFzc2V0cyBhcmUgYnVuZGxlZCB0aGV5XG4gICAqIHdpbGwgaGF2ZSB0byByZS1ydW4gQ0RLIENMSSB0byByZS1idW5kbGUgdXBkYXRlZCB2ZXJzaW9ucykuXG4gICAqXG4gICAqIEFic29sdXRlIHBhdGg6IFNBTSBDTEkgZXhwZWN0cyBgY3dkYC1yZWxhdGl2ZSBwYXRocyBpbiBhIHJlc291cmNlJ3NcbiAgICogYGF3czphc3NldDpwYXRoYCBtZXRhZGF0YS4gSW4gb3JkZXIgdG8gYmUgcHJlZGljdGFibGUsIHdlIHdpbGwgYWx3YXlzIG91dHB1dFxuICAgKiBhYnNvbHV0ZSBwYXRocy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRTdGFnaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VsZWN0IHdoaWNoIHN0YWNrcyBzaG91bGQgaGF2ZSBhc3NldCBidW5kbGluZyBlbmFibGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IFtcIioqXCJdIC0gYWxsIHN0YWNrc1xuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxpbmdGb3JTdGFja3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBjb25maWd1cmUgbG9hZGluZyBvZiB0aGUgYXNzZW1ibHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc3ludGhlc2l6ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQXNzZW1ibHlPcHRpb25zIHtcbiAgLyoqXG4gICAqIENoZWNrIHRoZSBUb29sa2l0IHN1cHBvcnRzIHRoZSBDbG91ZCBBc3NlbWJseSBTY2hlbWEgdmVyc2lvblxuICAgKlxuICAgKiBXaGVuIGRpc2FibGVkLCBhbGxvd3MgdG8gVG9vbGtpdCB0byByZWFkIGEgbmV3ZXIgY2xvdWQgYXNzZW1ibHkgdGhhbiB0aGUgQ1ggQVBJIGlzIGRlc2lnbmVkXG4gICAqIHRvIHN1cHBvcnQuIFlvdXIgYXBwbGljYXRpb24gbWF5IG5vdCBiZSBhd2FyZSBvZiBhbGwgZmVhdHVyZXMgdGhhdCBpbiB1c2UgaW4gdGhlIENsb3VkIEFzc2VtYmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjaGVja1ZlcnNpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBlbnVtcyB0byBvbmx5IGhhdmUga25vd24gdmFsdWVzXG4gICAqXG4gICAqIFdoZW4gZGlzYWJsZWQsIHRoZSBUb29sa2l0IG1heSByZWFkIGVudW0gdmFsdWVzIGl0IGRvZXNuJ3Qga25vdyBhYm91dCB5ZXQuXG4gICAqIFlvdSB3aWxsIGhhdmUgdG8gbWFrZSBzdXJlIHRvIGFsd2F5cyBjaGVjayB0aGUgdmFsdWVzIG9mIGVudW1zIHlvdSBlbmNvdW50ZXIgaW4gdGhlIG1hbmlmZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjaGVja0VudW1zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsb3VkQXNzZW1ibHlTb3VyY2VCdWlsZGVyIHtcbiAgLyoqXG4gICAqIEhlbHBlciB0byBwcm92aWRlIHRoZSBDbG91ZEFzc2VtYmx5U291cmNlQnVpbGRlciB3aXRoIHJlcXVpcmVkIHRvb2xraXQgc2VydmljZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc291cmNlQnVpbGRlclNlcnZpY2VzKCk6IFByb21pc2U8VG9vbGtpdFNlcnZpY2VzPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWQgQXNzZW1ibHkgZnJvbSBhIENsb3VkIEFzc2VtYmx5IGJ1aWxkZXIgZnVuY3Rpb24uXG4gICAqXG4gICAqICMjIE91dGRpclxuICAgKlxuICAgKiBJZiBubyBvdXRwdXQgZGlyZWN0b3J5IGlzIGdpdmVuLCBpdCB3aWxsIHN5bnRoZXNpemUgaW50byBhIHRlbXBvcmFyeSBzeXN0ZW1cbiAgICogZGlyZWN0b3J5LiBUaGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3aWxsIGJlIGNsZWFuZWQgdXAsIHVubGVzc1xuICAgKiBgZGlzcG9zZU91dGRpcjogZmFsc2VgLlxuICAgKlxuICAgKiBBIHdyaXRlIGxvY2sgd2lsbCBiZSBhY3F1aXJlZCBvbiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGR1cmF0aW9uIG9mXG4gICAqIHRoZSBDREsgYXBwIHN5bnRoZXNpcyAod2hpY2ggbWVhbnMgdGhhdCBubyB0d28gYXBwcyBjYW4gc3ludGhlc2l6ZSBhdCB0aGVcbiAgICogc2FtZSB0aW1lKSwgYW5kIGFmdGVyIHN5bnRoZXNpcyBhIHJlYWQgbG9jayB3aWxsIGJlIGFjcXVpcmVkIG9uIHRoZVxuICAgKiBkaXJlY3RvcnkuIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSB0aGUgQ2xvdWRBc3NlbWJseSBpcyBiZWluZyB1c2VkLCBubyBDREtcbiAgICogYXBwIHN5bnRoZXNpcyBjYW4gdGFrZSBwbGFjZSBpbnRvIHRoYXQgZGlyZWN0b3J5LlxuICAgKlxuICAgKiAjIyBDb250ZXh0XG4gICAqXG4gICAqIElmIG5vIGBjb250ZXh0U3RvcmVgIGlzIGdpdmVuLCBhIGBNZW1vcnlDb250ZXh0YCB3aWxsIGJlIHVzZWQuIFRoaXMgbWVhbnNcbiAgICogbm8gcHJvdmlkZXIgbG9va3VwcyB3aWxsIGJlIHBlcnNpc3RlZCBhbnl3aGVyZSBieSBkZWZhdWx0LiBVc2UgYSBkaWZmZXJlbnRcbiAgICogdHlwZSBvZiBjb250ZXh0IHN0b3JlIGlmIHlvdSB3YW50IHBlcnNpc3RlbmNlIGJldHdlZW4gc3ludGggb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGJ1aWxkZXIgLSB0aGUgYnVpbGRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0gcHJvcHMgLSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyB0aGUgQ2xvdWRBc3NlbWJseSBzb3VyY2VcbiAgICovXG4gIHB1YmxpYyBhc3luYyBmcm9tQXNzZW1ibHlCdWlsZGVyKFxuICAgIGJ1aWxkZXI6IEFzc2VtYmx5QnVpbGRlcixcbiAgICBwcm9wczogRnJvbUFzc2VtYmx5QnVpbGRlck9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxJQ2xvdWRBc3NlbWJseVNvdXJjZT4ge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gYXdhaXQgdGhpcy5zb3VyY2VCdWlsZGVyU2VydmljZXMoKTtcbiAgICBjb25zdCBjb250ZXh0U3RvcmUgPSBwcm9wcy5jb250ZXh0U3RvcmUgPz8gbmV3IE1lbW9yeUNvbnRleHQoKTtcbiAgICBjb25zdCBjb250ZXh0QXNzZW1ibHlQcm9wczogQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVByb3BzID0ge1xuICAgICAgc2VydmljZXMsXG4gICAgICBjb250ZXh0U3RvcmUsXG4gICAgICBsb29rdXBzOiBwcm9wcy5sb29rdXBzLFxuICAgIH07XG5cbiAgICBjb25zdCBvdXRkaXIgPSBwcm9wcy5vdXRkaXIgPyBwYXRoLnJlc29sdmUocHJvcHMub3V0ZGlyKSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBuZXcgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVNvdXJjZShcbiAgICAgIHtcbiAgICAgICAgcHJvZHVjZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHVzaW5nIGV4ZWN1dGlvbiA9IGF3YWl0IEV4ZWN1dGlvbkVudmlyb25tZW50LmNyZWF0ZShzZXJ2aWNlcywgeyBvdXRkaXIgfSk7XG5cbiAgICAgICAgICBjb25zdCBzeW50aFBhcmFtcyA9IHBhcmFtZXRlcnNGcm9tU3ludGhPcHRpb25zKHByb3BzLnN5bnRoT3B0aW9ucyk7XG5cbiAgICAgICAgICBjb25zdCBmdWxsQ29udGV4dCA9IHtcbiAgICAgICAgICAgIC4uLmF3YWl0IGNvbnRleHRTdG9yZS5yZWFkKCksXG4gICAgICAgICAgICAuLi5zeW50aFBhcmFtcy5jb250ZXh0LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCBzZXJ2aWNlcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ2NvbnRleHQ6JywgZnVsbENvbnRleHQpKTtcblxuICAgICAgICAgIGNvbnN0IGVudiA9IG5vVW5kZWZpbmVkKHtcbiAgICAgICAgICAgIC8vIFZlcnNpb25pbmcsIG91dGRpciwgZGVmYXVsdCBhY2NvdW50IGFuZCByZWdpb25cbiAgICAgICAgICAgIC4uLmF3YWl0IGV4ZWN1dGlvbi5kZWZhdWx0RW52VmFycygpLFxuICAgICAgICAgICAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGVzIGRlcml2ZWQgZnJvbSBzZXR0aW5nc1xuICAgICAgICAgICAgLi4uc3ludGhQYXJhbXMuZW52LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgY2xlYW51cENvbnRleHRUZW1wID0gd3JpdGVDb250ZXh0VG9FbnYoZW52LCBmdWxsQ29udGV4dCwgJ2Vudi1pcy1jb21wbGV0ZScpO1xuICAgICAgICAgIHVzaW5nIF9jbGVhbnVwRW52ID0gKHByb3BzLmNsb2JiZXJFbnYgPz8gdHJ1ZSkgPyB0ZW1wb3JhcmlseVdyaXRlRW52KGVudikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgbGV0IGFzc2VtYmx5O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhc3NlbWJseSA9IGF3YWl0IGJ1aWxkZXIoe1xuICAgICAgICAgICAgICBvdXRkaXI6IGV4ZWN1dGlvbi5vdXRkaXIsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGZ1bGxDb250ZXh0LFxuICAgICAgICAgICAgICBlbnYsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgLy8gcmUtdGhyb3cgdG9vbGtpdCBlcnJvcnMgdW5jaGFuZ2VkXG4gICAgICAgICAgICBpZiAoVG9vbGtpdEVycm9yLmlzVG9vbGtpdEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgd3JhcCBpbnRvIGFuIGFzc2VtYmx5IGVycm9yXG4gICAgICAgICAgICB0aHJvdyBBc3NlbWJseUVycm9yLndpdGhDYXVzZSgnQXNzZW1ibHkgYnVpbGRlciBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGNsZWFudXBDb250ZXh0VGVtcCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbnZlcnQgd2hhdCB3ZSBnb3QgdG8gdGhlIGRlZmluaXRlbHkgY29ycmVjdCB0eXBlIHdlJ3JlIGV4cGVjdGluZywgYSBjeGFwaS5DbG91ZEFzc2VtYmx5XG4gICAgICAgICAgY29uc3QgYXNtID0gY3hhcGkuQ2xvdWRBc3NlbWJseS5pc0Nsb3VkQXNzZW1ibHkoYXNzZW1ibHkpXG4gICAgICAgICAgICA/IGFzc2VtYmx5XG4gICAgICAgICAgICA6IGF3YWl0IGFzc2VtYmx5RnJvbURpcmVjdG9yeShhc3NlbWJseS5kaXJlY3RvcnksIHNlcnZpY2VzLmlvSGVscGVyLCBwcm9wcy5sb2FkQXNzZW1ibHlPcHRpb25zKTtcblxuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBleGVjdXRpb24ubWFya1N1Y2Nlc3NmdWwoKTtcbiAgICAgICAgICBjb25zdCBkZWxldGVPbkRpc3Bvc2UgPSBwcm9wcy5kaXNwb3NlT3V0ZGlyID8/IGV4ZWN1dGlvbi5vdXREaXJJc1RlbXBvcmFyeTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlQ2xvdWRBc3NlbWJseShhc20sIHN1Y2Nlc3MucmVhZExvY2ssIHsgZGVsZXRlT25EaXNwb3NlIH0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbnRleHRBc3NlbWJseVByb3BzLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkIEFzc2VtYmx5IGZyb20gYW4gZXhpc3RpbmcgYXNzZW1ibHkgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBBIHJlYWQgbG9jayB3aWxsIGJlIGFjcXVpcmVkIGZvciB0aGUgZGlyZWN0b3J5LiBUaGlzIG1lYW5zIHRoYXQgd2hpbGVcbiAgICogdGhlIENsb3VkQXNzZW1ibHkgaXMgYmVpbmcgdXNlZCwgbm8gQ0RLIGFwcCBzeW50aGVzaXMgY2FuIHRha2UgcGxhY2UgaW50b1xuICAgKiB0aGF0IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHBhcmFtIGRpcmVjdG9yeSAtIGRpcmVjdG9yeSB0aGUgZGlyZWN0b3J5IG9mIGEgYWxyZWFkeSBwcm9kdWNlZCBDbG91ZCBBc3NlbWJseS5cbiAgICogQHJldHVybnMgdGhlIENsb3VkQXNzZW1ibHkgc291cmNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUFzc2VtYmx5RGlyZWN0b3J5KGRpcmVjdG9yeTogc3RyaW5nLCBwcm9wczogQXNzZW1ibHlEaXJlY3RvcnlQcm9wcyA9IHt9KTogUHJvbWlzZTxJQ2xvdWRBc3NlbWJseVNvdXJjZT4ge1xuICAgIGNvbnN0IHNlcnZpY2VzOiBUb29sa2l0U2VydmljZXMgPSBhd2FpdCB0aGlzLnNvdXJjZUJ1aWxkZXJTZXJ2aWNlcygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFzeW5jIHByb2R1Y2UoKSB7XG4gICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTAxNTAubXNnKCctLWFwcCBwb2ludHMgdG8gYSBjbG91ZCBhc3NlbWJseSwgc28gd2UgYnlwYXNzIHN5bnRoJykpO1xuICAgICAgICBjb25zdCByZWFkTG9jayA9IGF3YWl0IG5ldyBSV0xvY2soZGlyZWN0b3J5KS5hY3F1aXJlUmVhZCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGFzbSA9IGF3YWl0IGFzc2VtYmx5RnJvbURpcmVjdG9yeShkaXJlY3RvcnksIHNlcnZpY2VzLmlvSGVscGVyLCBwcm9wcy5sb2FkQXNzZW1ibHlPcHRpb25zKTtcbiAgICAgICAgICBjb25zdCBhc3NlbWJseSA9IG5ldyBSZWFkYWJsZUNsb3VkQXNzZW1ibHkoYXNtLCByZWFkTG9jaywgeyBkZWxldGVPbkRpc3Bvc2U6IGZhbHNlIH0pO1xuICAgICAgICAgIGlmIChhc3NlbWJseS5jbG91ZEFzc2VtYmx5Lm1hbmlmZXN0Lm1pc3NpbmcgJiYgYXNzZW1ibHkuY2xvdWRBc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5mYWlsT25NaXNzaW5nQ29udGV4dCA/PyB0cnVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1pc3NpbmdLZXlzU2V0ID0gbWlzc2luZ0NvbnRleHRLZXlzKGFzc2VtYmx5LmNsb3VkQXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyk7XG4gICAgICAgICAgICAgIGNvbnN0IG1pc3NpbmdLZXlzID0gQXJyYXkuZnJvbShtaXNzaW5nS2V5c1NldCk7XG4gICAgICAgICAgICAgIHRocm93IEFzc2VtYmx5RXJyb3Iud2l0aENhdXNlKFxuICAgICAgICAgICAgICAgICdBc3NlbWJseSBjb250YWlucyBtaXNzaW5nIGNvbnRleHQuICcgK1xuICAgICAgICAgICAgICAgICAgXCJNYWtlIHN1cmUgYWxsIG5lY2Vzc2FyeSBjb250ZXh0IGlzIGFscmVhZHkgaW4gJ2Nkay5jb250ZXh0Lmpzb24nIGJ5IHJ1bm5pbmcgJ2NkayBzeW50aCcgb24gYSBtYWNoaW5lIHdpdGggc3VmZmljaWVudCBBV1MgY3JlZGVudGlhbHMgYW5kIGNvbW1pdHRpbmcgdGhlIHJlc3VsdC4gXCIgK1xuICAgICAgICAgICAgICAgICAgYE1pc3NpbmcgY29udGV4dCBrZXlzOiAnJHttaXNzaW5nS2V5cy5qb2luKCcsICcpfSdgLFxuICAgICAgICAgICAgICAgICdFcnJvciBwcm9kdWNpbmcgYXNzZW1ibHknLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IENhY2hlZENsb3VkQXNzZW1ibHkoYXNzZW1ibHkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgYXdhaXQgcmVhZExvY2sucmVsZWFzZSgpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogVXNlIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW4gQVdTIENESyBhcHAgYXMgc291cmNlLlxuICAgKlxuICAgKiBUaGUgc3VicHJvY2VzcyB3aWxsIGV4ZWN1dGUgaW4gYHdvcmtpbmdEaXJlY3RvcnlgLCB3aGljaCBkZWZhdWx0cyB0b1xuICAgKiB0aGUgY3VycmVudCBwcm9jZXNzJyB3b3JraW5nIGRpcmVjdG9yeSBpZiBub3QgZ2l2ZW4uXG4gICAqXG4gICAqICMjIE91dGRpclxuICAgKlxuICAgKiBJZiBhbiBvdXRwdXQgZGlyZWN0b3J5IGlzIHN1cHBsaWVkLCByZWxhdGl2ZSBwYXRocyBhcmUgZXZhbHVhdGVkIHdpdGhcbiAgICogcmVzcGVjdCB0byB0aGUgY3VycmVudCBwcm9jZXNzJyB3b3JraW5nIGRpcmVjdG9yeS4gSWYgYW4gb3V0cHV0IGRpcmVjdG9yeVxuICAgKiBpcyBub3Qgc3VwcGxpZWQsIHRoZSBkZWZhdWx0IGlzIGEgYGNkay5vdXRgIGRpcmVjdG9yeSB1bmRlcm5lYXRoXG4gICAqIGB3b3JraW5nRGlyZWN0b3J5YC4gVGhlIG91dHB1dCBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZCB1cCB1bmxlc3NcbiAgICogYGRpc3Bvc2VPdXRkaXI6IHRydWVgLlxuICAgKlxuICAgKiBBIHdyaXRlIGxvY2sgd2lsbCBiZSBhY3F1aXJlZCBvbiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGR1cmF0aW9uIG9mXG4gICAqIHRoZSBDREsgYXBwIHN5bnRoZXNpcyAod2hpY2ggbWVhbnMgdGhhdCBubyB0d28gYXBwcyBjYW4gc3ludGhlc2l6ZSBhdCB0aGVcbiAgICogc2FtZSB0aW1lKSwgYW5kIGFmdGVyIHN5bnRoZXNpcyBhIHJlYWQgbG9jayB3aWxsIGJlIGFjcXVpcmVkIG9uIHRoZVxuICAgKiBkaXJlY3RvcnkuICBUaGlzIG1lYW5zIHRoYXQgd2hpbGUgdGhlIENsb3VkQXNzZW1ibHkgaXMgYmVpbmcgdXNlZCwgbm8gQ0RLXG4gICAqIGFwcCBzeW50aGVzaXMgY2FuIHRha2UgcGxhY2UgaW50byB0aGF0IGRpcmVjdG9yeS5cbiAgICpcbiAgICogIyMgQ29udGV4dFxuICAgKlxuICAgKiBJZiBubyBgY29udGV4dFN0b3JlYCBpcyBnaXZlbiwgYSBgQ2RrQXBwTXVsdGlDb250ZXh0YCB3aWxsIGJlIHVzZWQsIGluaXRpYWxpemVkXG4gICAqIHRvIHRoZSBhcHAncyBgd29ya2luZ0RpcmVjdG9yeWAuIFRoaXMgbWVhbnMgdGhhdCBjb250ZXh0IHdpbGwgYmUgbG9hZGVkIGZyb21cbiAgICogYWxsIHRoZSBDREsncyBkZWZhdWx0IGNvbnRleHQgc291cmNlcywgYW5kIHVwZGF0ZXMgd2lsbCBiZSB3cml0dGVuIHRvXG4gICAqIGBjZGsuY29udGV4dC5qc29uYC5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgdGhlIENsb3VkQXNzZW1ibHkgc291cmNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUNka0FwcChhcHA6IHN0cmluZywgcHJvcHM6IEZyb21DZGtBcHBPcHRpb25zID0ge30pOiBQcm9taXNlPElDbG91ZEFzc2VtYmx5U291cmNlPiB7XG4gICAgY29uc3Qgc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcyA9IGF3YWl0IHRoaXMuc291cmNlQnVpbGRlclNlcnZpY2VzKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpcmVjdG9yeSA9IHByb3BzLndvcmtpbmdEaXJlY3RvcnkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBvdXRkaXIgPSBwcm9wcy5vdXRkaXIgPyBwYXRoLnJlc29sdmUocHJvcHMub3V0ZGlyKSA6IHBhdGgucmVzb2x2ZSh3b3JraW5nRGlyZWN0b3J5LCAnY2RrLm91dCcpO1xuXG4gICAgY29uc3QgY29udGV4dFN0b3JlID0gcHJvcHMuY29udGV4dFN0b3JlID8/IG5ldyBDZGtBcHBNdWx0aUNvbnRleHQod29ya2luZ0RpcmVjdG9yeSk7XG5cbiAgICBjb25zdCBjb250ZXh0QXNzZW1ibHlQcm9wczogQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVByb3BzID0ge1xuICAgICAgc2VydmljZXMsXG4gICAgICBjb250ZXh0U3RvcmUsXG4gICAgICBsb29rdXBzOiBwcm9wcy5sb29rdXBzLFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlTb3VyY2UoXG4gICAgICB7XG4gICAgICAgIHByb2R1Y2U6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBAdG9kbyBidWlsZFxuICAgICAgICAgIC8vIGNvbnN0IGJ1aWxkID0gdGhpcy5wcm9wcy5jb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2J1aWxkJ10pO1xuICAgICAgICAgIC8vIGlmIChidWlsZCkge1xuICAgICAgICAgIC8vICAgYXdhaXQgZXhlY0luQ2hpbGRQcm9jZXNzKGJ1aWxkLCB7IGN3ZDogcHJvcHMud29ya2luZ0RpcmVjdG9yeSB9KTtcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZnMubWtkaXJwU3luYyhvdXRkaXIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBvdXRwdXQgZGlyZWN0b3J5IGF0ICcke291dGRpcn0nICgke2UubWVzc2FnZX0pLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHVzaW5nIGV4ZWN1dGlvbiA9IGF3YWl0IEV4ZWN1dGlvbkVudmlyb25tZW50LmNyZWF0ZShzZXJ2aWNlcywgeyBvdXRkaXIgfSk7XG5cbiAgICAgICAgICBjb25zdCBjb21tYW5kTGluZSA9IGF3YWl0IGV4ZWN1dGlvbi5ndWVzc0V4ZWN1dGFibGUoYXBwKTtcblxuICAgICAgICAgIGNvbnN0IHN5bnRoUGFyYW1zID0gcGFyYW1ldGVyc0Zyb21TeW50aE9wdGlvbnMocHJvcHMuc3ludGhPcHRpb25zKTtcblxuICAgICAgICAgIGNvbnN0IGZ1bGxDb250ZXh0ID0ge1xuICAgICAgICAgICAgLi4uYXdhaXQgY29udGV4dFN0b3JlLnJlYWQoKSxcbiAgICAgICAgICAgIC4uLnN5bnRoUGFyYW1zLmNvbnRleHQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnY29udGV4dDonLCBmdWxsQ29udGV4dCkpO1xuXG4gICAgICAgICAgY29uc3QgZW52ID0gbm9VbmRlZmluZWQoe1xuICAgICAgICAgICAgLy8gTmVlZCB0byBzdGFydCB3aXRoIGZ1bGwgZW52IG9mIGB3cml0ZUNvbnRleHRUb0VudmAgd2lsbCBub3QgYmUgYWJsZSB0byBkbyB0aGUgc2l6ZVxuICAgICAgICAgICAgLy8gY2FsY3VsYXRpb24gY29ycmVjdGx5LlxuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICAvLyBVc2VyIGdhdmUgdXMgc29tZXRoaW5nXG4gICAgICAgICAgICAuLi5wcm9wcy5lbnYsXG4gICAgICAgICAgICAvLyBWZXJzaW9uaW5nLCBvdXRkaXIsIGRlZmF1bHQgYWNjb3VudCBhbmQgcmVnaW9uXG4gICAgICAgICAgICAuLi5hd2FpdCBleGVjdXRpb24uZGVmYXVsdEVudlZhcnMoKSxcbiAgICAgICAgICAgIC8vIEVudmlyb25tZW50IHZhcmlhYmxlcyBkZXJpdmVkIGZyb20gc2V0dGluZ3NcbiAgICAgICAgICAgIC4uLnN5bnRoUGFyYW1zLmVudixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBjbGVhbnVwVGVtcCA9IHdyaXRlQ29udGV4dFRvRW52KGVudiwgZnVsbENvbnRleHQsICdlbnYtaXMtY29tcGxldGUnKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZXhlY0luQ2hpbGRQcm9jZXNzKGNvbW1hbmRMaW5lLmpvaW4oJyAnKSwge1xuICAgICAgICAgICAgICBldmVudFB1Ymxpc2hlcjogYXN5bmMgKHR5cGUsIGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGFfc3Rkb3V0JzpcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMTAwMS5tc2cobGluZSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGFfc3RkZXJyJzpcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9FMTAwMi5tc2cobGluZSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVudixcbiAgICAgICAgICAgICAgY3dkOiB3b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGNsZWFudXBUZW1wKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYXNtID0gYXdhaXQgYXNzZW1ibHlGcm9tRGlyZWN0b3J5KG91dGRpciwgc2VydmljZXMuaW9IZWxwZXIsIHByb3BzLmxvYWRBc3NlbWJseU9wdGlvbnMpO1xuXG4gICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGV4ZWN1dGlvbi5tYXJrU3VjY2Vzc2Z1bCgpO1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZU9uRGlzcG9zZSA9IHByb3BzLmRpc3Bvc2VPdXRkaXIgPz8gZXhlY3V0aW9uLm91dERpcklzVGVtcG9yYXJ5O1xuICAgICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVDbG91ZEFzc2VtYmx5KGFzbSwgc3VjY2Vzcy5yZWFkTG9jaywgeyBkZWxldGVPbkRpc3Bvc2UgfSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGV4dEFzc2VtYmx5UHJvcHMsXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLCtCQUE4QjtBQUU5Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLG1EQUF3RjtBQUN4RixzQ0FBbUM7QUFDbkMsbURBQXNEO0FBRXRELHlFQUFpRjtBQUNqRix5Q0FBb0Q7QUFDcEQsNkRBQXNJO0FBQ3RJLG1FQUFvRTtBQUdwRSwrREFBMEU7QUFDMUUscUNBQXlDO0FBQ3pDLDJDQUFtQztBQUNuQywrQ0FBNEU7QUErUTVFLE1BQXNCLDBCQUEwQjtJQU85Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bd0JHO0lBQ0ksS0FBSyxDQUFDLG1CQUFtQixDQUM5QixPQUF3QixFQUN4QixRQUFvQyxFQUFFO1FBRXRDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLDZCQUFhLEVBQUUsQ0FBQztRQUMvRCxNQUFNLG9CQUFvQixHQUFtQztZQUMzRCxRQUFRO1lBQ1IsWUFBWTtZQUNaLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVyRSxPQUFPLElBQUksc0RBQStCLENBQ3hDO1lBQ0UsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFOzs7b0JBQ2xCLE1BQVksU0FBUyxrQ0FBRyxNQUFNLHFDQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVB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LENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQ2hFLE1BQU07b0NBQ1IsS0FBSyxhQUFhO3dDQUNoQixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3Q0FDaEUsTUFBTTtnQ0FDVixDQUFDOzRCQUNILENBQUM7NEJBQ0QsR0FBRzs0QkFDSCxHQUFHLEVBQUUsZ0JBQWdCO3lCQUN0QixDQUFDLENBQUM7b0JBQ0wsQ0FBQzs0QkFBUyxDQUFDO3dCQUNULE1BQU0sV0FBVyxFQUFFLENBQUM7b0JBQ3RCLENBQUM7b0JBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLHNDQUFxQixFQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUU5RixNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDakQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUM7b0JBQzdFLE9BQU8sSUFBSSx5Q0FBcUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7Ozs7Ozs7Ozs7O2FBQzlFO1NBQ0YsRUFDRCxvQkFBb0IsQ0FDckIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdQRCxnRUE2UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgdHlwZSAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgQ2RrQXBwTXVsdGlDb250ZXh0LCBNZW1vcnlDb250ZXh0LCB0eXBlIElDb250ZXh0U3RvcmUgfSBmcm9tICcuL2NvbnRleHQtc3RvcmUnO1xuaW1wb3J0IHsgUldMb2NrIH0gZnJvbSAnLi4vcndsb2NrJztcbmltcG9ydCB7IENhY2hlZENsb3VkQXNzZW1ibHkgfSBmcm9tICcuL2NhY2hlZC1zb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5UHJvcHMgfSBmcm9tICcuL3ByaXZhdGUvY29udGV4dC1hd2FyZS1zb3VyY2UnO1xuaW1wb3J0IHsgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVNvdXJjZSB9IGZyb20gJy4vcHJpdmF0ZS9jb250ZXh0LWF3YXJlLXNvdXJjZSc7XG5pbXBvcnQgeyBleGVjSW5DaGlsZFByb2Nlc3MgfSBmcm9tICcuL3ByaXZhdGUvZXhlYyc7XG5pbXBvcnQgeyBFeGVjdXRpb25FbnZpcm9ubWVudCwgYXNzZW1ibHlGcm9tRGlyZWN0b3J5LCBwYXJhbWV0ZXJzRnJvbVN5bnRoT3B0aW9ucywgd3JpdGVDb250ZXh0VG9FbnYgfSBmcm9tICcuL3ByaXZhdGUvcHJlcGFyZS1zb3VyY2UnO1xuaW1wb3J0IHsgUmVhZGFibGVDbG91ZEFzc2VtYmx5IH0gZnJvbSAnLi9wcml2YXRlL3JlYWRhYmxlLWFzc2VtYmx5JztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQXNzZW1ibHlTb3VyY2UgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgVG9vbGtpdFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC9wcml2YXRlJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciwgQXNzZW1ibHlFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBub1VuZGVmaW5lZCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgSU8gfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IG1pc3NpbmdDb250ZXh0S2V5cywgdGVtcG9yYXJpbHlXcml0ZUVudiB9IGZyb20gJy4vcHJpdmF0ZS9oZWxwZXJzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRoZSBidWlsZGVyIGZ1bmN0aW9uIHJlY2VpdmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2VtYmx5QnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBvdXRwdXQgZGlyZWN0b3J5IGludG8gd2hpY2ggdG8gdGhlIGJ1aWxkZXIgYXBwIHdpbGwgZW1pdCBzeW50aGVzaXplZCBhcnRpZmFjdHMuXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0IHByb3ZpZGVkIHRwIHRoZSBidWlsZGVyIGFwcCB0byBzeW50aGVzaXplIHRoZSBDbG91ZCBBc3NlbWJseSwgaW5jbHVkaW5nIGxvb2tlZC11cCBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHBhc3NlZCB0byBhIENESyBhcHAgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqXG4gICAqIFRoaXMgY29udGFpbnMgdmFyaWFibGVzIGludGVuZGVkIGZvciB0aGUgdXNlciBwb3J0aW9uIG9mIGEgQ0RLIGFwcCAobm90YWJseVxuICAgKiBgQ0RLX0RFRkFVTFRfQUNDT1VOVGAgYW5kIGBDREtfREVGQVVMVF9SRUdJT05gKSwgd2hpY2ggeW91IGNhbiBmcmVlbHkgcmVhZC5cbiAgICpcbiAgICogSXQgYWxzbyBjb250YWlucyB2YXJpYWJsZXMgaW50ZW5kZWQgZm9yIHRoZSBDREsgVG9vbGtpdCB0byBjb21tdW5pY2F0ZSB3aXRoXG4gICAqIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGNvbnN0cnVjdCBsaWJyYXJ5LCBsaWtlIGBDREtfREVCVUdgIGFuZFxuICAgKiBgQ0RLX0NMSV9BU01fVkVSU0lPTmAuIFJlYWRpbmcgdGhlc2UgbGF0dGVyIHZhcmlhYmxlcyBpcyBwb3NzaWJsZSBidXQgbm90XG4gICAqIHJlY29tbWVuZGVkLCBhcyB0aGVpciBtZWFuaW5nIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gICAqL1xuICByZWFkb25seSBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHRha2VzIHN5bnRoZXNpcyBwYXJhbWV0ZXJzIGFuZCBwcm9kdWNlcyBhIENsb3VkIEFzc2VtYmx5XG4gKlxuICogTW9zdCB0eXBpY2FsbHksIHRoZSBwcm9wZXJ0aWVzIHBhc3NlZCBoZXJlIHdpbGwgYmUgdXNlZCB0byBjb25zdHJ1Y3QgYVxuICogYGNkay5BcHBgLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBhcHAuc3ludGgoKWAuXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2VtYmx5QnVpbGRlciA9IChwcm9wczogQXNzZW1ibHlCdWlsZGVyUHJvcHMpID0+IFByb21pc2U8Y3hzY2hlbWEuSUNsb3VkQXNzZW1ibHk+O1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIGEgQ0xJIGZyb20gYW4gQVdTIENESyBBcHAgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZW1ibHlEaXJlY3RvcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIGNvbmZpZ3VyZSBsb2FkaW5nIG9mIHRoZSBhc3NlbWJseSBhZnRlciBpdCBoYXMgYmVlbiBzeW50aGVzaXplZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEFzc2VtYmx5T3B0aW9ucz86IExvYWRBc3NlbWJseU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGZhaWwgaWYgdGhlIHN5bnRoZXNpemVkIGFzc2VtYmx5IGNvbnRhaW5zXG4gICAqIG1pc3NpbmcgY29udGV4dFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBmYWlsT25NaXNzaW5nQ29udGV4dD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgY3JlYXRpbmcgYSBDTEkgZnJvbSBhbiBBV1MgQ0RLIEFwcCBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlbWJseVNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzeW50aGVzaXplZCBjbG91ZCBhc3NlbWJseSBpbnRvIHRoZSBnaXZlbiBkaXJlY3RvcnlcbiAgICpcbiAgICogQGRlZmF1bHQgXCJjZGsub3V0XCJcbiAgICovXG4gIHJlYWRvbmx5IG91dGRpcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGVyZm9ybSBjb250ZXh0IGxvb2t1cHMuXG4gICAqXG4gICAqIFN5bnRoZXNpcyBmYWlscyBpZiB0aGlzIGlzIGRpc2FibGVkIGFuZCBjb250ZXh0IGxvb2t1cHMgbmVlZCB0byBiZSBwZXJmb3JtZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQgc3RvcmUgZm9yIHRoaXMgb3BlcmF0aW9uXG4gICAqXG4gICAqIFRoZSBjb250ZXh0IHN0b3JlIHdpbGwgYmUgdXNlZCB0byBzb3VyY2UgaW5pdGlhbCBjb250ZXh0IHZhbHVlcyxcbiAgICogYW5kIHVwZGF0ZWQgdmFsdWVzIHdpbGwgYmUgc3RvcmVkIGhlcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVwZW5kcyBvbiB0aGUgb3BlcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0U3RvcmU/OiBJQ29udGV4dFN0b3JlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZSBjb250ZXh0IHRvIGEgQ0RLIGFwcCBvbiBzeW50aFxuICAgKi9cbiAgcmVhZG9ubHkgc3ludGhPcHRpb25zPzogQXBwU3ludGhPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIGNvbmZpZ3VyZSBsb2FkaW5nIG9mIHRoZSBhc3NlbWJseSBhZnRlciBpdCBoYXMgYmVlbiBzeW50aGVzaXplZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEFzc2VtYmx5T3B0aW9ucz86IExvYWRBc3NlbWJseU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgYG91dGRpcmAgd2hlbiB0aGUgYXNzZW1ibHkgaXMgZGlzcG9zZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBgdHJ1ZWAgaWYgYG91dGRpcmAgaXMgbm90IGdpdmVuLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcG9zZU91dGRpcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGN1cnJlbnQgZGVmYXVsdCBlbnZpcm9ubWVudCBhbiBwcm92aWRlIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB0aGUgYXBwLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbWFrZSBhIChjYWNoZWQpIGNhbGwgdG8gU1RTIHRvIHJlc29sdmUgdGhlIGN1cnJlbnQgYWNjb3VudCB1c2luZ1xuICAgKiBiYXNlIGNyZWRlbnRpYWxzLiBUaGUgYmVoYXZpb3IgaXMgbm90IGFsd2F5cyBkZXNpcmFibGUgYW5kIGNhbiBhZGRcbiAgICogdW5uZWNlc3NhcnkgZGVsYXlzLCBlLmcuIHdoZW4gYW4gYXBwIHNwZWNpZmllcyBhbiBlbnZpcm9ubWVudCBleHBsaWNpdGx5XG4gICAqIG9yIHdoZW4gbG9jYWwgYWN0aW9ucyBhcmUgYmUgcGVyZm9ybWVkIHdpdGhvdXQgaW50ZXJuZXQgYWNjZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlRGVmYXVsdEVudmlyb25tZW50PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgYGZyb21Bc3NlbWJseUJ1aWxkZXJgIEFzc2VtYmx5IFNvdXJjZSBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb21Bc3NlbWJseUJ1aWxkZXJPcHRpb25zIGV4dGVuZHMgQXNzZW1ibHlTb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBNdXRhdGUgY3VycmVudCBwcm9jZXNzJyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBDREsgYXBwXG4gICAqXG4gICAqIFRoZXJlIGFyZSBhIG51bWJlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhlIFRvb2xraXQgdXNlcyB0byBwYXNzXG4gICAqIGluZm9ybWF0aW9uIHRvIHRoZSBDREsgYXBwLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBjdXJyZW50XG4gICAqIHByb2Nlc3MnIGdsb2JhbCBzaGFyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGJlZm9yZSB0aGUgYnVpbGRlciBpcyBpbnZva2VkLFxuICAgKiBhbmQgeW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZWxzZS4gSG93ZXZlciwgYmVjYXVzZSB0aGlzIG11dGF0ZXNcbiAgICogc2hhcmVkIHN0YXRlIGl0IGlzIG5vdCBzYWZlIHRvIHJ1biBtdWx0aXBsZSBidWlsZGVycyBjb25jdXJyZW50bHkuXG4gICAqXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIHNoYXJlZCBlbnZpcm9ubWVudC4gSW5zdGVhZCxcbiAgICogeW91IHdpbGwgbmVlZCB0byBwYXNzIHRoZSBgb3V0ZGlyYCBhbmQgYGNvbnRleHRgIHRvIHRoZSBgQXBwYCBjb25zdHJ1Y3RvclxuICAgKiBkaXJlY3RseSBpbiB5b3VyIGJ1aWxkZXIsIGFuZCBpbnNwZWN0IHRoZSBgZW52YCBtYXAgZGlyZWN0bHlcbiAgICogZm9yIGluZm9ybWF0aW9uIGxpa2UgdGhlIGBDREtfREVGQVVMVF9BQ0NPVU5UYCBhbmQgYENES19ERUZBVUxUX1JFR0lPTmAuXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IGN4ID0gYXdhaXQgdG9vbGtpdC5mcm9tQXNzZW1ibHlCdWlsZGVyKGFzeW5jIChwcm9wcykgPT4ge1xuICAgKiAgIC8vIEltcG9ydGFudDogcGFzcyBvbiBzeW50aGVzaXMgcGFyYW1ldGVyc1xuICAgKiAgIGNvbnN0IGFwcCA9IG5ldyBjb3JlLkFwcCh7XG4gICAqICAgICBvdXRkaXI6IHByb3BzLm91dGRpcixcbiAgICogICAgIGNvbnRleHQ6IHByb3BzLmNvbnRleHQsXG4gICAqICAgfSk7XG4gICAqXG4gICAqICAgbmV3IE15U3RhY2soYXBwLCAnTXlTdGFjaycsIHtcbiAgICogICAgIGVudjoge1xuICAgKiAgICAgICBhY2NvdW50OiBwcm9wcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVCxcbiAgICogICAgICAgcmVnaW9uOiBwcm9wcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICAgKiAgICAgfSxcbiAgICogICB9KTtcbiAgICpcbiAgICogICAvLyAuLi5cbiAgICogfSwge1xuICAgKiAgIGNsb2JiZXJFbnY6IGZhbHNlLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsb2JiZXJFbnY/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBgZnJvbUNka0FwcGAgQXNzZW1ibHkgU291cmNlIGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbUNka0FwcE9wdGlvbnMgZXh0ZW5kcyBBc3NlbWJseVNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGFwcGxpY2F0aW9uIGluIHRoaXMgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICpcbiAgICogVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgc2V0IGluIGFkZGl0aW9uIHRvIHRoZSBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgY3VycmVudGx5IHNldCBpbiB0aGUgcHJvY2Vzcy4gQSB2YWx1ZSBvZiBgdW5kZWZpbmVkYCB3aWxsXG4gICAqIHVuc2V0IGEgcGFydGljdWxhciBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogU2V0dGluZ3MgdGhhdCBhcmUgcGFzc2VkIHRvIGEgQ0RLIGFwcCB2aWEgdGhlIGNvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBTeW50aE9wdGlvbnMge1xuICAvKipcbiAgICogRGVidWcgdGhlIENESyBhcHAuXG4gICAqIExvZ3MgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBkdXJpbmcgc3ludGhlc2lzLCBzdWNoIGFzIGNyZWF0aW9uIHN0YWNrIHRyYWNlcyBvZiB0b2tlbnMuXG4gICAqIFRoaXMgYWxzbyBzZXRzIHRoZSBgQ0RLX0RFQlVHYCBlbnYgdmFyaWFibGUgYW5kIHdpbGwgc2xvdyBkb3duIHN5bnRoZXNpcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgZW1iZWRkaW5nIG9mIHRoZSBcImF3czpjZGs6cGF0aFwiIGluIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwYXRoTWV0YWRhdGE/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIGNvbGxlY3Rpb24gYW5kIHJlcG9ydGluZyBvZiB2ZXJzaW9uIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uUmVwb3J0aW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlIGVuYWJsZWQsIGBhd3M6YXNzZXQ6eHh4YCBtZXRhZGF0YSBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIERpc2FibGluZyB0aGlzIGNhbiBiZSB1c2VmdWwgaW4gY2VydGFpbiBjYXNlcyBsaWtlIGludGVncmF0aW9uIHRlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhc3NldE1ldGFkYXRhPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIGFzc2V0IHN0YWdpbmcuXG4gICAqXG4gICAqIERpc2FibGluZyBhc3NldCBzdGFnaW5nIG1lYW5zIHRoYXQgY29weWFibGUgYXNzZXRzIHdpbGwgbm90IGJlIGNvcGllZCB0byB0aGVcbiAgICogb3V0cHV0IGRpcmVjdG9yeSBhbmQgd2lsbCBiZSByZWZlcmVuY2VkIHdpdGggYWJzb2x1dGUgcGF0aHMuXG4gICAqXG4gICAqIE5vdCBjb3BpZWQgdG8gdGhlIG91dHB1dCBkaXJlY3Rvcnk6IHRoaXMgaXMgc28gdXNlcnMgY2FuIGl0ZXJhdGUgb24gdGhlXG4gICAqIExhbWJkYSBzb3VyY2UgYW5kIHJ1biBTQU0gQ0xJIHdpdGhvdXQgaGF2aW5nIHRvIHJlLXJ1biBDREsgKG5vdGU6IHdlXG4gICAqIGNhbm5vdCBhY2hpZXZlIHRoaXMgZm9yIGJ1bmRsZWQgYXNzZXRzLCBpZiBhc3NldHMgYXJlIGJ1bmRsZWQgdGhleVxuICAgKiB3aWxsIGhhdmUgdG8gcmUtcnVuIENESyBDTEkgdG8gcmUtYnVuZGxlIHVwZGF0ZWQgdmVyc2lvbnMpLlxuICAgKlxuICAgKiBBYnNvbHV0ZSBwYXRoOiBTQU0gQ0xJIGV4cGVjdHMgYGN3ZGAtcmVsYXRpdmUgcGF0aHMgaW4gYSByZXNvdXJjZSdzXG4gICAqIGBhd3M6YXNzZXQ6cGF0aGAgbWV0YWRhdGEuIEluIG9yZGVyIHRvIGJlIHByZWRpY3RhYmxlLCB3ZSB3aWxsIGFsd2F5cyBvdXRwdXRcbiAgICogYWJzb2x1dGUgcGF0aHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0U3RhZ2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlbGVjdCB3aGljaCBzdGFja3Mgc2hvdWxkIGhhdmUgYXNzZXQgYnVuZGxpbmcgZW5hYmxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBbXCIqKlwiXSAtIGFsbCBzdGFja3NcbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsaW5nRm9yU3RhY2tzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gY29uZmlndXJlIGxvYWRpbmcgb2YgdGhlIGFzc2VtYmx5IGFmdGVyIGl0IGhhcyBiZWVuIHN5bnRoZXNpemVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEFzc2VtYmx5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDaGVjayB0aGUgVG9vbGtpdCBzdXBwb3J0cyB0aGUgQ2xvdWQgQXNzZW1ibHkgU2NoZW1hIHZlcnNpb25cbiAgICpcbiAgICogV2hlbiBkaXNhYmxlZCwgYWxsb3dzIHRvIFRvb2xraXQgdG8gcmVhZCBhIG5ld2VyIGNsb3VkIGFzc2VtYmx5IHRoYW4gdGhlIENYIEFQSSBpcyBkZXNpZ25lZFxuICAgKiB0byBzdXBwb3J0LiBZb3VyIGFwcGxpY2F0aW9uIG1heSBub3QgYmUgYXdhcmUgb2YgYWxsIGZlYXR1cmVzIHRoYXQgaW4gdXNlIGluIHRoZSBDbG91ZCBBc3NlbWJseS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tWZXJzaW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmFsaWRhdGUgZW51bXMgdG8gb25seSBoYXZlIGtub3duIHZhbHVlc1xuICAgKlxuICAgKiBXaGVuIGRpc2FibGVkLCB0aGUgVG9vbGtpdCBtYXkgcmVhZCBlbnVtIHZhbHVlcyBpdCBkb2Vzbid0IGtub3cgYWJvdXQgeWV0LlxuICAgKiBZb3Ugd2lsbCBoYXZlIHRvIG1ha2Ugc3VyZSB0byBhbHdheXMgY2hlY2sgdGhlIHZhbHVlcyBvZiBlbnVtcyB5b3UgZW5jb3VudGVyIGluIHRoZSBtYW5pZmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tFbnVtcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDbG91ZEFzc2VtYmx5U291cmNlQnVpbGRlciB7XG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gcHJvdmlkZSB0aGUgQ2xvdWRBc3NlbWJseVNvdXJjZUJ1aWxkZXIgd2l0aCByZXF1aXJlZCB0b29sa2l0IHNlcnZpY2VzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNvdXJjZUJ1aWxkZXJTZXJ2aWNlcygpOiBQcm9taXNlPFRvb2xraXRTZXJ2aWNlcz47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkIEFzc2VtYmx5IGZyb20gYSBDbG91ZCBBc3NlbWJseSBidWlsZGVyIGZ1bmN0aW9uLlxuICAgKlxuICAgKiAjIyBPdXRkaXJcbiAgICpcbiAgICogSWYgbm8gb3V0cHV0IGRpcmVjdG9yeSBpcyBnaXZlbiwgaXQgd2lsbCBzeW50aGVzaXplIGludG8gYSB0ZW1wb3Jhcnkgc3lzdGVtXG4gICAqIGRpcmVjdG9yeS4gVGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2lsbCBiZSBjbGVhbmVkIHVwLCB1bmxlc3NcbiAgICogYGRpc3Bvc2VPdXRkaXI6IGZhbHNlYC5cbiAgICpcbiAgICogQSB3cml0ZSBsb2NrIHdpbGwgYmUgYWNxdWlyZWQgb24gdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiB0aGUgQ0RLIGFwcCBzeW50aGVzaXMgKHdoaWNoIG1lYW5zIHRoYXQgbm8gdHdvIGFwcHMgY2FuIHN5bnRoZXNpemUgYXQgdGhlXG4gICAqIHNhbWUgdGltZSksIGFuZCBhZnRlciBzeW50aGVzaXMgYSByZWFkIGxvY2sgd2lsbCBiZSBhY3F1aXJlZCBvbiB0aGVcbiAgICogZGlyZWN0b3J5LiBUaGlzIG1lYW5zIHRoYXQgd2hpbGUgdGhlIENsb3VkQXNzZW1ibHkgaXMgYmVpbmcgdXNlZCwgbm8gQ0RLXG4gICAqIGFwcCBzeW50aGVzaXMgY2FuIHRha2UgcGxhY2UgaW50byB0aGF0IGRpcmVjdG9yeS5cbiAgICpcbiAgICogIyMgQ29udGV4dFxuICAgKlxuICAgKiBJZiBubyBgY29udGV4dFN0b3JlYCBpcyBnaXZlbiwgYSBgTWVtb3J5Q29udGV4dGAgd2lsbCBiZSB1c2VkLiBUaGlzIG1lYW5zXG4gICAqIG5vIHByb3ZpZGVyIGxvb2t1cHMgd2lsbCBiZSBwZXJzaXN0ZWQgYW55d2hlcmUgYnkgZGVmYXVsdC4gVXNlIGEgZGlmZmVyZW50XG4gICAqIHR5cGUgb2YgY29udGV4dCBzdG9yZSBpZiB5b3Ugd2FudCBwZXJzaXN0ZW5jZSBiZXR3ZWVuIHN5bnRoIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBidWlsZGVyIC0gdGhlIGJ1aWxkZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHByb3BzIC0gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgdGhlIENsb3VkQXNzZW1ibHkgc291cmNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUFzc2VtYmx5QnVpbGRlcihcbiAgICBidWlsZGVyOiBBc3NlbWJseUJ1aWxkZXIsXG4gICAgcHJvcHM6IEZyb21Bc3NlbWJseUJ1aWxkZXJPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGF3YWl0IHRoaXMuc291cmNlQnVpbGRlclNlcnZpY2VzKCk7XG4gICAgY29uc3QgY29udGV4dFN0b3JlID0gcHJvcHMuY29udGV4dFN0b3JlID8/IG5ldyBNZW1vcnlDb250ZXh0KCk7XG4gICAgY29uc3QgY29udGV4dEFzc2VtYmx5UHJvcHM6IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlQcm9wcyA9IHtcbiAgICAgIHNlcnZpY2VzLFxuICAgICAgY29udGV4dFN0b3JlLFxuICAgICAgbG9va3VwczogcHJvcHMubG9va3VwcyxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvcHMub3V0ZGlyID8gcGF0aC5yZXNvbHZlKHByb3BzLm91dGRpcikgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gbmV3IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlTb3VyY2UoXG4gICAgICB7XG4gICAgICAgIHByb2R1Y2U6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB1c2luZyBleGVjdXRpb24gPSBhd2FpdCBFeGVjdXRpb25FbnZpcm9ubWVudC5jcmVhdGUoc2VydmljZXMsIHtcbiAgICAgICAgICAgIG91dGRpcixcbiAgICAgICAgICAgIHJlc29sdmVEZWZhdWx0QXBwRW52OiBwcm9wcy5yZXNvbHZlRGVmYXVsdEVudmlyb25tZW50ID8/IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzeW50aFBhcmFtcyA9IHBhcmFtZXRlcnNGcm9tU3ludGhPcHRpb25zKHByb3BzLnN5bnRoT3B0aW9ucyk7XG5cbiAgICAgICAgICBjb25zdCBmdWxsQ29udGV4dCA9IHtcbiAgICAgICAgICAgIC4uLmF3YWl0IGNvbnRleHRTdG9yZS5yZWFkKCksXG4gICAgICAgICAgICAuLi5zeW50aFBhcmFtcy5jb250ZXh0LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCBzZXJ2aWNlcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ2NvbnRleHQ6JywgZnVsbENvbnRleHQpKTtcblxuICAgICAgICAgIGNvbnN0IGVudiA9IG5vVW5kZWZpbmVkKHtcbiAgICAgICAgICAgIC8vIFZlcnNpb25pbmcsIG91dGRpciwgZGVmYXVsdCBhY2NvdW50IGFuZCByZWdpb25cbiAgICAgICAgICAgIC4uLmF3YWl0IGV4ZWN1dGlvbi5kZWZhdWx0RW52VmFycygpLFxuICAgICAgICAgICAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGVzIGRlcml2ZWQgZnJvbSBzZXR0aW5nc1xuICAgICAgICAgICAgLi4uc3ludGhQYXJhbXMuZW52LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgY2xlYW51cENvbnRleHRUZW1wID0gd3JpdGVDb250ZXh0VG9FbnYoZW52LCBmdWxsQ29udGV4dCwgJ2Vudi1pcy1jb21wbGV0ZScpO1xuICAgICAgICAgIHVzaW5nIF9jbGVhbnVwRW52ID0gKHByb3BzLmNsb2JiZXJFbnYgPz8gdHJ1ZSkgPyB0ZW1wb3JhcmlseVdyaXRlRW52KGVudikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgbGV0IGFzc2VtYmx5O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhc3NlbWJseSA9IGF3YWl0IGJ1aWxkZXIoe1xuICAgICAgICAgICAgICBvdXRkaXI6IGV4ZWN1dGlvbi5vdXRkaXIsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGZ1bGxDb250ZXh0LFxuICAgICAgICAgICAgICBlbnYsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgLy8gcmUtdGhyb3cgdG9vbGtpdCBlcnJvcnMgdW5jaGFuZ2VkXG4gICAgICAgICAgICBpZiAoVG9vbGtpdEVycm9yLmlzVG9vbGtpdEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgd3JhcCBpbnRvIGFuIGFzc2VtYmx5IGVycm9yXG4gICAgICAgICAgICB0aHJvdyBBc3NlbWJseUVycm9yLndpdGhDYXVzZSgnQXNzZW1ibHkgYnVpbGRlciBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGNsZWFudXBDb250ZXh0VGVtcCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbnZlcnQgd2hhdCB3ZSBnb3QgdG8gdGhlIGRlZmluaXRlbHkgY29ycmVjdCB0eXBlIHdlJ3JlIGV4cGVjdGluZywgYSBjeGFwaS5DbG91ZEFzc2VtYmx5XG4gICAgICAgICAgY29uc3QgYXNtID0gY3hhcGkuQ2xvdWRBc3NlbWJseS5pc0Nsb3VkQXNzZW1ibHkoYXNzZW1ibHkpXG4gICAgICAgICAgICA/IGFzc2VtYmx5XG4gICAgICAgICAgICA6IGF3YWl0IGFzc2VtYmx5RnJvbURpcmVjdG9yeShhc3NlbWJseS5kaXJlY3RvcnksIHNlcnZpY2VzLmlvSGVscGVyLCBwcm9wcy5sb2FkQXNzZW1ibHlPcHRpb25zKTtcblxuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBleGVjdXRpb24ubWFya1N1Y2Nlc3NmdWwoKTtcbiAgICAgICAgICBjb25zdCBkZWxldGVPbkRpc3Bvc2UgPSBwcm9wcy5kaXNwb3NlT3V0ZGlyID8/IGV4ZWN1dGlvbi5zaG91bGREaXNwb3NlT3V0RGlyO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVDbG91ZEFzc2VtYmx5KGFzbSwgc3VjY2Vzcy5yZWFkTG9jaywgeyBkZWxldGVPbkRpc3Bvc2UgfSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGV4dEFzc2VtYmx5UHJvcHMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWQgQXNzZW1ibHkgZnJvbSBhbiBleGlzdGluZyBhc3NlbWJseSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEEgcmVhZCBsb2NrIHdpbGwgYmUgYWNxdWlyZWQgZm9yIHRoZSBkaXJlY3RvcnkuIFRoaXMgbWVhbnMgdGhhdCB3aGlsZVxuICAgKiB0aGUgQ2xvdWRBc3NlbWJseSBpcyBiZWluZyB1c2VkLCBubyBDREsgYXBwIHN5bnRoZXNpcyBjYW4gdGFrZSBwbGFjZSBpbnRvXG4gICAqIHRoYXQgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAcGFyYW0gZGlyZWN0b3J5IC0gZGlyZWN0b3J5IHRoZSBkaXJlY3Rvcnkgb2YgYSBhbHJlYWR5IHByb2R1Y2VkIENsb3VkIEFzc2VtYmx5LlxuICAgKiBAcmV0dXJucyB0aGUgQ2xvdWRBc3NlbWJseSBzb3VyY2VcbiAgICovXG4gIHB1YmxpYyBhc3luYyBmcm9tQXNzZW1ibHlEaXJlY3RvcnkoZGlyZWN0b3J5OiBzdHJpbmcsIHByb3BzOiBBc3NlbWJseURpcmVjdG9yeVByb3BzID0ge30pOiBQcm9taXNlPElDbG91ZEFzc2VtYmx5U291cmNlPiB7XG4gICAgY29uc3Qgc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcyA9IGF3YWl0IHRoaXMuc291cmNlQnVpbGRlclNlcnZpY2VzKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXN5bmMgcHJvZHVjZSgpIHtcbiAgICAgICAgYXdhaXQgc2VydmljZXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMDE1MC5tc2coJy0tYXBwIHBvaW50cyB0byBhIGNsb3VkIGFzc2VtYmx5LCBzbyB3ZSBieXBhc3Mgc3ludGgnKSk7XG4gICAgICAgIGNvbnN0IHJlYWRMb2NrID0gYXdhaXQgbmV3IFJXTG9jayhkaXJlY3RvcnkpLmFjcXVpcmVSZWFkKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYXNtID0gYXdhaXQgYXNzZW1ibHlGcm9tRGlyZWN0b3J5KGRpcmVjdG9yeSwgc2VydmljZXMuaW9IZWxwZXIsIHByb3BzLmxvYWRBc3NlbWJseU9wdGlvbnMpO1xuICAgICAgICAgIGNvbnN0IGFzc2VtYmx5ID0gbmV3IFJlYWRhYmxlQ2xvdWRBc3NlbWJseShhc20sIHJlYWRMb2NrLCB7IGRlbGV0ZU9uRGlzcG9zZTogZmFsc2UgfSk7XG4gICAgICAgICAgaWYgKGFzc2VtYmx5LmNsb3VkQXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyAmJiBhc3NlbWJseS5jbG91ZEFzc2VtYmx5Lm1hbmlmZXN0Lm1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmZhaWxPbk1pc3NpbmdDb250ZXh0ID8/IHRydWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWlzc2luZ0tleXNTZXQgPSBtaXNzaW5nQ29udGV4dEtleXMoYXNzZW1ibHkuY2xvdWRBc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nKTtcbiAgICAgICAgICAgICAgY29uc3QgbWlzc2luZ0tleXMgPSBBcnJheS5mcm9tKG1pc3NpbmdLZXlzU2V0KTtcbiAgICAgICAgICAgICAgdGhyb3cgQXNzZW1ibHlFcnJvci53aXRoQ2F1c2UoXG4gICAgICAgICAgICAgICAgJ0Fzc2VtYmx5IGNvbnRhaW5zIG1pc3NpbmcgY29udGV4dC4gJyArXG4gICAgICAgICAgICAgICAgICBcIk1ha2Ugc3VyZSBhbGwgbmVjZXNzYXJ5IGNvbnRleHQgaXMgYWxyZWFkeSBpbiAnY2RrLmNvbnRleHQuanNvbicgYnkgcnVubmluZyAnY2RrIHN5bnRoJyBvbiBhIG1hY2hpbmUgd2l0aCBzdWZmaWNpZW50IEFXUyBjcmVkZW50aWFscyBhbmQgY29tbWl0dGluZyB0aGUgcmVzdWx0LiBcIiArXG4gICAgICAgICAgICAgICAgICBgTWlzc2luZyBjb250ZXh0IGtleXM6ICcke21pc3NpbmdLZXlzLmpvaW4oJywgJyl9J2AsXG4gICAgICAgICAgICAgICAgJ0Vycm9yIHByb2R1Y2luZyBhc3NlbWJseScsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkQ2xvdWRBc3NlbWJseShhc3NlbWJseSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBhd2FpdCByZWFkTG9jay5yZWxlYXNlKCk7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBVc2UgYSBkaXJlY3RvcnkgY29udGFpbmluZyBhbiBBV1MgQ0RLIGFwcCBhcyBzb3VyY2UuXG4gICAqXG4gICAqIFRoZSBzdWJwcm9jZXNzIHdpbGwgZXhlY3V0ZSBpbiBgd29ya2luZ0RpcmVjdG9yeWAsIHdoaWNoIGRlZmF1bHRzIHRvXG4gICAqIHRoZSBjdXJyZW50IHByb2Nlc3MnIHdvcmtpbmcgZGlyZWN0b3J5IGlmIG5vdCBnaXZlbi5cbiAgICpcbiAgICogIyMgT3V0ZGlyXG4gICAqXG4gICAqIElmIGFuIG91dHB1dCBkaXJlY3RvcnkgaXMgc3VwcGxpZWQsIHJlbGF0aXZlIHBhdGhzIGFyZSBldmFsdWF0ZWQgd2l0aFxuICAgKiByZXNwZWN0IHRvIHRoZSBjdXJyZW50IHByb2Nlc3MnIHdvcmtpbmcgZGlyZWN0b3J5LiBJZiBhbiBvdXRwdXQgZGlyZWN0b3J5XG4gICAqIGlzIG5vdCBzdXBwbGllZCwgdGhlIGRlZmF1bHQgaXMgYSBgY2RrLm91dGAgZGlyZWN0b3J5IHVuZGVybmVhdGhcbiAgICogYHdvcmtpbmdEaXJlY3RvcnlgLiBUaGUgb3V0cHV0IGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkIHVwIHVubGVzc1xuICAgKiBgZGlzcG9zZU91dGRpcjogdHJ1ZWAuXG4gICAqXG4gICAqIEEgd3JpdGUgbG9jayB3aWxsIGJlIGFjcXVpcmVkIG9uIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZHVyYXRpb24gb2ZcbiAgICogdGhlIENESyBhcHAgc3ludGhlc2lzICh3aGljaCBtZWFucyB0aGF0IG5vIHR3byBhcHBzIGNhbiBzeW50aGVzaXplIGF0IHRoZVxuICAgKiBzYW1lIHRpbWUpLCBhbmQgYWZ0ZXIgc3ludGhlc2lzIGEgcmVhZCBsb2NrIHdpbGwgYmUgYWNxdWlyZWQgb24gdGhlXG4gICAqIGRpcmVjdG9yeS4gIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSB0aGUgQ2xvdWRBc3NlbWJseSBpcyBiZWluZyB1c2VkLCBubyBDREtcbiAgICogYXBwIHN5bnRoZXNpcyBjYW4gdGFrZSBwbGFjZSBpbnRvIHRoYXQgZGlyZWN0b3J5LlxuICAgKlxuICAgKiAjIyBDb250ZXh0XG4gICAqXG4gICAqIElmIG5vIGBjb250ZXh0U3RvcmVgIGlzIGdpdmVuLCBhIGBDZGtBcHBNdWx0aUNvbnRleHRgIHdpbGwgYmUgdXNlZCwgaW5pdGlhbGl6ZWRcbiAgICogdG8gdGhlIGFwcCdzIGB3b3JraW5nRGlyZWN0b3J5YC4gVGhpcyBtZWFucyB0aGF0IGNvbnRleHQgd2lsbCBiZSBsb2FkZWQgZnJvbVxuICAgKiBhbGwgdGhlIENESydzIGRlZmF1bHQgY29udGV4dCBzb3VyY2VzLCBhbmQgdXBkYXRlcyB3aWxsIGJlIHdyaXR0ZW4gdG9cbiAgICogYGNkay5jb250ZXh0Lmpzb25gLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyB0aGUgQ2xvdWRBc3NlbWJseSBzb3VyY2VcbiAgICovXG4gIHB1YmxpYyBhc3luYyBmcm9tQ2RrQXBwKGFwcDogc3RyaW5nLCBwcm9wczogRnJvbUNka0FwcE9wdGlvbnMgPSB7fSk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBjb25zdCBzZXJ2aWNlczogVG9vbGtpdFNlcnZpY2VzID0gYXdhaXQgdGhpcy5zb3VyY2VCdWlsZGVyU2VydmljZXMoKTtcbiAgICBjb25zdCB3b3JraW5nRGlyZWN0b3J5ID0gcHJvcHMud29ya2luZ0RpcmVjdG9yeSA/PyBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dGRpciA9IHByb3BzLm91dGRpciA/IHBhdGgucmVzb2x2ZShwcm9wcy5vdXRkaXIpIDogcGF0aC5yZXNvbHZlKHdvcmtpbmdEaXJlY3RvcnksICdjZGsub3V0Jyk7XG5cbiAgICBjb25zdCBjb250ZXh0U3RvcmUgPSBwcm9wcy5jb250ZXh0U3RvcmUgPz8gbmV3IENka0FwcE11bHRpQ29udGV4dCh3b3JraW5nRGlyZWN0b3J5KTtcblxuICAgIGNvbnN0IGNvbnRleHRBc3NlbWJseVByb3BzOiBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5UHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlcyxcbiAgICAgIGNvbnRleHRTdG9yZSxcbiAgICAgIGxvb2t1cHM6IHByb3BzLmxvb2t1cHMsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVNvdXJjZShcbiAgICAgIHtcbiAgICAgICAgcHJvZHVjZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5ta2RpcnBTeW5jKG91dGRpcik7XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIG91dHB1dCBkaXJlY3RvcnkgYXQgJyR7b3V0ZGlyfScgKCR7ZS5tZXNzYWdlfSkuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgdXNpbmcgZXhlY3V0aW9uID0gYXdhaXQgRXhlY3V0aW9uRW52aXJvbm1lbnQuY3JlYXRlKHNlcnZpY2VzLCB7XG4gICAgICAgICAgICBvdXRkaXIsXG4gICAgICAgICAgICByZXNvbHZlRGVmYXVsdEFwcEVudjogcHJvcHMucmVzb2x2ZURlZmF1bHRFbnZpcm9ubWVudCA/PyB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgY29tbWFuZExpbmUgPSBhd2FpdCBleGVjdXRpb24uZ3Vlc3NFeGVjdXRhYmxlKGFwcCk7XG5cbiAgICAgICAgICBjb25zdCBzeW50aFBhcmFtcyA9IHBhcmFtZXRlcnNGcm9tU3ludGhPcHRpb25zKHByb3BzLnN5bnRoT3B0aW9ucyk7XG5cbiAgICAgICAgICBjb25zdCBmdWxsQ29udGV4dCA9IHtcbiAgICAgICAgICAgIC4uLmF3YWl0IGNvbnRleHRTdG9yZS5yZWFkKCksXG4gICAgICAgICAgICAuLi5zeW50aFBhcmFtcy5jb250ZXh0LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCBzZXJ2aWNlcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ2NvbnRleHQ6JywgZnVsbENvbnRleHQpKTtcblxuICAgICAgICAgIGNvbnN0IGVudiA9IG5vVW5kZWZpbmVkKHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gc3RhcnQgd2l0aCBmdWxsIGVudiBvZiBgd3JpdGVDb250ZXh0VG9FbnZgIHdpbGwgbm90IGJlIGFibGUgdG8gZG8gdGhlIHNpemVcbiAgICAgICAgICAgIC8vIGNhbGN1bGF0aW9uIGNvcnJlY3RseS5cbiAgICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgICAgLy8gVXNlciBnYXZlIHVzIHNvbWV0aGluZ1xuICAgICAgICAgICAgLi4ucHJvcHMuZW52LFxuICAgICAgICAgICAgLy8gVmVyc2lvbmluZywgb3V0ZGlyLCBkZWZhdWx0IGFjY291bnQgYW5kIHJlZ2lvblxuICAgICAgICAgICAgLi4uYXdhaXQgZXhlY3V0aW9uLmRlZmF1bHRFbnZWYXJzKCksXG4gICAgICAgICAgICAvLyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVyaXZlZCBmcm9tIHNldHRpbmdzXG4gICAgICAgICAgICAuLi5zeW50aFBhcmFtcy5lbnYsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgY2xlYW51cFRlbXAgPSB3cml0ZUNvbnRleHRUb0VudihlbnYsIGZ1bGxDb250ZXh0LCAnZW52LWlzLWNvbXBsZXRlJyk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGV4ZWNJbkNoaWxkUHJvY2Vzcyhjb21tYW5kTGluZS5qb2luKCcgJyksIHtcbiAgICAgICAgICAgICAgZXZlbnRQdWJsaXNoZXI6IGFzeW5jICh0eXBlLCBsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRhX3N0ZG91dCc6XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTEwMDEubXNnKGxpbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRhX3N0ZGVycic6XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfRTEwMDIubXNnKGxpbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlbnYsXG4gICAgICAgICAgICAgIGN3ZDogd29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBjbGVhbnVwVGVtcCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFzbSA9IGF3YWl0IGFzc2VtYmx5RnJvbURpcmVjdG9yeShvdXRkaXIsIHNlcnZpY2VzLmlvSGVscGVyLCBwcm9wcy5sb2FkQXNzZW1ibHlPcHRpb25zKTtcblxuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBleGVjdXRpb24ubWFya1N1Y2Nlc3NmdWwoKTtcbiAgICAgICAgICBjb25zdCBkZWxldGVPbkRpc3Bvc2UgPSBwcm9wcy5kaXNwb3NlT3V0ZGlyID8/IGV4ZWN1dGlvbi5zaG91bGREaXNwb3NlT3V0RGlyO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVDbG91ZEFzc2VtYmx5KGFzbSwgc3VjY2Vzcy5yZWFkTG9jaywgeyBkZWxldGVPbkRpc3Bvc2UgfSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGV4dEFzc2VtYmx5UHJvcHMsXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=
|
|
@@ -39,6 +39,7 @@ class StackCollection {
|
|
|
39
39
|
id: stack.displayName ?? stack.id,
|
|
40
40
|
name: stack.stackName,
|
|
41
41
|
environment: stack.environment,
|
|
42
|
+
metadata: stack.manifest.metadata,
|
|
42
43
|
dependencies: [],
|
|
43
44
|
};
|
|
44
45
|
for (const dependencyId of stack.dependencies.map(x => x.id)) {
|
|
@@ -109,4 +110,4 @@ class StackCollection {
|
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
112
|
exports.StackCollection = StackCollection;
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLWNvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQXdEO0FBR3hELCtEQUEwRTtBQUUxRTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGVBQWU7SUFDRTtJQUEwQztJQUF0RSxZQUE0QixRQUF3QixFQUFrQixjQUFtRDtRQUE3RixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUFrQixtQkFBYyxHQUFkLGNBQWMsQ0FBcUM7SUFDekgsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSw0QkFBWSxDQUFDLDhFQUE4RSxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksR0FBaUI7Z0JBQ3pCLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEtB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O29CQUN0QixLQUFLLDhCQUFxQixDQUFDLE9BQU87d0JBQ2hDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ2hCLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDOUIsTUFBTTtvQkFDUixLQUFLLDhCQUFxQixDQUFDLEtBQUs7d0JBQzlCLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ2QsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUMvQixNQUFNO29CQUNSLEtBQUssOEJBQXFCLENBQUMsSUFBSTt3QkFDN0IsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM5QixNQUFNO2dCQUNWLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMvQixNQUFNLDZCQUFhLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxNQUFNLDZCQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbEhELDBDQWtIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IFN5bnRoZXNpc01lc3NhZ2VMZXZlbCB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IElTdGFja0Fzc2VtYmx5IH0gZnJvbSAnLi9zdGFjay1hc3NlbWJseSc7XG5pbXBvcnQgeyB0eXBlIFN0YWNrRGV0YWlscyB9IGZyb20gJy4uLy4uL3BheWxvYWRzL3N0YWNrLWRldGFpbHMnO1xuaW1wb3J0IHsgQXNzZW1ibHlFcnJvciwgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc3RhY2tzIGFuZCByZWxhdGVkIGFydGlmYWN0c1xuICpcbiAqIEluIHByYWN0aWNlLCBub3QgYWxsIGFydGlmYWN0cyBpbiB0aGUgQ2xvdWRBc3NlbWJseSBhcmUgY3JlYXRlZCBlcXVhbDtcbiAqIHN0YWNrcyBjYW4gYmUgc2VsZWN0ZWQgaW5kZXBlbmRlbnRseSwgYnV0IG90aGVyIGFydGlmYWN0cyBzdWNoIGFzIGFzc2V0XG4gKiBidW5kbGVzIGNhbm5vdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrQ29sbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBhc3NlbWJseTogSVN0YWNrQXNzZW1ibHksIHB1YmxpYyByZWFkb25seSBzdGFja0FydGlmYWN0czogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0W10pIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhY2tDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0FydGlmYWN0cy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpcnN0U3RhY2soKSB7XG4gICAgaWYgKHRoaXMuc3RhY2tDb3VudCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1N0YWNrQ29sbGVjdGlvbiBjb250YWlucyBubyBzdGFjayBhcnRpZmFjdHMgKHRyeWluZyB0byBhY2Nlc3MgdGhlIGZpcnN0IG9uZSknKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tBcnRpZmFjdHNbMF07XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YWNrSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0FydGlmYWN0cy5tYXAocyA9PiBzLmlkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGllcmFyY2hpY2FsSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja0FydGlmYWN0cy5tYXAocyA9PiBzLmhpZXJhcmNoaWNhbElkKTtcbiAgfVxuXG4gIHB1YmxpYyB3aXRoRGVwZW5kZW5jaWVzKCk6IFN0YWNrRGV0YWlsc1tdIHtcbiAgICBjb25zdCBhbGxEYXRhOiBTdGFja0RldGFpbHNbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLnN0YWNrQXJ0aWZhY3RzKSB7XG4gICAgICBjb25zdCBkYXRhOiBTdGFja0RldGFpbHMgPSB7XG4gICAgICAgIGlkOiBzdGFjay5kaXNwbGF5TmFtZSA/PyBzdGFjay5pZCxcbiAgICAgICAgbmFtZTogc3RhY2suc3RhY2tOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudDogc3RhY2suZW52aXJvbm1lbnQsXG4gICAgICAgIG1ldGFkYXRhOiBzdGFjay5tYW5pZmVzdC5tZXRhZGF0YSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeUlkIG9mIHN0YWNrLmRlcGVuZGVuY2llcy5tYXAoeCA9PiB4LmlkKSkge1xuICAgICAgICBpZiAoZGVwZW5kZW5jeUlkLmluY2x1ZGVzKCcuYXNzZXRzJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlcFN0YWNrID0gdGhpcy5hc3NlbWJseS5zdGFja0J5SWQoZGVwZW5kZW5jeUlkKTtcblxuICAgICAgICBpZiAoZGVwU3RhY2suZmlyc3RTdGFjay5kZXBlbmRlbmNpZXMuZmlsdGVyKChkZXApID0+ICEoZGVwLmlkKS5pbmNsdWRlcygnLmFzc2V0cycpKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzdGFja0RldGFpbCBvZiBkZXBTdGFjay53aXRoRGVwZW5kZW5jaWVzKCkpIHtcbiAgICAgICAgICAgIGRhdGEuZGVwZW5kZW5jaWVzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogc3RhY2tEZXRhaWwuaWQsXG4gICAgICAgICAgICAgIGRlcGVuZGVuY2llczogc3RhY2tEZXRhaWwuZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGEuZGVwZW5kZW5jaWVzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGRlcFN0YWNrLmZpcnN0U3RhY2suZGlzcGxheU5hbWUgPz8gZGVwU3RhY2suZmlyc3RTdGFjay5pZCxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWxsRGF0YS5wdXNoKGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxEYXRhO1xuICB9XG5cbiAgcHVibGljIHJldmVyc2VkKCkge1xuICAgIGNvbnN0IGFydHMgPSBbLi4udGhpcy5zdGFja0FydGlmYWN0c107XG4gICAgYXJ0cy5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcy5hc3NlbWJseSwgYXJ0cyk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKGFydDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSA9PiBib29sZWFuKTogU3RhY2tDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLmFzc2VtYmx5LCB0aGlzLnN0YWNrQXJ0aWZhY3RzLmZpbHRlcihwcmVkaWNhdGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25jYXQoLi4ub3RoZXJzOiBTdGFja0NvbGxlY3Rpb25bXSk6IFN0YWNrQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFja0NvbGxlY3Rpb24odGhpcy5hc3NlbWJseSwgdGhpcy5zdGFja0FydGlmYWN0cy5jb25jYXQoLi4ub3RoZXJzLm1hcChvID0+IG8uc3RhY2tBcnRpZmFjdHMpKSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgJ2F3czpjZGs6d2FybmluZ3xpbmZvfGVycm9yJyBtZXRhZGF0YSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrIHN5bnRoZXNpc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlTWV0YWRhdGEoXG4gICAgZmFpbEF0OiAnd2FybicgfCAnZXJyb3InIHwgJ25vbmUnID0gJ2Vycm9yJyxcbiAgICBsb2dnZXI6IChsZXZlbDogJ2luZm8nIHwgJ2Vycm9yJyB8ICd3YXJuJywgbXNnOiBjeGFwaS5TeW50aGVzaXNNZXNzYWdlKSA9PiBQcm9taXNlPHZvaWQ+ID0gYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICkge1xuICAgIGxldCB3YXJuaW5ncyA9IGZhbHNlO1xuICAgIGxldCBlcnJvcnMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgdGhpcy5zdGFja0FydGlmYWN0cykge1xuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHN0YWNrLm1lc3NhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAobWVzc2FnZS5sZXZlbCkge1xuICAgICAgICAgIGNhc2UgU3ludGhlc2lzTWVzc2FnZUxldmVsLldBUk5JTkc6XG4gICAgICAgICAgICB3YXJuaW5ncyA9IHRydWU7XG4gICAgICAgICAgICBhd2FpdCBsb2dnZXIoJ3dhcm4nLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgU3ludGhlc2lzTWVzc2FnZUxldmVsLkVSUk9SOlxuICAgICAgICAgICAgZXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIGF3YWl0IGxvZ2dlcignZXJyb3InLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgU3ludGhlc2lzTWVzc2FnZUxldmVsLklORk86XG4gICAgICAgICAgICBhd2FpdCBsb2dnZXIoJ2luZm8nLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycyAmJiBmYWlsQXQgIT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBBc3NlbWJseUVycm9yLndpdGhTdGFja3MoJ0ZvdW5kIGVycm9ycycsIHRoaXMuc3RhY2tBcnRpZmFjdHMpO1xuICAgIH1cblxuICAgIGlmICh3YXJuaW5ncyAmJiBmYWlsQXQgPT09ICd3YXJuJykge1xuICAgICAgdGhyb3cgQXNzZW1ibHlFcnJvci53aXRoU3RhY2tzKCdGb3VuZCB3YXJuaW5ncyAoLS1zdHJpY3QgbW9kZSknLCB0aGlzLnN0YWNrQXJ0aWZhY3RzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -96,6 +96,13 @@ export interface TemplateInfo {
|
|
|
96
96
|
readonly nestedStacks?: {
|
|
97
97
|
[nestedStackLogicalId: string]: NestedStackTemplates;
|
|
98
98
|
};
|
|
99
|
+
/**
|
|
100
|
+
* Mappings of old locations to new locations. If these are provided,
|
|
101
|
+
* for all resources that were moved, their corresponding addition
|
|
102
|
+
* and removal lines will be augmented with the location they were
|
|
103
|
+
* moved fom and to, respectively.
|
|
104
|
+
*/
|
|
105
|
+
readonly mappings?: Record<string, string>;
|
|
99
106
|
}
|
|
100
107
|
/**
|
|
101
108
|
* Class for formatting the diff output
|
|
@@ -107,6 +114,7 @@ export declare class DiffFormatter {
|
|
|
107
114
|
private readonly changeSet?;
|
|
108
115
|
private readonly nestedStacks;
|
|
109
116
|
private readonly isImport;
|
|
117
|
+
private readonly mappings;
|
|
110
118
|
/**
|
|
111
119
|
* Stores the TemplateDiffs that get calculated in this DiffFormatter,
|
|
112
120
|
* indexed by the stack name.
|