aws-cdk 2.29.1 → 2.31.1
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/CONTRIBUTING.md +14 -0
- package/README.md +13 -0
- package/build-info.json +2 -2
- package/lib/api/cloudformation-deployments.d.ts +1 -0
- package/lib/api/cloudformation-deployments.js +2 -1
- package/lib/api/deploy-stack.d.ts +1 -0
- package/lib/api/deploy-stack.js +5 -2
- package/lib/api/util/cloudformation/stack-activity-monitor.js +2 -2
- package/lib/cdk-toolkit.d.ts +6 -0
- package/lib/cdk-toolkit.js +3 -1
- package/lib/cli.js +7 -2
- package/lib/index.js +2622 -825
- package/lib/logging.d.ts +2 -0
- package/lib/logging.js +15 -8
- package/package.json +9 -9
- package/test/api/deploy-stack.test.js +23 -1
- package/test/integ/cli/cli.integtest.js +26 -1
- package/test/integ/helpers/cdk.d.ts +7 -0
- package/test/integ/helpers/cdk.js +4 -2
- package/test/notices.test.js +4 -1
- package/does-not-exist.json +0 -1
package/lib/logging.d.ts
CHANGED
|
@@ -7,7 +7,9 @@ export declare enum LogLevel {
|
|
|
7
7
|
TRACE = 2
|
|
8
8
|
}
|
|
9
9
|
export declare let logLevel: LogLevel;
|
|
10
|
+
export declare let CI: boolean;
|
|
10
11
|
export declare function setLogLevel(newLogLevel: LogLevel): void;
|
|
12
|
+
export declare function setCI(newCI: boolean): void;
|
|
11
13
|
export declare function increaseVerbosity(): void;
|
|
12
14
|
export declare const trace: (fmt: string, ...args: any) => false | void;
|
|
13
15
|
export declare const debug: (fmt: string, ...args: any[]) => false | void;
|
package/lib/logging.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prefix = exports.data = exports.print = exports.highlight = exports.success = exports.warning = exports.error = exports.debug = exports.trace = exports.increaseVerbosity = exports.setLogLevel = exports.logLevel = exports.LogLevel = void 0;
|
|
3
|
+
exports.prefix = exports.data = exports.print = exports.highlight = exports.success = exports.warning = exports.error = exports.debug = exports.trace = exports.increaseVerbosity = exports.setCI = exports.setLogLevel = exports.CI = exports.logLevel = exports.LogLevel = void 0;
|
|
4
4
|
const util = require("util");
|
|
5
5
|
const chalk = require("chalk");
|
|
6
6
|
const { stdout, stderr } = process;
|
|
@@ -9,7 +9,8 @@ const logger = (stream, styles) => (fmt, ...args) => {
|
|
|
9
9
|
if (styles && styles.length) {
|
|
10
10
|
str = styles.reduce((a, style) => style(a), str);
|
|
11
11
|
}
|
|
12
|
-
stream
|
|
12
|
+
const realStream = typeof stream === 'function' ? stream() : stream;
|
|
13
|
+
realStream.write(str + '\n');
|
|
13
14
|
};
|
|
14
15
|
var LogLevel;
|
|
15
16
|
(function (LogLevel) {
|
|
@@ -21,22 +22,28 @@ var LogLevel;
|
|
|
21
22
|
LogLevel[LogLevel["TRACE"] = 2] = "TRACE";
|
|
22
23
|
})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
|
|
23
24
|
exports.logLevel = LogLevel.DEFAULT;
|
|
25
|
+
exports.CI = false;
|
|
24
26
|
function setLogLevel(newLogLevel) {
|
|
25
27
|
exports.logLevel = newLogLevel;
|
|
26
28
|
}
|
|
27
29
|
exports.setLogLevel = setLogLevel;
|
|
30
|
+
function setCI(newCI) {
|
|
31
|
+
exports.CI = newCI;
|
|
32
|
+
}
|
|
33
|
+
exports.setCI = setCI;
|
|
28
34
|
function increaseVerbosity() {
|
|
29
35
|
exports.logLevel += 1;
|
|
30
36
|
}
|
|
31
37
|
exports.increaseVerbosity = increaseVerbosity;
|
|
32
|
-
const
|
|
38
|
+
const stream = () => exports.CI ? stdout : stderr;
|
|
39
|
+
const _debug = logger(stream, [chalk.gray]);
|
|
33
40
|
exports.trace = (fmt, ...args) => exports.logLevel >= LogLevel.TRACE && _debug(fmt, ...args);
|
|
34
41
|
exports.debug = (fmt, ...args) => exports.logLevel >= LogLevel.DEBUG && _debug(fmt, ...args);
|
|
35
42
|
exports.error = logger(stderr, [chalk.red]);
|
|
36
|
-
exports.warning = logger(
|
|
37
|
-
exports.success = logger(
|
|
38
|
-
exports.highlight = logger(
|
|
39
|
-
exports.print = logger(
|
|
43
|
+
exports.warning = logger(stream, [chalk.yellow]);
|
|
44
|
+
exports.success = logger(stream, [chalk.green]);
|
|
45
|
+
exports.highlight = logger(stream, [chalk.bold]);
|
|
46
|
+
exports.print = logger(stream);
|
|
40
47
|
exports.data = logger(stdout);
|
|
41
48
|
/**
|
|
42
49
|
* Create a logger output that features a constant prefix string.
|
|
@@ -50,4 +57,4 @@ function prefix(prefixString, fn) {
|
|
|
50
57
|
return (fmt, ...args) => fn(`%s ${fmt}`, prefixString, ...args);
|
|
51
58
|
}
|
|
52
59
|
exports.prefix = prefix;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUcvQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUluQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQWtDLEVBQUUsTUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRTtJQUN6RyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3BDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDM0IsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDbEQ7SUFFRCxNQUFNLFVBQVUsR0FBRyxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsSUFBWSxRQU9YO0FBUEQsV0FBWSxRQUFRO0lBQ2xCLHlCQUF5QjtJQUN6Qiw2Q0FBVyxDQUFBO0lBQ1gscUJBQXFCO0lBQ3JCLHlDQUFTLENBQUE7SUFDVCx3QkFBd0I7SUFDeEIseUNBQVMsQ0FBQTtBQUNYLENBQUMsRUFQVyxRQUFRLEdBQVIsZ0JBQVEsS0FBUixnQkFBUSxRQU9uQjtBQUdVLFFBQUEsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDNUIsUUFBQSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBRXRCLFNBQWdCLFdBQVcsQ0FBQyxXQUFxQjtJQUMvQyxnQkFBUSxHQUFHLFdBQVcsQ0FBQztBQUN6QixDQUFDO0FBRkQsa0NBRUM7QUFFRCxTQUFnQixLQUFLLENBQUMsS0FBYztJQUNsQyxVQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ2IsQ0FBQztBQUZELHNCQUVDO0FBRUQsU0FBZ0IsaUJBQWlCO0lBQy9CLGdCQUFRLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFGRCw4Q0FFQztBQUVELE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRS9CLFFBQUEsS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBUyxFQUFFLEVBQUUsQ0FBQyxnQkFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFGLFFBQUEsS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxnQkFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVGLFFBQUEsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwQyxRQUFBLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekMsUUFBQSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QyxRQUFBLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkIsUUFBQSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBSW5DOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixNQUFNLENBQUMsWUFBb0IsRUFBRSxFQUFrQjtJQUM3RCxPQUFPLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRkQsd0JBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG50eXBlIFN0eWxlRm4gPSAoc3RyOiBzdHJpbmcpID0+IHN0cmluZztcbmNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IHByb2Nlc3M7XG5cbnR5cGUgV3JpdGFibGVGYWN0b3J5ID0gKCkgPT4gV3JpdGFibGU7XG5cbmNvbnN0IGxvZ2dlciA9IChzdHJlYW06IFdyaXRhYmxlIHwgV3JpdGFibGVGYWN0b3J5LCBzdHlsZXM/OiBTdHlsZUZuW10pID0+IChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHtcbiAgbGV0IHN0ciA9IHV0aWwuZm9ybWF0KGZtdCwgLi4uYXJncyk7XG4gIGlmIChzdHlsZXMgJiYgc3R5bGVzLmxlbmd0aCkge1xuICAgIHN0ciA9IHN0eWxlcy5yZWR1Y2UoKGEsIHN0eWxlKSA9PiBzdHlsZShhKSwgc3RyKTtcbiAgfVxuXG4gIGNvbnN0IHJlYWxTdHJlYW0gPSB0eXBlb2Ygc3RyZWFtID09PSAnZnVuY3Rpb24nID8gc3RyZWFtKCkgOiBzdHJlYW07XG4gIHJlYWxTdHJlYW0ud3JpdGUoc3RyICsgJ1xcbicpO1xufTtcblxuZXhwb3J0IGVudW0gTG9nTGV2ZWwge1xuICAvKiogTm90IHZlcmJvc2UgYXQgYWxsICovXG4gIERFRkFVTFQgPSAwLFxuICAvKiogUHJldHR5IHZlcmJvc2UgKi9cbiAgREVCVUcgPSAxLFxuICAvKiogRXh0cmVtZWx5IHZlcmJvc2UgKi9cbiAgVFJBQ0UgPSAyXG59XG5cblxuZXhwb3J0IGxldCBsb2dMZXZlbCA9IExvZ0xldmVsLkRFRkFVTFQ7XG5leHBvcnQgbGV0IENJID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dMZXZlbChuZXdMb2dMZXZlbDogTG9nTGV2ZWwpIHtcbiAgbG9nTGV2ZWwgPSBuZXdMb2dMZXZlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENJKG5ld0NJOiBib29sZWFuKSB7XG4gIENJID0gbmV3Q0k7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNyZWFzZVZlcmJvc2l0eSgpIHtcbiAgbG9nTGV2ZWwgKz0gMTtcbn1cblxuY29uc3Qgc3RyZWFtID0gKCkgPT4gQ0kgPyBzdGRvdXQgOiBzdGRlcnI7XG5jb25zdCBfZGVidWcgPSBsb2dnZXIoc3RyZWFtLCBbY2hhbGsuZ3JheV0pO1xuXG5leHBvcnQgY29uc3QgdHJhY2UgPSAoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueSkgPT4gbG9nTGV2ZWwgPj0gTG9nTGV2ZWwuVFJBQ0UgJiYgX2RlYnVnKGZtdCwgLi4uYXJncyk7XG5leHBvcnQgY29uc3QgZGVidWcgPSAoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiBsb2dMZXZlbCA+PSBMb2dMZXZlbC5ERUJVRyAmJiBfZGVidWcoZm10LCAuLi5hcmdzKTtcbmV4cG9ydCBjb25zdCBlcnJvciA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5yZWRdKTtcbmV4cG9ydCBjb25zdCB3YXJuaW5nID0gbG9nZ2VyKHN0cmVhbSwgW2NoYWxrLnllbGxvd10pO1xuZXhwb3J0IGNvbnN0IHN1Y2Nlc3MgPSBsb2dnZXIoc3RyZWFtLCBbY2hhbGsuZ3JlZW5dKTtcbmV4cG9ydCBjb25zdCBoaWdobGlnaHQgPSBsb2dnZXIoc3RyZWFtLCBbY2hhbGsuYm9sZF0pO1xuZXhwb3J0IGNvbnN0IHByaW50ID0gbG9nZ2VyKHN0cmVhbSk7XG5leHBvcnQgY29uc3QgZGF0YSA9IGxvZ2dlcihzdGRvdXQpO1xuXG5leHBvcnQgdHlwZSBMb2dnZXJGdW5jdGlvbiA9IChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG5cbi8qKlxuICogQ3JlYXRlIGEgbG9nZ2VyIG91dHB1dCB0aGF0IGZlYXR1cmVzIGEgY29uc3RhbnQgcHJlZml4IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gcHJlZml4U3RyaW5nIHRoZSBwcmVmaXggc3RyaW5nIHRvIGJlIGFwcGVuZGVkIGJlZm9yZSBhbnkgbG9nIGVudHJ5LlxuICogQHBhcmFtIGZuICAgdGhlIGxvZ2dlciBmdW5jdGlvbiB0byBiZSB1c2VkICh0eXBpY2FsbHkgb25lIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUpXG4gKlxuICogQHJldHVybnMgYSBuZXcgTG9nZ2VyRnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXgocHJlZml4U3RyaW5nOiBzdHJpbmcsIGZuOiBMb2dnZXJGdW5jdGlvbik6IExvZ2dlckZ1bmN0aW9uIHtcbiAgcmV0dXJuIChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IGZuKGAlcyAke2ZtdH1gLCBwcmVmaXhTdHJpbmcsIC4uLmFyZ3MpO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aws-cdk",
|
|
3
3
|
"description": "CDK Toolkit, the command line tool for CDK apps",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.31.1",
|
|
5
5
|
"bin": {
|
|
6
6
|
"cdk": "bin/cdk"
|
|
7
7
|
},
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
},
|
|
59
59
|
"license": "Apache-2.0",
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@aws-cdk/core": "2.
|
|
61
|
+
"@aws-cdk/core": "2.31.1",
|
|
62
62
|
"@octokit/rest": "^18.12.0",
|
|
63
63
|
"@types/archiver": "^5.3.1",
|
|
64
64
|
"@types/fs-extra": "^8.1.2",
|
|
@@ -75,28 +75,28 @@
|
|
|
75
75
|
"@types/wrap-ansi": "^3.0.0",
|
|
76
76
|
"@types/yargs": "^15.0.14",
|
|
77
77
|
"aws-sdk-mock": "5.6.0",
|
|
78
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
78
|
+
"@aws-cdk/cdk-build-tools": "2.31.1",
|
|
79
79
|
"jest": "^27.5.1",
|
|
80
80
|
"madge": "^5.0.1",
|
|
81
81
|
"constructs": "^10.0.0",
|
|
82
82
|
"make-runnable": "^1.3.10",
|
|
83
83
|
"mockery": "^2.1.0",
|
|
84
84
|
"nock": "^13.2.6",
|
|
85
|
-
"@aws-cdk/pkglint": "2.
|
|
85
|
+
"@aws-cdk/pkglint": "2.31.1",
|
|
86
86
|
"sinon": "^9.2.4",
|
|
87
87
|
"ts-jest": "^27.1.5",
|
|
88
88
|
"ts-mock-imports": "^1.3.8",
|
|
89
89
|
"xml-js": "^1.6.11",
|
|
90
90
|
"axios": "^0.27.2",
|
|
91
|
-
"@aws-cdk/cloud-assembly-schema": "2.
|
|
92
|
-
"@aws-cdk/cloudformation-diff": "2.
|
|
93
|
-
"@aws-cdk/cx-api": "2.
|
|
94
|
-
"@aws-cdk/region-info": "2.
|
|
91
|
+
"@aws-cdk/cloud-assembly-schema": "2.31.1",
|
|
92
|
+
"@aws-cdk/cloudformation-diff": "2.31.1",
|
|
93
|
+
"@aws-cdk/cx-api": "2.31.1",
|
|
94
|
+
"@aws-cdk/region-info": "2.31.1",
|
|
95
95
|
"@jsii/check-node": "1.60.1",
|
|
96
96
|
"archiver": "^5.3.1",
|
|
97
97
|
"aws-sdk": "^2.1093.0",
|
|
98
98
|
"camelcase": "^6.3.0",
|
|
99
|
-
"cdk-assets": "2.
|
|
99
|
+
"cdk-assets": "2.31.1",
|
|
100
100
|
"chokidar": "^3.5.3",
|
|
101
101
|
"chalk": "^4",
|
|
102
102
|
"decamelize": "^5.0.1",
|
|
@@ -4,6 +4,7 @@ const api_1 = require("../../lib/api");
|
|
|
4
4
|
const hotswap_deployments_1 = require("../../lib/api/hotswap-deployments");
|
|
5
5
|
const util_1 = require("../util");
|
|
6
6
|
const mock_sdk_1 = require("../util/mock-sdk");
|
|
7
|
+
const logging_1 = require("../../lib/logging");
|
|
7
8
|
jest.mock('../../lib/api/hotswap-deployments');
|
|
8
9
|
const FAKE_STACK = util_1.testStack({
|
|
9
10
|
stackName: 'withouterrors',
|
|
@@ -26,8 +27,12 @@ const FAKE_STACK_TERMINATION_PROTECTION = util_1.testStack({
|
|
|
26
27
|
let sdk;
|
|
27
28
|
let sdkProvider;
|
|
28
29
|
let cfnMocks;
|
|
30
|
+
let stderrMock;
|
|
31
|
+
let stdoutMock;
|
|
29
32
|
beforeEach(() => {
|
|
30
33
|
jest.resetAllMocks();
|
|
34
|
+
stderrMock = jest.spyOn(process.stderr, 'write').mockImplementation(() => { return true; });
|
|
35
|
+
stdoutMock = jest.spyOn(process.stdout, 'write').mockImplementation(() => { return true; });
|
|
31
36
|
sdkProvider = new mock_sdk_1.MockSdkProvider();
|
|
32
37
|
sdk = new mock_sdk_1.MockSdk();
|
|
33
38
|
cfnMocks = {
|
|
@@ -170,6 +175,23 @@ test('reuse previous parameters if requested', async () => {
|
|
|
170
175
|
],
|
|
171
176
|
}));
|
|
172
177
|
});
|
|
178
|
+
describe('ci=true', () => {
|
|
179
|
+
beforeEach(() => {
|
|
180
|
+
logging_1.setCI(true);
|
|
181
|
+
});
|
|
182
|
+
afterEach(() => {
|
|
183
|
+
logging_1.setCI(false);
|
|
184
|
+
});
|
|
185
|
+
test('output written to stdout', async () => {
|
|
186
|
+
// GIVEN
|
|
187
|
+
await api_1.deployStack({
|
|
188
|
+
...standardDeployStackArguments(),
|
|
189
|
+
});
|
|
190
|
+
// THEN
|
|
191
|
+
expect(stderrMock.mock.calls).toEqual([]);
|
|
192
|
+
expect(stdoutMock.mock.calls).not.toEqual([]);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
173
195
|
test('do not reuse previous parameters if not requested', async () => {
|
|
174
196
|
// GIVEN
|
|
175
197
|
givenStackExists({
|
|
@@ -650,4 +672,4 @@ function givenTemplateIs(template) {
|
|
|
650
672
|
TemplateBody: JSON.stringify(template),
|
|
651
673
|
});
|
|
652
674
|
}
|
|
653
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ktc3RhY2sudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUE2RTtBQUM3RSwyRUFBeUU7QUFDekUsa0NBQTJEO0FBQzNELCtDQUF3SDtBQUV4SCxJQUFJLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFFL0MsTUFBTSxVQUFVLEdBQUcsZ0JBQVMsQ0FBQztJQUMzQixTQUFTLEVBQUUsZUFBZTtDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFNLDBCQUEwQixHQUFHLGdCQUFTLENBQUM7SUFDM0MsU0FBUyxFQUFFLGdCQUFnQjtJQUMzQixRQUFRLEVBQUU7UUFDUixVQUFVLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQzVCLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRTtZQUNyRCxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1NBQ25DO0tBQ0Y7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLGlDQUFpQyxHQUFHLGdCQUFTLENBQUM7SUFDbEQsU0FBUyxFQUFFLHdCQUF3QjtJQUNuQyxRQUFRLEVBQUUsNEJBQXFCO0lBQy9CLHFCQUFxQixFQUFFLElBQUk7Q0FDNUIsQ0FBQyxDQUFDO0FBRUgsSUFBSSxHQUFZLENBQUM7QUFDakIsSUFBSSxXQUE0QixDQUFDO0FBQ2pDLElBQUksUUFBK0QsQ0FBQztBQUVwRSxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRXJCLFdBQVcsR0FBRyxJQUFJLDBCQUFlLEVBQUUsQ0FBQztJQUNwQyxHQUFHLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7SUFFcEIsUUFBUSxHQUFHO1FBQ1QsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFB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Q0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNsRSxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxRQUFhO0lBQ3BDLFFBQVEsQ0FBQyxXQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEMsUUFBUSxDQUFDLFdBQVksQ0FBQyxlQUFlLENBQUM7UUFDcEMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0tBQ3ZDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXBsb3lTdGFjaywgRGVwbG95U3RhY2tPcHRpb25zLCBUb29sa2l0SW5mbyB9IGZyb20gJy4uLy4uL2xpYi9hcGknO1xuaW1wb3J0IHsgdHJ5SG90c3dhcERlcGxveW1lbnQgfSBmcm9tICcuLi8uLi9saWIvYXBpL2hvdHN3YXAtZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgREVGQVVMVF9GQUtFX1RFTVBMQVRFLCB0ZXN0U3RhY2sgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IE1vY2tlZE9iamVjdCwgbW9ja1Jlc29sdmVkRW52aXJvbm1lbnQsIE1vY2tTZGssIE1vY2tTZGtQcm92aWRlciwgU3luY0hhbmRsZXJTdWJzZXRPZiB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5qZXN0Lm1vY2soJy4uLy4uL2xpYi9hcGkvaG90c3dhcC1kZXBsb3ltZW50cycpO1xuXG5jb25zdCBGQUtFX1NUQUNLID0gdGVzdFN0YWNrKHtcbiAgc3RhY2tOYW1lOiAnd2l0aG91dGVycm9ycycsXG59KTtcblxuY29uc3QgRkFLRV9TVEFDS19XSVRIX1BBUkFNRVRFUlMgPSB0ZXN0U3RhY2soe1xuICBzdGFja05hbWU6ICd3aXRocGFyYW1ldGVycycsXG4gIHRlbXBsYXRlOiB7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgSGFzVmFsdWU6IHsgVHlwZTogJ1N0cmluZycgfSxcbiAgICAgIEhhc0RlZmF1bHQ6IHsgVHlwZTogJ1N0cmluZycsIERlZmF1bHQ6ICdUaGVEZWZhdWx0JyB9LFxuICAgICAgT3RoZXJQYXJhbWV0ZXI6IHsgVHlwZTogJ1N0cmluZycgfSxcbiAgICB9LFxuICB9LFxufSk7XG5cbmNvbnN0IEZBS0VfU1RBQ0tfVEVSTUlOQVRJT05fUFJPVEVDVElPTiA9IHRlc3RTdGFjayh7XG4gIHN0YWNrTmFtZTogJ3Rlcm1pbmF0aW9uLXByb3RlY3Rpb24nLFxuICB0ZW1wbGF0ZTogREVGQVVMVF9GQUtFX1RFTVBMQVRFLFxuICB0ZXJtaW5hdGlvblByb3RlY3Rpb246IHRydWUsXG59KTtcblxubGV0IHNkazogTW9ja1NkaztcbmxldCBzZGtQcm92aWRlcjogTW9ja1Nka1Byb3ZpZGVyO1xubGV0IGNmbk1vY2tzOiBNb2NrZWRPYmplY3Q8U3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ2xvdWRGb3JtYXRpb24+PjtcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuXG4gIHNka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuICBzZGsgPSBuZXcgTW9ja1NkaygpO1xuXG4gIGNmbk1vY2tzID0ge1xuICAgIGRlc2NyaWJlU3RhY2tFdmVudHM6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pLFxuICAgIGRlc2NyaWJlU3RhY2tzOiBqZXN0LmZuKClcbiAgICAgIC8vIEZpcnN0IGNhbGwsIG5vIHN0YWNrcyBleGlzdFxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gKHsgU3RhY2tzOiBbXSB9KSlcbiAgICAgIC8vIFNlY29uZCBjYWxsLCBzdGFjayBoYXMgYmVlbiBjcmVhdGVkXG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiAoe1xuICAgICAgICBTdGFja3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAgICAgICBTdGFja1N0YXR1c1JlYXNvbjogJ0l0IGlzIG1hZ2ljJyxcbiAgICAgICAgICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pKSxcbiAgICBjcmVhdGVDaGFuZ2VTZXQ6IGplc3QuZm4oKF9vKSA9PiAoe30pKSxcbiAgICBkZWxldGVDaGFuZ2VTZXQ6IGplc3QuZm4oKF9vKSA9PiAoe30pKSxcbiAgICBkZXNjcmliZUNoYW5nZVNldDogamVzdC5mbigoX28pID0+ICh7XG4gICAgICBTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgQ2hhbmdlczogW10sXG4gICAgfSkpLFxuICAgIGV4ZWN1dGVDaGFuZ2VTZXQ6IGplc3QuZm4oKF9vKSA9PiAoe30pKSxcbiAgICBkZWxldGVTdGFjazogamVzdC5mbigoX28pID0+ICh7fSkpLFxuICAgIGdldFRlbXBsYXRlOiBqZXN0LmZuKChfbykgPT4gKHsgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeShERUZBVUxUX0ZBS0VfVEVNUExBVEUpIH0pKSxcbiAgICB1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb246IGplc3QuZm4oKF9vKSA9PiAoeyBTdGFja0lkOiAnc3RhY2staWQnIH0pKSxcbiAgfTtcbiAgc2RrLnN0dWJDbG91ZEZvcm1hdGlvbihjZm5Nb2NrcyBhcyBhbnkpO1xuICBzZGsuc3R1YkdldEVuZHBvaW50U3VmZml4KCgpID0+ICdhbWF6b25hd3MuY29tJyk7XG59KTtcblxuZnVuY3Rpb24gc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpOiBEZXBsb3lTdGFja09wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIHN0YWNrOiBGQUtFX1NUQUNLLFxuICAgIHNkayxcbiAgICBzZGtQcm92aWRlcixcbiAgICByZXNvbHZlZEVudmlyb25tZW50OiBtb2NrUmVzb2x2ZWRFbnZpcm9ubWVudCgpLFxuICAgIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mby5ib290c3RyYXBsZXNzRGVwbG95bWVudHNPbmx5KHNkayksXG4gIH07XG59XG5cbnRlc3QoXCJjYWxscyB0cnlIb3Rzd2FwRGVwbG95bWVudCgpIGlmICdob3Rzd2FwJyBpcyB0cnVlXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIGhvdHN3YXA6IHRydWUsXG4gICAgZXh0cmFVc2VyQWdlbnQ6ICdleHRyYS11c2VyLWFnZW50JyxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QodHJ5SG90c3dhcERlcGxveW1lbnQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgLy8gY2hlY2sgdGhhdCB0aGUgZXh0cmEgVXNlci1BZ2VudCBpcyBob25vcmVkXG4gIGV4cGVjdChzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXh0cmEtdXNlci1hZ2VudCcpO1xuICAvLyBjaGVjayB0aGF0IHRoZSBmYWxsYmFjayBoYXMgYmVlbiBjYWxsZWQgaWYgaG90c3dhcHBpbmcgZmFpbGVkXG4gIGV4cGVjdChzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnY2RrLWhvdHN3YXAvZmFsbGJhY2snKTtcbn0pO1xuXG50ZXN0KFwiZG9lcyBub3QgY2FsbCB0cnlIb3Rzd2FwRGVwbG95bWVudCgpIGlmICdob3Rzd2FwJyBpcyBmYWxzZVwiLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBob3Rzd2FwOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QodHJ5SG90c3dhcERlcGxveW1lbnQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdChcInJvbGxiYWNrIHN0aWxsIGRlZmF1bHRzIHRvIGVuYWJsZWQgZXZlbiBpZiAnaG90c3dhcCcgaXMgZW5hYmxlZFwiLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBob3Rzd2FwOiB0cnVlLFxuICAgIHJvbGxiYWNrOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgRGlzYWJsZVJvbGxiYWNrOiB0cnVlLFxuICB9KSk7XG59KTtcblxudGVzdChcInJvbGxiYWNrIGRlZmF1bHRzIHRvIGVuYWJsZWQgaWYgJ2hvdHN3YXAnIGlzIGZhbHNlXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIGhvdHN3YXA6IGZhbHNlLFxuICAgIHJvbGxiYWNrOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgRGlzYWJsZVJvbGxiYWNrOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ2RvIGRlcGxveSBleGVjdXRhYmxlIGNoYW5nZSBzZXQgd2l0aCAwIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3QgcmV0ID0gYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QocmV0Lm5vT3ApLnRvQmVGYWxzeSgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2NvcnJlY3RseSBwYXNzZXMgQ0ZOIHBhcmFtZXRlcnMsIGlnbm9yaW5nIG9uZXMgd2l0aCBlbXB0eSB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBBOiAnQS12YWx1ZScsXG4gICAgICBCOiAnQj12YWx1ZScsXG4gICAgICBDOiB1bmRlZmluZWQsXG4gICAgICBEOiAnJyxcbiAgICB9LFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0EnLCBQYXJhbWV0ZXJWYWx1ZTogJ0EtdmFsdWUnIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0InLCBQYXJhbWV0ZXJWYWx1ZTogJ0I9dmFsdWUnIH0sXG4gICAgXSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ3JldXNlIHByZXZpb3VzIHBhcmFtZXRlcnMgaWYgcmVxdWVzdGVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdUaGVWYWx1ZScgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzRGVmYXVsdCcsIFBhcmFtZXRlclZhbHVlOiAnVGhlT2xkVmFsdWUnIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHN0YWNrOiBGQUtFX1NUQUNLX1dJVEhfUEFSQU1FVEVSUyxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBPdGhlclBhcmFtZXRlcjogJ1NvbWVWYWx1ZScsXG4gICAgfSxcbiAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIFBhcmFtZXRlcnM6IFtcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzVmFsdWUnLCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc0RlZmF1bHQnLCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ090aGVyUGFyYW1ldGVyJywgUGFyYW1ldGVyVmFsdWU6ICdTb21lVmFsdWUnIH0sXG4gICAgXSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ2RvIG5vdCByZXVzZSBwcmV2aW91cyBwYXJhbWV0ZXJzIGlmIG5vdCByZXF1ZXN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoe1xuICAgIFBhcmFtZXRlcnM6IFtcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzVmFsdWUnLCBQYXJhbWV0ZXJWYWx1ZTogJ1RoZVZhbHVlJyB9LFxuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdIYXNEZWZhdWx0JywgUGFyYW1ldGVyVmFsdWU6ICdUaGVPbGRWYWx1ZScgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgc3RhY2s6IEZBS0VfU1RBQ0tfV0lUSF9QQVJBTUVURVJTLFxuICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgIEhhc1ZhbHVlOiAnU29tZVZhbHVlJyxcbiAgICAgIE90aGVyUGFyYW1ldGVyOiAnU29tZVZhbHVlJyxcbiAgICB9LFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdTb21lVmFsdWUnIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ090aGVyUGFyYW1ldGVyJywgUGFyYW1ldGVyVmFsdWU6ICdTb21lVmFsdWUnIH0sXG4gICAgXSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ3Rocm93IGV4Y2VwdGlvbiBpZiBub3QgZW5vdWdoIHBhcmFtZXRlcnMgc3VwcGxpZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoe1xuICAgIFBhcmFtZXRlcnM6IFtcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzVmFsdWUnLCBQYXJhbWV0ZXJWYWx1ZTogJ1RoZVZhbHVlJyB9LFxuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdIYXNEZWZhdWx0JywgUGFyYW1ldGVyVmFsdWU6ICdUaGVPbGRWYWx1ZScgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGV4cGVjdChkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHN0YWNrOiBGQUtFX1NUQUNLX1dJVEhfUEFSQU1FVEVSUyxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBPdGhlclBhcmFtZXRlcjogJ1NvbWVWYWx1ZScsXG4gICAgfSxcbiAgfSkpLnJlamVjdHMudG9UaHJvdygvQ2xvdWRGb3JtYXRpb24gUGFyYW1ldGVycyBhcmUgbWlzc2luZyBhIHZhbHVlLyk7XG59KTtcblxudGVzdCgnZGVwbG95IGlzIHNraXBwZWQgaWYgdGVtcGxhdGUgZGlkIG5vdCBjaGFuZ2UnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0JlQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnZGVwbG95IGlzIHNraXBwZWQgaWYgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuVGVtcGxhdGVJcyhGQUtFX1NUQUNLX1dJVEhfUEFSQU1FVEVSUy50ZW1wbGF0ZSk7XG4gIGdpdmVuU3RhY2tFeGlzdHMoe1xuICAgIFBhcmFtZXRlcnM6IFtcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzVmFsdWUnLCBQYXJhbWV0ZXJWYWx1ZTogJ0hhc1ZhbHVlJyB9LFxuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdIYXNEZWZhdWx0JywgUGFyYW1ldGVyVmFsdWU6ICdIYXNEZWZhdWx0JyB9LFxuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdPdGhlclBhcmFtZXRlcicsIFBhcmFtZXRlclZhbHVlOiAnT3RoZXJQYXJhbWV0ZXInIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHN0YWNrOiBGQUtFX1NUQUNLX1dJVEhfUEFSQU1FVEVSUyxcbiAgICBwYXJhbWV0ZXJzOiB7fSxcbiAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgaXMgbm90IHNraXBwZWQgaWYgcGFyYW1ldGVycyBhcmUgZGlmZmVyZW50JywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblRlbXBsYXRlSXMoRkFLRV9TVEFDS19XSVRIX1BBUkFNRVRFUlMudGVtcGxhdGUpO1xuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdIYXNWYWx1ZScgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzRGVmYXVsdCcsIFBhcmFtZXRlclZhbHVlOiAnSGFzRGVmYXVsdCcgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnT3RoZXJQYXJhbWV0ZXInLCBQYXJhbWV0ZXJWYWx1ZTogJ090aGVyUGFyYW1ldGVyJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBzdGFjazogRkFLRV9TVEFDS19XSVRIX1BBUkFNRVRFUlMsXG4gICAgcGFyYW1ldGVyczoge1xuICAgICAgSGFzVmFsdWU6ICdOZXdWYWx1ZScsXG4gICAgfSxcbiAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIFBhcmFtZXRlcnM6IFtcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzVmFsdWUnLCBQYXJhbWV0ZXJWYWx1ZTogJ05ld1ZhbHVlJyB9LFxuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdIYXNEZWZhdWx0JywgVXNlUHJldmlvdXNWYWx1ZTogdHJ1ZSB9LFxuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdPdGhlclBhcmFtZXRlcicsIFVzZVByZXZpb3VzVmFsdWU6IHRydWUgfSxcbiAgICBdLFxuICB9KSk7XG59KTtcblxudGVzdCgnaWYgZXhpc3Rpbmcgc3RhY2sgZmFpbGVkIHRvIGNyZWF0ZSwgaXQgaXMgZGVsZXRlZCBhbmQgcmVjcmVhdGVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKFxuICAgIHsgU3RhY2tTdGF0dXM6ICdST0xMQkFDS19DT01QTEVURScgfSwgLy8gVGhpcyBpcyBmb3IgdGhlIGluaXRpYWwgY2hlY2tcbiAgICB7IFN0YWNrU3RhdHVzOiAnREVMRVRFX0NPTVBMRVRFJyB9LCAvLyBQb2xsIHRoZSBzdWNjZXNzZnVsIGRlbGV0aW9uXG4gICAgeyBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScgfSwgLy8gUG9sbCB0aGUgcmVjcmVhdGlvblxuICApO1xuICBnaXZlblRlbXBsYXRlSXMoe1xuICAgIERpZmZlcmVudFRoYW46ICdUaGVEZWZhdWx0JyxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5kZWxldGVTdGFjaykudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgQ2hhbmdlU2V0VHlwZTogJ0NSRUFURScsXG4gIH0pKTtcbn0pO1xuXG50ZXN0KCdpZiBleGlzdGluZyBzdGFjayBmYWlsZWQgdG8gY3JlYXRlLCBpdCBpcyBkZWxldGVkIGFuZCByZWNyZWF0ZWQgZXZlbiBpZiB0aGUgdGVtcGxhdGUgZGlkIG5vdCBjaGFuZ2UnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoXG4gICAgeyBTdGFja1N0YXR1czogJ1JPTExCQUNLX0NPTVBMRVRFJyB9LCAvLyBUaGlzIGlzIGZvciB0aGUgaW5pdGlhbCBjaGVja1xuICAgIHsgU3RhY2tTdGF0dXM6ICdERUxFVEVfQ09NUExFVEUnIH0sIC8vIFBvbGwgdGhlIHN1Y2Nlc3NmdWwgZGVsZXRpb25cbiAgICB7IFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyB9LCAvLyBQb2xsIHRoZSByZWNyZWF0aW9uXG4gICk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5kZWxldGVTdGFjaykudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgQ2hhbmdlU2V0VHlwZTogJ0NSRUFURScsXG4gIH0pKTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgbm90IHNraXBwZWQgaWYgdGVtcGxhdGUgZGlkIG5vdCBjaGFuZ2UgYW5kIC0tZm9yY2UgaXMgYXBwbGllZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cygpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBmb3JjZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RlcGxveSBpcyBza2lwcGVkIGlmIHRlbXBsYXRlIGFuZCB0YWdzIGRpZCBub3QgY2hhbmdlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBUYWdzOiBbXG4gICAgICB7IEtleTogJ0tleTEnLCBWYWx1ZTogJ1ZhbHVlMScgfSxcbiAgICAgIHsgS2V5OiAnS2V5MicsIFZhbHVlOiAnVmFsdWUyJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICB0YWdzOiBbXG4gICAgICB7IEtleTogJ0tleTEnLCBWYWx1ZTogJ1ZhbHVlMScgfSxcbiAgICAgIHsgS2V5OiAnS2V5MicsIFZhbHVlOiAnVmFsdWUyJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkubm90LnRvQmVDYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0JlQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5kZXNjcmliZVN0YWNrcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBTdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJyB9KTtcbiAgZXhwZWN0KGNmbk1vY2tzLmdldFRlbXBsYXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IFN0YWNrTmFtZTogJ3dpdGhvdXRlcnJvcnMnLCBUZW1wbGF0ZVN0YWdlOiAnT3JpZ2luYWwnIH0pO1xufSk7XG5cbnRlc3QoJ2RlcGxveSBub3Qgc2tpcHBlZCBpZiB0ZW1wbGF0ZSBkaWQgbm90IGNoYW5nZSBidXQgdGFncyBjaGFuZ2VkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBUYWdzOiBbXG4gICAgICB7IEtleTogJ0tleScsIFZhbHVlOiAnVmFsdWUnIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgc3RhY2s6IEZBS0VfU1RBQ0ssXG4gICAgc2RrLFxuICAgIHNka1Byb3ZpZGVyLFxuICAgIHJlc29sdmVkRW52aXJvbm1lbnQ6IG1vY2tSZXNvbHZlZEVudmlyb25tZW50KCksXG4gICAgdGFnczogW1xuICAgICAge1xuICAgICAgICBLZXk6ICdLZXknLFxuICAgICAgICBWYWx1ZTogJ05ld1ZhbHVlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8uYm9vdHN0cmFwbGVzc0RlcGxveW1lbnRzT25seShzZGspLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmRlc2NyaWJlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5kZXNjcmliZVN0YWNrcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBTdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJyB9KTtcbiAgZXhwZWN0KGNmbk1vY2tzLmdldFRlbXBsYXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IFN0YWNrTmFtZTogJ3dpdGhvdXRlcnJvcnMnLCBUZW1wbGF0ZVN0YWdlOiAnT3JpZ2luYWwnIH0pO1xufSk7XG5cbnRlc3QoJ2RlcGxveVN0YWNrIHJlcG9ydHMgbm8gY2hhbmdlIGlmIGRlc2NyaWJlQ2hhbmdlU2V0IHJldHVybnMgc3BlY2lmaWMgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gIGNmbk1vY2tzLmRlc2NyaWJlQ2hhbmdlU2V0Py5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgICBTdGF0dXM6ICdGQUlMRUQnLFxuICAgIFN0YXR1c1JlYXNvbjogJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZC4nLFxuICB9KSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lSZXN1bHQgPSBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lSZXN1bHQubm9PcCkudG9FcXVhbCh0cnVlKTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgbm90IHNraXBwZWQgaWYgdGVtcGxhdGUgZGlkIG5vdCBjaGFuZ2UgYnV0IG9uZSB0YWcgcmVtb3ZlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyh7XG4gICAgVGFnczogW1xuICAgICAgeyBLZXk6ICdLZXkxJywgVmFsdWU6ICdWYWx1ZTEnIH0sXG4gICAgICB7IEtleTogJ0tleTInLCBWYWx1ZTogJ1ZhbHVlMicgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgdGFnczogW1xuICAgICAgeyBLZXk6ICdLZXkxJywgVmFsdWU6ICdWYWx1ZTEnIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5kZXNjcmliZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZGVzY3JpYmVTdGFja3MpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgU3RhY2tOYW1lOiAnd2l0aG91dGVycm9ycycgfSk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5nZXRUZW1wbGF0ZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBTdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJywgVGVtcGxhdGVTdGFnZTogJ09yaWdpbmFsJyB9KTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgaXMgbm90IHNraXBwZWQgaWYgc3RhY2sgaXMgaW4gYSBfRkFJTEVEIHN0YXRlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBTdGFja1N0YXR1czogJ0RFTEVURV9GQUlMRUQnLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiB0cnVlLFxuICB9KS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnZXhpc3Rpbmcgc3RhY2sgaW4gVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFIHN0YXRlIGNhbiBiZSB1cGRhdGVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKFxuICAgIHsgU3RhY2tTdGF0dXM6ICdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUnIH0sIC8vIFRoaXMgaXMgZm9yIHRoZSBpbml0aWFsIGNoZWNrXG4gICAgeyBTdGFja1N0YXR1czogJ1VQREFURV9DT01QTEVURScgfSwgLy8gUG9sbCB0aGUgdXBkYXRlXG4gICk7XG4gIGdpdmVuVGVtcGxhdGVJcyh7IGNoYW5nZWQ6IDEyMyB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmRlbGV0ZVN0YWNrKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgQ2hhbmdlU2V0VHlwZTogJ1VQREFURScsXG4gIH0pKTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgbm90IHNraXBwZWQgaWYgdGVtcGxhdGUgY2hhbmdlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cygpO1xuICBnaXZlblRlbXBsYXRlSXMoeyBjaGFuZ2VkOiAxMjMgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnbm90IGV4ZWN1dGVkIGFuZCBubyBlcnJvciBpZiAtLW5vLWV4ZWN1dGUgaXMgZ2l2ZW4nLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBleGVjdXRlOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCdlbXB0eSBjaGFuZ2Ugc2V0IGlzIGRlbGV0ZWQgaWYgLS1leGVjdXRlIGlzIGdpdmVuJywgYXN5bmMgKCkgPT4ge1xuICBjZm5Nb2Nrcy5kZXNjcmliZUNoYW5nZVNldD8ubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgU3RhdHVzOiAnRkFJTEVEJyxcbiAgICBTdGF0dXNSZWFzb246ICdObyB1cGRhdGVzIGFyZSB0byBiZSBwZXJmb3JtZWQuJyxcbiAgfSkpO1xuXG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgZXhlY3V0ZTogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZSwgLy8gTmVjZXNzYXJ5IHRvIGJ5cGFzcyBcInNraXAgZGVwbG95XCJcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gIC8vdGhlIGZpcnN0IGRlbGV0aW9uIGlzIGZvciBhbnkgZXhpc3RpbmcgY2RrIGNoYW5nZSBzZXRzLCB0aGUgc2Vjb25kIGlzIGZvciB0aGUgZGVsZXRpbmcgdGhlIG5ldyBlbXB0eSBjaGFuZ2Ugc2V0XG4gIGV4cGVjdChjZm5Nb2Nrcy5kZWxldGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbn0pO1xuXG50ZXN0KCdlbXB0eSBjaGFuZ2Ugc2V0IGlzIG5vdCBkZWxldGVkIGlmIC0tbm8tZXhlY3V0ZSBpcyBnaXZlbicsIGFzeW5jICgpID0+IHtcbiAgY2ZuTW9ja3MuZGVzY3JpYmVDaGFuZ2VTZXQ/Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgIFN0YXR1czogJ0ZBSUxFRCcsXG4gICAgU3RhdHVzUmVhc29uOiAnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkLicsXG4gIH0pKTtcblxuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIGV4ZWN1dGU6IGZhbHNlLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgLy90aGUgZmlyc3QgZGVsZXRpb24gaXMgZm9yIGFueSBleGlzdGluZyBjZGsgY2hhbmdlIHNldHNcbiAgZXhwZWN0KGNmbk1vY2tzLmRlbGV0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xufSk7XG5cbnRlc3QoJ3VzZSBTMyB1cmwgZm9yIHN0YWNrIGRlcGxveW1lbnQgaWYgcHJlc2VudCBpbiBTdGFjayBBcnRpZmFjdCcsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHN0YWNrOiB0ZXN0U3RhY2soe1xuICAgICAgc3RhY2tOYW1lOiAnd2l0aG91dGVycm9ycycsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHN0YWNrVGVtcGxhdGVBc3NldE9iamVjdFVybDogJ2h0dHBzOi8vdXNlLW1lLXVzZS1tZS8nLFxuICAgICAgfSxcbiAgICB9KSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgVGVtcGxhdGVVUkw6ICdodHRwczovL3VzZS1tZS11c2UtbWUvJyxcbiAgfSkpO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ3VzZSBSRVNUIEFQSSBTMyB1cmwgd2l0aCBzdWJzdGl0dXRlZCBwbGFjZWhvbGRlcnMgaWYgbWFuaWZlc3QgdXJsIHN0YXJ0cyB3aXRoIHMzOi8vJywgYXN5bmMgKCkgPT4ge1xuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgc3RhY2s6IHRlc3RTdGFjayh7XG4gICAgICBzdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3RhY2tUZW1wbGF0ZUFzc2V0T2JqZWN0VXJsOiAnczM6Ly91c2UtbWUtdXNlLW1lLSR7QVdTOjpBY2NvdW50SWR9L29iamVjdCcsXG4gICAgICB9LFxuICAgIH0pLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBUZW1wbGF0ZVVSTDogJ2h0dHBzOi8vczMuYmVybXVkYS10cmlhbmdsZS0xMzM3LmFtYXpvbmF3cy5jb20vdXNlLW1lLXVzZS1tZS0xMjM0NTY3ODkvb2JqZWN0JyxcbiAgfSkpO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2NoYW5nZXNldCBpcyBjcmVhdGVkIHdoZW4gc3RhY2sgZXhpc3RzIGluIFJFVklFV19JTl9QUk9HUkVTUyBzdGF0dXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoe1xuICAgIFN0YWNrU3RhdHVzOiAnUkVWSUVXX0lOX1BST0dSRVNTJyxcbiAgICBUYWdzOiBbXG4gICAgICB7IEtleTogJ0tleTEnLCBWYWx1ZTogJ1ZhbHVlMScgfSxcbiAgICAgIHsgS2V5OiAnS2V5MicsIFZhbHVlOiAnVmFsdWUyJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBleGVjdXRlOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICBDaGFuZ2VTZXRUeXBlOiAnQ1JFQVRFJyxcbiAgICAgIFN0YWNrTmFtZTogJ3dpdGhvdXRlcnJvcnMnLFxuICAgIH0pLFxuICApO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCdjaGFuZ2VzZXQgaXMgdXBkYXRlZCB3aGVuIHN0YWNrIGV4aXN0cyBpbiBDUkVBVEVfQ09NUExFVEUgc3RhdHVzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBUYWdzOiBbXG4gICAgICB7IEtleTogJ0tleTEnLCBWYWx1ZTogJ1ZhbHVlMScgfSxcbiAgICAgIHsgS2V5OiAnS2V5MicsIFZhbHVlOiAnVmFsdWUyJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBleGVjdXRlOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICBDaGFuZ2VTZXRUeXBlOiAnVVBEQVRFJyxcbiAgICAgIFN0YWNrTmFtZTogJ3dpdGhvdXRlcnJvcnMnLFxuICAgIH0pLFxuICApO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgd2l0aCB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGVuYWJsZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBzdGFjazogRkFLRV9TVEFDS19URVJNSU5BVElPTl9QUk9URUNUSU9OLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBFbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb246IHRydWUsXG4gIH0pKTtcbn0pO1xuXG50ZXN0KCd1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24gbm90IGNhbGxlZCB3aGVuIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gaXMgdW5kZWZpbmVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLnVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCd1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24gY2FsbGVkIHdoZW4gdGVybWluYXRpb24gcHJvdGVjdGlvbiBpcyB1bmRlZmluZWQgYW5kIHN0YWNrIGhhcyB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBFbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb246IHRydWUsXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MudXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiBmYWxzZSxcbiAgfSkpO1xufSk7XG5cbmRlc2NyaWJlKCdkaXNhYmxlIHJvbGxiYWNrJywgKCkgPT4ge1xuICB0ZXN0KCdieSBkZWZhdWx0LCB3ZSBkbyBub3QgZGlzYWJsZSByb2xsYmFjayAoYW5kIGFsc28gZG8gbm90IHBhc3MgdGhlIGZsYWcpJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgIERpc2FibGVSb2xsYmFjazogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgfSkpO1xuICB9KTtcblxuICB0ZXN0KCdyb2xsYmFjayBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyByb2xsYmFjazogZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICAgIHJvbGxiYWNrOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgRGlzYWJsZVJvbGxiYWNrOiB0cnVlLFxuICAgIH0pKTtcbiAgfSk7XG5cbn0pO1xuXG4vKipcbiAqIFNldCB1cCB0aGUgbW9ja3Mgc28gdGhhdCBpdCBsb29rcyBsaWtlIHRoZSBzdGFjayBleGlzdHMgdG8gc3RhcnQgd2l0aFxuICpcbiAqIFRoZSBsYXN0IGVsZW1lbnQgb2YgdGhpcyBhcnJheSB3aWxsIGJlIGNvbnRpbnVvdXNseSByZXBlYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2l2ZW5TdGFja0V4aXN0cyguLi5vdmVycmlkZXM6IEFycmF5PFBhcnRpYWw8QVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrPj4pIHtcbiAgY2ZuTW9ja3MuZGVzY3JpYmVTdGFja3MhLm1vY2tSZXNldCgpO1xuXG4gIGlmIChvdmVycmlkZXMubGVuZ3RoID09PSAwKSB7XG4gICAgb3ZlcnJpZGVzID0gW3t9XTtcbiAgfVxuXG4gIGNvbnN0IGJhc2VSZXNwb25zZSA9IHtcbiAgICBTdGFja05hbWU6ICdtb2NrLXN0YWNrLW5hbWUnLFxuICAgIFN0YWNrSWQ6ICdtb2NrLXN0YWNrLWlkJyxcbiAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gIH07XG5cbiAgZm9yIChjb25zdCBvdmVycmlkZSBvZiBvdmVycmlkZXMuc2xpY2UoMCwgb3ZlcnJpZGVzLmxlbmd0aCAtIDEpKSB7XG4gICAgY2ZuTW9ja3MuZGVzY3JpYmVTdGFja3MhLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gKHtcbiAgICAgIFN0YWNrczogW3sgLi4uYmFzZVJlc3BvbnNlLCAuLi5vdmVycmlkZSB9XSxcbiAgICB9KSk7XG4gIH1cbiAgY2ZuTW9ja3MuZGVzY3JpYmVTdGFja3MhLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgIFN0YWNrczogW3sgLi4uYmFzZVJlc3BvbnNlLCAuLi5vdmVycmlkZXNbb3ZlcnJpZGVzLmxlbmd0aCAtIDFdIH1dLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGdpdmVuVGVtcGxhdGVJcyh0ZW1wbGF0ZTogYW55KSB7XG4gIGNmbk1vY2tzLmdldFRlbXBsYXRlIS5tb2NrUmVzZXQoKTtcbiAgY2ZuTW9ja3MuZ2V0VGVtcGxhdGUhLm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSksXG4gIH0pO1xufVxuIl19
|
|
675
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ktc3RhY2sudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUE2RTtBQUM3RSwyRUFBeUU7QUFDekUsa0NBQTJEO0FBQzNELCtDQUF3SDtBQUN4SCwrQ0FBMEM7QUFFMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sVUFBVSxHQUFHLGdCQUFTLENBQUM7SUFDM0IsU0FBUyxFQUFFLGVBQWU7Q0FDM0IsQ0FBQyxDQUFDO0FBRUgsTUFBTSwwQkFBMEIsR0FBRyxnQkFBUyxDQUFDO0lBQzNDLFNBQVMsRUFBRSxnQkFBZ0I7SUFDM0IsUUFBUSxFQUFFO1FBQ1IsVUFBVSxFQUFFO1lBQ1YsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUM1QixVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUU7WUFDckQsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtTQUNuQztLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxpQ0FBaUMsR0FBRyxnQkFBUyxDQUFDO0lBQ2xELFNBQVMsRUFBRSx3QkFBd0I7SUFDbkMsUUFBUSxFQUFFLDRCQUFxQjtJQUMvQixxQkFBcUIsRUFBRSxJQUFJO0NBQzVCLENBQUMsQ0FBQztBQUVILElBQUksR0FBWSxDQUFDO0FBQ2pCLElBQUksV0FBNEIsQ0FBQztBQUNqQyxJQUFJLFFBQStELENBQUM7QUFDcEUsSUFBSSxVQUE0QixDQUFDO0FBQ2pDLElBQUksVUFBNEIsQ0FBQztBQUVqQyxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JCLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENB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Q0FBQyxRQUFhO0lBQ3BDLFFBQVEsQ0FBQyxXQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEMsUUFBUSxDQUFDLFdBQVksQ0FBQyxlQUFlLENBQUM7UUFDcEMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0tBQ3ZDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXBsb3lTdGFjaywgRGVwbG95U3RhY2tPcHRpb25zLCBUb29sa2l0SW5mbyB9IGZyb20gJy4uLy4uL2xpYi9hcGknO1xuaW1wb3J0IHsgdHJ5SG90c3dhcERlcGxveW1lbnQgfSBmcm9tICcuLi8uLi9saWIvYXBpL2hvdHN3YXAtZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgREVGQVVMVF9GQUtFX1RFTVBMQVRFLCB0ZXN0U3RhY2sgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IE1vY2tlZE9iamVjdCwgbW9ja1Jlc29sdmVkRW52aXJvbm1lbnQsIE1vY2tTZGssIE1vY2tTZGtQcm92aWRlciwgU3luY0hhbmRsZXJTdWJzZXRPZiB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuaW1wb3J0IHsgc2V0Q0kgfSBmcm9tICcuLi8uLi9saWIvbG9nZ2luZyc7XG5cbmplc3QubW9jaygnLi4vLi4vbGliL2FwaS9ob3Rzd2FwLWRlcGxveW1lbnRzJyk7XG5cbmNvbnN0IEZBS0VfU1RBQ0sgPSB0ZXN0U3RhY2soe1xuICBzdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJyxcbn0pO1xuXG5jb25zdCBGQUtFX1NUQUNLX1dJVEhfUEFSQU1FVEVSUyA9IHRlc3RTdGFjayh7XG4gIHN0YWNrTmFtZTogJ3dpdGhwYXJhbWV0ZXJzJyxcbiAgdGVtcGxhdGU6IHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICBIYXNWYWx1ZTogeyBUeXBlOiAnU3RyaW5nJyB9LFxuICAgICAgSGFzRGVmYXVsdDogeyBUeXBlOiAnU3RyaW5nJywgRGVmYXVsdDogJ1RoZURlZmF1bHQnIH0sXG4gICAgICBPdGhlclBhcmFtZXRlcjogeyBUeXBlOiAnU3RyaW5nJyB9LFxuICAgIH0sXG4gIH0sXG59KTtcblxuY29uc3QgRkFLRV9TVEFDS19URVJNSU5BVElPTl9QUk9URUNUSU9OID0gdGVzdFN0YWNrKHtcbiAgc3RhY2tOYW1lOiAndGVybWluYXRpb24tcHJvdGVjdGlvbicsXG4gIHRlbXBsYXRlOiBERUZBVUxUX0ZBS0VfVEVNUExBVEUsXG4gIHRlcm1pbmF0aW9uUHJvdGVjdGlvbjogdHJ1ZSxcbn0pO1xuXG5sZXQgc2RrOiBNb2NrU2RrO1xubGV0IHNka1Byb3ZpZGVyOiBNb2NrU2RrUHJvdmlkZXI7XG5sZXQgY2ZuTW9ja3M6IE1vY2tlZE9iamVjdDxTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5DbG91ZEZvcm1hdGlvbj4+O1xubGV0IHN0ZGVyck1vY2s6IGplc3QuU3B5SW5zdGFuY2U7XG5sZXQgc3Rkb3V0TW9jazogamVzdC5TcHlJbnN0YW5jZTtcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHRydWU7IH0pO1xuICBzdGRvdXRNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZG91dCwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHRydWU7IH0pO1xuXG4gIHNka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuICBzZGsgPSBuZXcgTW9ja1NkaygpO1xuXG4gIGNmbk1vY2tzID0ge1xuICAgIGRlc2NyaWJlU3RhY2tFdmVudHM6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pLFxuICAgIGRlc2NyaWJlU3RhY2tzOiBqZXN0LmZuKClcbiAgICAgIC8vIEZpcnN0IGNhbGwsIG5vIHN0YWNrcyBleGlzdFxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gKHsgU3RhY2tzOiBbXSB9KSlcbiAgICAgIC8vIFNlY29uZCBjYWxsLCBzdGFjayBoYXMgYmVlbiBjcmVhdGVkXG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiAoe1xuICAgICAgICBTdGFja3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAgICAgICBTdGFja1N0YXR1c1JlYXNvbjogJ0l0IGlzIG1hZ2ljJyxcbiAgICAgICAgICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pKSxcbiAgICBjcmVhdGVDaGFuZ2VTZXQ6IGplc3QuZm4oKF9vKSA9PiAoe30pKSxcbiAgICBkZWxldGVDaGFuZ2VTZXQ6IGplc3QuZm4oKF9vKSA9PiAoe30pKSxcbiAgICBkZXNjcmliZUNoYW5nZVNldDogamVzdC5mbigoX28pID0+ICh7XG4gICAgICBTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgQ2hhbmdlczogW10sXG4gICAgfSkpLFxuICAgIGV4ZWN1dGVDaGFuZ2VTZXQ6IGplc3QuZm4oKF9vKSA9PiAoe30pKSxcbiAgICBkZWxldGVTdGFjazogamVzdC5mbigoX28pID0+ICh7fSkpLFxuICAgIGdldFRlbXBsYXRlOiBqZXN0LmZuKChfbykgPT4gKHsgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeShERUZBVUxUX0ZBS0VfVEVNUExBVEUpIH0pKSxcbiAgICB1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb246IGplc3QuZm4oKF9vKSA9PiAoeyBTdGFja0lkOiAnc3RhY2staWQnIH0pKSxcbiAgfTtcbiAgc2RrLnN0dWJDbG91ZEZvcm1hdGlvbihjZm5Nb2NrcyBhcyBhbnkpO1xuICBzZGsuc3R1YkdldEVuZHBvaW50U3VmZml4KCgpID0+ICdhbWF6b25hd3MuY29tJyk7XG59KTtcblxuZnVuY3Rpb24gc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpOiBEZXBsb3lTdGFja09wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIHN0YWNrOiBGQUtFX1NUQUNLLFxuICAgIHNkayxcbiAgICBzZGtQcm92aWRlcixcbiAgICByZXNvbHZlZEVudmlyb25tZW50OiBtb2NrUmVzb2x2ZWRFbnZpcm9ubWVudCgpLFxuICAgIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mby5ib290c3RyYXBsZXNzRGVwbG95bWVudHNPbmx5KHNkayksXG4gIH07XG59XG5cbnRlc3QoXCJjYWxscyB0cnlIb3Rzd2FwRGVwbG95bWVudCgpIGlmICdob3Rzd2FwJyBpcyB0cnVlXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIGhvdHN3YXA6IHRydWUsXG4gICAgZXh0cmFVc2VyQWdlbnQ6ICdleHRyYS11c2VyLWFnZW50JyxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QodHJ5SG90c3dhcERlcGxveW1lbnQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgLy8gY2hlY2sgdGhhdCB0aGUgZXh0cmEgVXNlci1BZ2VudCBpcyBob25vcmVkXG4gIGV4cGVjdChzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXh0cmEtdXNlci1hZ2VudCcpO1xuICAvLyBjaGVjayB0aGF0IHRoZSBmYWxsYmFjayBoYXMgYmVlbiBjYWxsZWQgaWYgaG90c3dhcHBpbmcgZmFpbGVkXG4gIGV4cGVjdChzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnY2RrLWhvdHN3YXAvZmFsbGJhY2snKTtcbn0pO1xuXG50ZXN0KFwiZG9lcyBub3QgY2FsbCB0cnlIb3Rzd2FwRGVwbG95bWVudCgpIGlmICdob3Rzd2FwJyBpcyBmYWxzZVwiLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBob3Rzd2FwOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QodHJ5SG90c3dhcERlcGxveW1lbnQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdChcInJvbGxiYWNrIHN0aWxsIGRlZmF1bHRzIHRvIGVuYWJsZWQgZXZlbiBpZiAnaG90c3dhcCcgaXMgZW5hYmxlZFwiLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBob3Rzd2FwOiB0cnVlLFxuICAgIHJvbGxiYWNrOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgRGlzYWJsZVJvbGxiYWNrOiB0cnVlLFxuICB9KSk7XG59KTtcblxudGVzdChcInJvbGxiYWNrIGRlZmF1bHRzIHRvIGVuYWJsZWQgaWYgJ2hvdHN3YXAnIGlzIGZhbHNlXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIGhvdHN3YXA6IGZhbHNlLFxuICAgIHJvbGxiYWNrOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgRGlzYWJsZVJvbGxiYWNrOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ2RvIGRlcGxveSBleGVjdXRhYmxlIGNoYW5nZSBzZXQgd2l0aCAwIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3QgcmV0ID0gYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QocmV0Lm5vT3ApLnRvQmVGYWxzeSgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2NvcnJlY3RseSBwYXNzZXMgQ0ZOIHBhcmFtZXRlcnMsIGlnbm9yaW5nIG9uZXMgd2l0aCBlbXB0eSB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBBOiAnQS12YWx1ZScsXG4gICAgICBCOiAnQj12YWx1ZScsXG4gICAgICBDOiB1bmRlZmluZWQsXG4gICAgICBEOiAnJyxcbiAgICB9LFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0EnLCBQYXJhbWV0ZXJWYWx1ZTogJ0EtdmFsdWUnIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0InLCBQYXJhbWV0ZXJWYWx1ZTogJ0I9dmFsdWUnIH0sXG4gICAgXSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ3JldXNlIHByZXZpb3VzIHBhcmFtZXRlcnMgaWYgcmVxdWVzdGVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdUaGVWYWx1ZScgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzRGVmYXVsdCcsIFBhcmFtZXRlclZhbHVlOiAnVGhlT2xkVmFsdWUnIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHN0YWNrOiBGQUtFX1NUQUNLX1dJVEhfUEFSQU1FVEVSUyxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBPdGhlclBhcmFtZXRlcjogJ1NvbWVWYWx1ZScsXG4gICAgfSxcbiAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIFBhcmFtZXRlcnM6IFtcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzVmFsdWUnLCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc0RlZmF1bHQnLCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ090aGVyUGFyYW1ldGVyJywgUGFyYW1ldGVyVmFsdWU6ICdTb21lVmFsdWUnIH0sXG4gICAgXSxcbiAgfSkpO1xufSk7XG5cbmRlc2NyaWJlKCdjaT10cnVlJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzZXRDSSh0cnVlKTtcbiAgfSk7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2V0Q0koZmFsc2UpO1xuICB9KTtcbiAgdGVzdCgnb3V0cHV0IHdyaXR0ZW4gdG8gc3Rkb3V0JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG5cbiAgICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxscykudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KHN0ZG91dE1vY2subW9jay5jYWxscykubm90LnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuXG50ZXN0KCdkbyBub3QgcmV1c2UgcHJldmlvdXMgcGFyYW1ldGVycyBpZiBub3QgcmVxdWVzdGVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdUaGVWYWx1ZScgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzRGVmYXVsdCcsIFBhcmFtZXRlclZhbHVlOiAnVGhlT2xkVmFsdWUnIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHN0YWNrOiBGQUtFX1NUQUNLX1dJVEhfUEFSQU1FVEVSUyxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBIYXNWYWx1ZTogJ1NvbWVWYWx1ZScsXG4gICAgICBPdGhlclBhcmFtZXRlcjogJ1NvbWVWYWx1ZScsXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgUGFyYW1ldGVyczogW1xuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdIYXNWYWx1ZScsIFBhcmFtZXRlclZhbHVlOiAnU29tZVZhbHVlJyB9LFxuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdPdGhlclBhcmFtZXRlcicsIFBhcmFtZXRlclZhbHVlOiAnU29tZVZhbHVlJyB9LFxuICAgIF0sXG4gIH0pKTtcbn0pO1xuXG50ZXN0KCd0aHJvdyBleGNlcHRpb24gaWYgbm90IGVub3VnaCBwYXJhbWV0ZXJzIHN1cHBsaWVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdUaGVWYWx1ZScgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzRGVmYXVsdCcsIFBhcmFtZXRlclZhbHVlOiAnVGhlT2xkVmFsdWUnIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBleHBlY3QoZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBzdGFjazogRkFLRV9TVEFDS19XSVRIX1BBUkFNRVRFUlMsXG4gICAgcGFyYW1ldGVyczoge1xuICAgICAgT3RoZXJQYXJhbWV0ZXI6ICdTb21lVmFsdWUnLFxuICAgIH0sXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coL0Nsb3VkRm9ybWF0aW9uIFBhcmFtZXRlcnMgYXJlIG1pc3NpbmcgYSB2YWx1ZS8pO1xufSk7XG5cbnRlc3QoJ2RlcGxveSBpcyBza2lwcGVkIGlmIHRlbXBsYXRlIGRpZCBub3QgY2hhbmdlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS5ub3QudG9CZUNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RlcGxveSBpcyBza2lwcGVkIGlmIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblRlbXBsYXRlSXMoRkFLRV9TVEFDS19XSVRIX1BBUkFNRVRFUlMudGVtcGxhdGUpO1xuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdIYXNWYWx1ZScgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzRGVmYXVsdCcsIFBhcmFtZXRlclZhbHVlOiAnSGFzRGVmYXVsdCcgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnT3RoZXJQYXJhbWV0ZXInLCBQYXJhbWV0ZXJWYWx1ZTogJ090aGVyUGFyYW1ldGVyJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBzdGFjazogRkFLRV9TVEFDS19XSVRIX1BBUkFNRVRFUlMsXG4gICAgcGFyYW1ldGVyczoge30sXG4gICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiB0cnVlLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnZGVwbG95IGlzIG5vdCBza2lwcGVkIGlmIHBhcmFtZXRlcnMgYXJlIGRpZmZlcmVudCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5UZW1wbGF0ZUlzKEZBS0VfU1RBQ0tfV0lUSF9QQVJBTUVURVJTLnRlbXBsYXRlKTtcbiAgZ2l2ZW5TdGFja0V4aXN0cyh7XG4gICAgUGFyYW1ldGVyczogW1xuICAgICAgeyBQYXJhbWV0ZXJLZXk6ICdIYXNWYWx1ZScsIFBhcmFtZXRlclZhbHVlOiAnSGFzVmFsdWUnIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc0RlZmF1bHQnLCBQYXJhbWV0ZXJWYWx1ZTogJ0hhc0RlZmF1bHQnIH0sXG4gICAgICB7IFBhcmFtZXRlcktleTogJ090aGVyUGFyYW1ldGVyJywgUGFyYW1ldGVyVmFsdWU6ICdPdGhlclBhcmFtZXRlcicgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgc3RhY2s6IEZBS0VfU1RBQ0tfV0lUSF9QQVJBTUVURVJTLFxuICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgIEhhc1ZhbHVlOiAnTmV3VmFsdWUnLFxuICAgIH0sXG4gICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiB0cnVlLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBQYXJhbWV0ZXJzOiBbXG4gICAgICB7IFBhcmFtZXRlcktleTogJ0hhc1ZhbHVlJywgUGFyYW1ldGVyVmFsdWU6ICdOZXdWYWx1ZScgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnSGFzRGVmYXVsdCcsIFVzZVByZXZpb3VzVmFsdWU6IHRydWUgfSxcbiAgICAgIHsgUGFyYW1ldGVyS2V5OiAnT3RoZXJQYXJhbWV0ZXInLCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0sXG4gICAgXSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ2lmIGV4aXN0aW5nIHN0YWNrIGZhaWxlZCB0byBjcmVhdGUsIGl0IGlzIGRlbGV0ZWQgYW5kIHJlY3JlYXRlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyhcbiAgICB7IFN0YWNrU3RhdHVzOiAnUk9MTEJBQ0tfQ09NUExFVEUnIH0sIC8vIFRoaXMgaXMgZm9yIHRoZSBpbml0aWFsIGNoZWNrXG4gICAgeyBTdGFja1N0YXR1czogJ0RFTEVURV9DT01QTEVURScgfSwgLy8gUG9sbCB0aGUgc3VjY2Vzc2Z1bCBkZWxldGlvblxuICAgIHsgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnIH0sIC8vIFBvbGwgdGhlIHJlY3JlYXRpb25cbiAgKTtcbiAgZ2l2ZW5UZW1wbGF0ZUlzKHtcbiAgICBEaWZmZXJlbnRUaGFuOiAnVGhlRGVmYXVsdCcsXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuZGVsZXRlU3RhY2spLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIENoYW5nZVNldFR5cGU6ICdDUkVBVEUnLFxuICB9KSk7XG59KTtcblxudGVzdCgnaWYgZXhpc3Rpbmcgc3RhY2sgZmFpbGVkIHRvIGNyZWF0ZSwgaXQgaXMgZGVsZXRlZCBhbmQgcmVjcmVhdGVkIGV2ZW4gaWYgdGhlIHRlbXBsYXRlIGRpZCBub3QgY2hhbmdlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKFxuICAgIHsgU3RhY2tTdGF0dXM6ICdST0xMQkFDS19DT01QTEVURScgfSwgLy8gVGhpcyBpcyBmb3IgdGhlIGluaXRpYWwgY2hlY2tcbiAgICB7IFN0YWNrU3RhdHVzOiAnREVMRVRFX0NPTVBMRVRFJyB9LCAvLyBQb2xsIHRoZSBzdWNjZXNzZnVsIGRlbGV0aW9uXG4gICAgeyBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScgfSwgLy8gUG9sbCB0aGUgcmVjcmVhdGlvblxuICApO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuZGVsZXRlU3RhY2spLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIENoYW5nZVNldFR5cGU6ICdDUkVBVEUnLFxuICB9KSk7XG59KTtcblxudGVzdCgnZGVwbG95IG5vdCBza2lwcGVkIGlmIHRlbXBsYXRlIGRpZCBub3QgY2hhbmdlIGFuZCAtLWZvcmNlIGlzIGFwcGxpZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgZm9yY2U6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgaXMgc2tpcHBlZCBpZiB0ZW1wbGF0ZSBhbmQgdGFncyBkaWQgbm90IGNoYW5nZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyh7XG4gICAgVGFnczogW1xuICAgICAgeyBLZXk6ICdLZXkxJywgVmFsdWU6ICdWYWx1ZTEnIH0sXG4gICAgICB7IEtleTogJ0tleTInLCBWYWx1ZTogJ1ZhbHVlMicgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgdGFnczogW1xuICAgICAgeyBLZXk6ICdLZXkxJywgVmFsdWU6ICdWYWx1ZTEnIH0sXG4gICAgICB7IEtleTogJ0tleTInLCBWYWx1ZTogJ1ZhbHVlMicgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5jcmVhdGVDaGFuZ2VTZXQpLm5vdC50b0JlQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS5ub3QudG9CZUNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZGVzY3JpYmVTdGFja3MpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgU3RhY2tOYW1lOiAnd2l0aG91dGVycm9ycycgfSk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5nZXRUZW1wbGF0ZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBTdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJywgVGVtcGxhdGVTdGFnZTogJ09yaWdpbmFsJyB9KTtcbn0pO1xuXG50ZXN0KCdkZXBsb3kgbm90IHNraXBwZWQgaWYgdGVtcGxhdGUgZGlkIG5vdCBjaGFuZ2UgYnV0IHRhZ3MgY2hhbmdlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyh7XG4gICAgVGFnczogW1xuICAgICAgeyBLZXk6ICdLZXknLCBWYWx1ZTogJ1ZhbHVlJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIHN0YWNrOiBGQUtFX1NUQUNLLFxuICAgIHNkayxcbiAgICBzZGtQcm92aWRlcixcbiAgICByZXNvbHZlZEVudmlyb25tZW50OiBtb2NrUmVzb2x2ZWRFbnZpcm9ubWVudCgpLFxuICAgIHRhZ3M6IFtcbiAgICAgIHtcbiAgICAgICAgS2V5OiAnS2V5JyxcbiAgICAgICAgVmFsdWU6ICdOZXdWYWx1ZScsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvLmJvb3RzdHJhcGxlc3NEZXBsb3ltZW50c09ubHkoc2RrKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5kZXNjcmliZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZGVzY3JpYmVTdGFja3MpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgU3RhY2tOYW1lOiAnd2l0aG91dGVycm9ycycgfSk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5nZXRUZW1wbGF0ZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBTdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJywgVGVtcGxhdGVTdGFnZTogJ09yaWdpbmFsJyB9KTtcbn0pO1xuXG50ZXN0KCdkZXBsb3lTdGFjayByZXBvcnRzIG5vIGNoYW5nZSBpZiBkZXNjcmliZUNoYW5nZVNldCByZXR1cm5zIHNwZWNpZmljIGVycm9yJywgYXN5bmMgKCkgPT4ge1xuICBjZm5Nb2Nrcy5kZXNjcmliZUNoYW5nZVNldD8ubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgU3RhdHVzOiAnRkFJTEVEJyxcbiAgICBTdGF0dXNSZWFzb246ICdObyB1cGRhdGVzIGFyZSB0byBiZSBwZXJmb3JtZWQuJyxcbiAgfSkpO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95UmVzdWx0ID0gYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95UmVzdWx0Lm5vT3ApLnRvRXF1YWwodHJ1ZSk7XG59KTtcblxudGVzdCgnZGVwbG95IG5vdCBza2lwcGVkIGlmIHRlbXBsYXRlIGRpZCBub3QgY2hhbmdlIGJ1dCBvbmUgdGFnIHJlbW92ZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoe1xuICAgIFRhZ3M6IFtcbiAgICAgIHsgS2V5OiAnS2V5MScsIFZhbHVlOiAnVmFsdWUxJyB9LFxuICAgICAgeyBLZXk6ICdLZXkyJywgVmFsdWU6ICdWYWx1ZTInIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHRhZ3M6IFtcbiAgICAgIHsgS2V5OiAnS2V5MScsIFZhbHVlOiAnVmFsdWUxJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZGVzY3JpYmVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmRlc2NyaWJlU3RhY2tzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IFN0YWNrTmFtZTogJ3dpdGhvdXRlcnJvcnMnIH0pO1xuICBleHBlY3QoY2ZuTW9ja3MuZ2V0VGVtcGxhdGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgU3RhY2tOYW1lOiAnd2l0aG91dGVycm9ycycsIFRlbXBsYXRlU3RhZ2U6ICdPcmlnaW5hbCcgfSk7XG59KTtcblxudGVzdCgnZGVwbG95IGlzIG5vdCBza2lwcGVkIGlmIHN0YWNrIGlzIGluIGEgX0ZBSUxFRCBzdGF0ZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyh7XG4gICAgU3RhY2tTdGF0dXM6ICdERUxFVEVfRkFJTEVEJyxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogdHJ1ZSxcbiAgfSkuY2F0Y2goKCkgPT4ge30pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2V4aXN0aW5nIHN0YWNrIGluIFVQREFURV9ST0xMQkFDS19DT01QTEVURSBzdGF0ZSBjYW4gYmUgdXBkYXRlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyhcbiAgICB7IFN0YWNrU3RhdHVzOiAnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyB9LCAvLyBUaGlzIGlzIGZvciB0aGUgaW5pdGlhbCBjaGVja1xuICAgIHsgU3RhY2tTdGF0dXM6ICdVUERBVEVfQ09NUExFVEUnIH0sIC8vIFBvbGwgdGhlIHVwZGF0ZVxuICApO1xuICBnaXZlblRlbXBsYXRlSXMoeyBjaGFuZ2VkOiAxMjMgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy5kZWxldGVTdGFjaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIENoYW5nZVNldFR5cGU6ICdVUERBVEUnLFxuICB9KSk7XG59KTtcblxudGVzdCgnZGVwbG95IG5vdCBza2lwcGVkIGlmIHRlbXBsYXRlIGNoYW5nZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGdpdmVuU3RhY2tFeGlzdHMoKTtcbiAgZ2l2ZW5UZW1wbGF0ZUlzKHsgY2hhbmdlZDogMTIzIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ25vdCBleGVjdXRlZCBhbmQgbm8gZXJyb3IgaWYgLS1uby1leGVjdXRlIGlzIGdpdmVuJywgYXN5bmMgKCkgPT4ge1xuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgZXhlY3V0ZTogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnZW1wdHkgY2hhbmdlIHNldCBpcyBkZWxldGVkIGlmIC0tZXhlY3V0ZSBpcyBnaXZlbicsIGFzeW5jICgpID0+IHtcbiAgY2ZuTW9ja3MuZGVzY3JpYmVDaGFuZ2VTZXQ/Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgIFN0YXR1czogJ0ZBSUxFRCcsXG4gICAgU3RhdHVzUmVhc29uOiAnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkLicsXG4gIH0pKTtcblxuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIGV4ZWN1dGU6IHRydWUsXG4gICAgZm9yY2U6IHRydWUsIC8vIE5lY2Vzc2FyeSB0byBieXBhc3MgXCJza2lwIGRlcGxveVwiXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICBleHBlY3QoY2ZuTW9ja3MuZXhlY3V0ZUNoYW5nZVNldCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAvL3RoZSBmaXJzdCBkZWxldGlvbiBpcyBmb3IgYW55IGV4aXN0aW5nIGNkayBjaGFuZ2Ugc2V0cywgdGhlIHNlY29uZCBpcyBmb3IgdGhlIGRlbGV0aW5nIHRoZSBuZXcgZW1wdHkgY2hhbmdlIHNldFxuICBleHBlY3QoY2ZuTW9ja3MuZGVsZXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG59KTtcblxudGVzdCgnZW1wdHkgY2hhbmdlIHNldCBpcyBub3QgZGVsZXRlZCBpZiAtLW5vLWV4ZWN1dGUgaXMgZ2l2ZW4nLCBhc3luYyAoKSA9PiB7XG4gIGNmbk1vY2tzLmRlc2NyaWJlQ2hhbmdlU2V0Py5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgICBTdGF0dXM6ICdGQUlMRUQnLFxuICAgIFN0YXR1c1JlYXNvbjogJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZC4nLFxuICB9KSk7XG5cbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cygpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBleGVjdXRlOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gIC8vdGhlIGZpcnN0IGRlbGV0aW9uIGlzIGZvciBhbnkgZXhpc3RpbmcgY2RrIGNoYW5nZSBzZXRzXG4gIGV4cGVjdChjZm5Nb2Nrcy5kZWxldGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbn0pO1xuXG50ZXN0KCd1c2UgUzMgdXJsIGZvciBzdGFjayBkZXBsb3ltZW50IGlmIHByZXNlbnQgaW4gU3RhY2sgQXJ0aWZhY3QnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgIC4uLnN0YW5kYXJkRGVwbG95U3RhY2tBcmd1bWVudHMoKSxcbiAgICBzdGFjazogdGVzdFN0YWNrKHtcbiAgICAgIHN0YWNrTmFtZTogJ3dpdGhvdXRlcnJvcnMnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBzdGFja1RlbXBsYXRlQXNzZXRPYmplY3RVcmw6ICdodHRwczovL3VzZS1tZS11c2UtbWUvJyxcbiAgICAgIH0sXG4gICAgfSksXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIFRlbXBsYXRlVVJMOiAnaHR0cHM6Ly91c2UtbWUtdXNlLW1lLycsXG4gIH0pKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCd1c2UgUkVTVCBBUEkgUzMgdXJsIHdpdGggc3Vic3RpdHV0ZWQgcGxhY2Vob2xkZXJzIGlmIG1hbmlmZXN0IHVybCBzdGFydHMgd2l0aCBzMzovLycsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIHN0YWNrOiB0ZXN0U3RhY2soe1xuICAgICAgc3RhY2tOYW1lOiAnd2l0aG91dGVycm9ycycsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHN0YWNrVGVtcGxhdGVBc3NldE9iamVjdFVybDogJ3MzOi8vdXNlLW1lLXVzZS1tZS0ke0FXUzo6QWNjb3VudElkfS9vYmplY3QnLFxuICAgICAgfSxcbiAgICB9KSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MuY3JlYXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgVGVtcGxhdGVVUkw6ICdodHRwczovL3MzLmJlcm11ZGEtdHJpYW5nbGUtMTMzNy5hbWF6b25hd3MuY29tL3VzZS1tZS11c2UtbWUtMTIzNDU2Nzg5L29iamVjdCcsXG4gIH0pKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCdjaGFuZ2VzZXQgaXMgY3JlYXRlZCB3aGVuIHN0YWNrIGV4aXN0cyBpbiBSRVZJRVdfSU5fUFJPR1JFU1Mgc3RhdHVzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlblN0YWNrRXhpc3RzKHtcbiAgICBTdGFja1N0YXR1czogJ1JFVklFV19JTl9QUk9HUkVTUycsXG4gICAgVGFnczogW1xuICAgICAgeyBLZXk6ICdLZXkxJywgVmFsdWU6ICdWYWx1ZTEnIH0sXG4gICAgICB7IEtleTogJ0tleTInLCBWYWx1ZTogJ1ZhbHVlMicgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgZXhlY3V0ZTogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgQ2hhbmdlU2V0VHlwZTogJ0NSRUFURScsXG4gICAgICBTdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJyxcbiAgICB9KSxcbiAgKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnY2hhbmdlc2V0IGlzIHVwZGF0ZWQgd2hlbiBzdGFjayBleGlzdHMgaW4gQ1JFQVRFX0NPTVBMRVRFIHN0YXR1cycsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyh7XG4gICAgVGFnczogW1xuICAgICAgeyBLZXk6ICdLZXkxJywgVmFsdWU6ICdWYWx1ZTEnIH0sXG4gICAgICB7IEtleTogJ0tleTInLCBWYWx1ZTogJ1ZhbHVlMicgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgZXhlY3V0ZTogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLmNyZWF0ZUNoYW5nZVNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgQ2hhbmdlU2V0VHlwZTogJ1VQREFURScsXG4gICAgICBTdGFja05hbWU6ICd3aXRob3V0ZXJyb3JzJyxcbiAgICB9KSxcbiAgKTtcbiAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnZGVwbG95IHdpdGggdGVybWluYXRpb24gcHJvdGVjdGlvbiBlbmFibGVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgc3RhY2s6IEZBS0VfU1RBQ0tfVEVSTUlOQVRJT05fUFJPVEVDVElPTixcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoY2ZuTW9ja3MudXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiB0cnVlLFxuICB9KSk7XG59KTtcblxudGVzdCgndXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uIG5vdCBjYWxsZWQgd2hlbiB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGlzIHVuZGVmaW5lZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjZm5Nb2Nrcy51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgndXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uIGNhbGxlZCB3aGVuIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gaXMgdW5kZWZpbmVkIGFuZCBzdGFjayBoYXMgdGVybWluYXRpb24gcHJvdGVjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZ2l2ZW5TdGFja0V4aXN0cyh7XG4gICAgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiB0cnVlLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGRlcGxveVN0YWNrKHtcbiAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNmbk1vY2tzLnVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gIH0pKTtcbn0pO1xuXG5kZXNjcmliZSgnZGlzYWJsZSByb2xsYmFjaycsICgpID0+IHtcbiAgdGVzdCgnYnkgZGVmYXVsdCwgd2UgZG8gbm90IGRpc2FibGUgcm9sbGJhY2sgKGFuZCBhbHNvIGRvIG5vdCBwYXNzIHRoZSBmbGFnKScsIGFzeW5jICgpID0+IHtcbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZGVwbG95U3RhY2soe1xuICAgICAgLi4uc3RhbmRhcmREZXBsb3lTdGFja0FyZ3VtZW50cygpLFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChjZm5Nb2Nrcy5leGVjdXRlQ2hhbmdlU2V0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICBEaXNhYmxlUm9sbGJhY2s6IGV4cGVjdC5hbnl0aGluZygpLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgdGVzdCgncm9sbGJhY2sgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgcm9sbGJhY2s6IGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBkZXBsb3lTdGFjayh7XG4gICAgICAuLi5zdGFuZGFyZERlcGxveVN0YWNrQXJndW1lbnRzKCksXG4gICAgICByb2xsYmFjazogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGNmbk1vY2tzLmV4ZWN1dGVDaGFuZ2VTZXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgIERpc2FibGVSb2xsYmFjazogdHJ1ZSxcbiAgICB9KSk7XG4gIH0pO1xuXG59KTtcblxuLyoqXG4gKiBTZXQgdXAgdGhlIG1vY2tzIHNvIHRoYXQgaXQgbG9va3MgbGlrZSB0aGUgc3RhY2sgZXhpc3RzIHRvIHN0YXJ0IHdpdGhcbiAqXG4gKiBUaGUgbGFzdCBlbGVtZW50IG9mIHRoaXMgYXJyYXkgd2lsbCBiZSBjb250aW51b3VzbHkgcmVwZWF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdpdmVuU3RhY2tFeGlzdHMoLi4ub3ZlcnJpZGVzOiBBcnJheTxQYXJ0aWFsPEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFjaz4+KSB7XG4gIGNmbk1vY2tzLmRlc2NyaWJlU3RhY2tzIS5tb2NrUmVzZXQoKTtcblxuICBpZiAob3ZlcnJpZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIG92ZXJyaWRlcyA9IFt7fV07XG4gIH1cblxuICBjb25zdCBiYXNlUmVzcG9uc2UgPSB7XG4gICAgU3RhY2tOYW1lOiAnbW9jay1zdGFjay1uYW1lJyxcbiAgICBTdGFja0lkOiAnbW9jay1zdGFjay1pZCcsXG4gICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgIFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICBFbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb246IGZhbHNlLFxuICB9O1xuXG4gIGZvciAoY29uc3Qgb3ZlcnJpZGUgb2Ygb3ZlcnJpZGVzLnNsaWNlKDAsIG92ZXJyaWRlcy5sZW5ndGggLSAxKSkge1xuICAgIGNmbk1vY2tzLmRlc2NyaWJlU3RhY2tzIS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+ICh7XG4gICAgICBTdGFja3M6IFt7IC4uLmJhc2VSZXNwb25zZSwgLi4ub3ZlcnJpZGUgfV0sXG4gICAgfSkpO1xuICB9XG4gIGNmbk1vY2tzLmRlc2NyaWJlU3RhY2tzIS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgICBTdGFja3M6IFt7IC4uLmJhc2VSZXNwb25zZSwgLi4ub3ZlcnJpZGVzW292ZXJyaWRlcy5sZW5ndGggLSAxXSB9XSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBnaXZlblRlbXBsYXRlSXModGVtcGxhdGU6IGFueSkge1xuICBjZm5Nb2Nrcy5nZXRUZW1wbGF0ZSEubW9ja1Jlc2V0KCk7XG4gIGNmbk1vY2tzLmdldFRlbXBsYXRlIS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgIFRlbXBsYXRlQm9keTogSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpLFxuICB9KTtcbn1cbiJdfQ==
|