cdktn 0.26.0-pre.2 → 0.26.0-pre.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +1200 -1116
- package/eslint.config.mjs +18 -7
- package/jest.config.js +0 -1
- package/lib/_tokens.d.ts +7 -0
- package/lib/_tokens.js +8 -2
- package/lib/annotations.js +1 -1
- package/lib/app.js +8 -4
- package/lib/aspect.js +1 -1
- package/lib/asset-hash.js +1 -1
- package/lib/asset-staging.js +1 -1
- package/lib/assets.js +4 -4
- package/lib/backends/azurerm-backend.d.ts +6 -0
- package/lib/backends/azurerm-backend.js +9 -5
- package/lib/backends/cloud-backend.js +4 -4
- package/lib/backends/consul-backend.d.ts +6 -0
- package/lib/backends/consul-backend.js +9 -5
- package/lib/backends/cos-backend.d.ts +6 -0
- package/lib/backends/cos-backend.js +9 -5
- package/lib/backends/gcs-backend.d.ts +6 -0
- package/lib/backends/gcs-backend.js +9 -5
- package/lib/backends/http-backend.d.ts +6 -0
- package/lib/backends/http-backend.js +9 -5
- package/lib/backends/local-backend.d.ts +6 -0
- package/lib/backends/local-backend.js +9 -5
- package/lib/backends/oss-backend.d.ts +6 -0
- package/lib/backends/oss-backend.js +9 -5
- package/lib/backends/pg-backend.d.ts +6 -0
- package/lib/backends/pg-backend.js +9 -5
- package/lib/backends/remote-backend.d.ts +12 -0
- package/lib/backends/remote-backend.js +17 -9
- package/lib/backends/s3-backend.d.ts +6 -0
- package/lib/backends/s3-backend.js +9 -5
- package/lib/backends/swift-backend.js +2 -2
- package/lib/complex-computed-list.d.ts +85 -0
- package/lib/complex-computed-list.js +112 -54
- package/lib/functions/helpers.d.ts +72 -0
- package/lib/functions/helpers.js +73 -14
- package/lib/functions/provider-function.js +1 -1
- package/lib/functions/terraform-functions.generated.d.ts +3 -0
- package/lib/functions/terraform-functions.generated.js +5 -3
- package/lib/hcl/quoted-string-key.d.ts +25 -0
- package/lib/hcl/quoted-string-key.js +42 -0
- package/lib/hcl/render.js +41 -7
- package/lib/ignore-strategy.js +1 -1
- package/lib/importable-resource.js +1 -1
- package/lib/manifest.d.ts +4 -0
- package/lib/manifest.js +6 -3
- package/lib/private/unique.js +11 -3
- package/lib/resource.js +1 -1
- package/lib/runtime.d.ts +6 -0
- package/lib/runtime.js +12 -3
- package/lib/synthesize/required-version.d.ts +32 -0
- package/lib/synthesize/required-version.js +205 -0
- package/lib/synthesize/synthesizer.d.ts +13 -0
- package/lib/synthesize/synthesizer.js +42 -8
- package/lib/terraform-asset.d.ts +4 -0
- package/lib/terraform-asset.js +6 -3
- package/lib/terraform-backend.d.ts +3 -0
- package/lib/terraform-backend.js +5 -3
- package/lib/terraform-conditions.js +1 -2
- package/lib/terraform-count.js +1 -1
- package/lib/terraform-data-resource.js +1 -1
- package/lib/terraform-data-source.d.ts +4 -0
- package/lib/terraform-data-source.js +8 -6
- package/lib/terraform-dependable.js +1 -1
- package/lib/terraform-dynamic-block.d.ts +4 -0
- package/lib/terraform-dynamic-block.js +5 -2
- package/lib/terraform-element.d.ts +4 -0
- package/lib/terraform-element.js +6 -3
- package/lib/terraform-ephemeral-resource.d.ts +4 -0
- package/lib/terraform-ephemeral-resource.js +8 -6
- package/lib/terraform-functions.d.ts +4 -0
- package/lib/terraform-functions.js +10 -5
- package/lib/terraform-hcl-module.d.ts +4 -0
- package/lib/terraform-hcl-module.js +6 -3
- package/lib/terraform-iterator.d.ts +19 -0
- package/lib/terraform-iterator.js +25 -11
- package/lib/terraform-local.d.ts +4 -0
- package/lib/terraform-local.js +6 -3
- package/lib/terraform-module.js +1 -1
- package/lib/terraform-operators.js +1 -1
- package/lib/terraform-output.d.ts +5 -0
- package/lib/terraform-output.js +23 -3
- package/lib/terraform-provider.d.ts +4 -0
- package/lib/terraform-provider.js +6 -3
- package/lib/terraform-provisioner.js +1 -1
- package/lib/terraform-remote-state.d.ts +3 -0
- package/lib/terraform-remote-state.js +5 -3
- package/lib/terraform-resource-targets.js +1 -1
- package/lib/terraform-resource.d.ts +5 -1
- package/lib/terraform-resource.js +16 -9
- package/lib/terraform-stack.d.ts +4 -0
- package/lib/terraform-stack.js +28 -9
- package/lib/terraform-variable.d.ts +7 -0
- package/lib/terraform-variable.js +16 -7
- package/lib/testing/adapters/jest.d.ts +3 -0
- package/lib/testing/adapters/jest.js +10 -1
- package/lib/testing/index.js +14 -4
- package/lib/testing/matchers.js +61 -19
- package/lib/tfExpression.d.ts +50 -0
- package/lib/tfExpression.js +114 -33
- package/lib/tokens/lazy.d.ts +4 -0
- package/lib/tokens/lazy.js +21 -8
- package/lib/tokens/private/dependency.js +2 -6
- package/lib/tokens/private/resolve.js +3 -3
- package/lib/tokens/private/stack-trace.d.ts +1 -1
- package/lib/tokens/private/stack-trace.js +1 -2
- package/lib/tokens/resolvable.js +2 -2
- package/lib/tokens/string-fragments.js +4 -4
- package/lib/tokens/token.js +2 -2
- package/lib/upgrade-id-aspect.js +1 -1
- package/lib/util.d.ts +0 -1
- package/lib/util.js +4 -4
- package/lib/validations/target-versions.d.ts +12 -0
- package/lib/validations/target-versions.js +40 -1
- package/package.json +112 -109
package/lib/terraform-stack.js
CHANGED
|
@@ -22,7 +22,10 @@ const terraform_resource_targets_1 = require("./terraform-resource-targets");
|
|
|
22
22
|
const terraform_resource_1 = require("./terraform-resource");
|
|
23
23
|
const render_1 = require("./hcl/render");
|
|
24
24
|
const errors_1 = require("./errors");
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Throws if the stack id contains a glob character (`*`, `?`, `[`, `]`, `{`, `}` or `!`)
|
|
27
|
+
* @param str Stack id to check
|
|
28
|
+
*/
|
|
26
29
|
function throwIfIdIsGlobCharacter(str) {
|
|
27
30
|
["*", "?", "[", "]", "{", "}", "!"].forEach((char) => {
|
|
28
31
|
if (str.includes(char)) {
|
|
@@ -30,15 +33,21 @@ function throwIfIdIsGlobCharacter(str) {
|
|
|
30
33
|
}
|
|
31
34
|
});
|
|
32
35
|
}
|
|
33
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Throws if the stack id contains whitespace
|
|
38
|
+
* @param str Stack id to check
|
|
39
|
+
*/
|
|
34
40
|
function throwIfIdContainsWhitespace(str) {
|
|
35
41
|
if (/\s/.test(str)) {
|
|
36
42
|
throw (0, errors_1.stackIdContainsWhitespace)(str);
|
|
37
43
|
}
|
|
38
44
|
}
|
|
39
|
-
|
|
45
|
+
/**
|
|
46
|
+
* A unit of deployment that synthesizes to its own Terraform configuration and working directory, with its own
|
|
47
|
+
* backend and state. Resources, providers and other Terraform elements are defined within a stack.
|
|
48
|
+
*/
|
|
40
49
|
class TerraformStack extends constructs_1.Construct {
|
|
41
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformStack", version: "0.26.0-pre.
|
|
50
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformStack", version: "0.26.0-pre.21" };
|
|
42
51
|
rawOverrides = {};
|
|
43
52
|
cdktfVersion;
|
|
44
53
|
crossStackOutputs = {};
|
|
@@ -80,8 +89,9 @@ class TerraformStack extends constructs_1.Construct {
|
|
|
80
89
|
throwIfIdIsGlobCharacter(id);
|
|
81
90
|
throwIfIdContainsWhitespace(id);
|
|
82
91
|
this.cdktfVersion = this.node.tryGetContext("cdktfVersion");
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
// The output format comes from the manifest at synth time, see
|
|
93
|
+
// StackSynthesizer.synthesize.
|
|
94
|
+
this.synthesizer = new synthesizer_1.StackSynthesizer(this, process.env.CDKTF_CONTINUE_SYNTH_ON_ERROR_ANNOTATIONS !== undefined);
|
|
85
95
|
Object.defineProperty(this, STACK_SYMBOL, { value: true });
|
|
86
96
|
this.node.addValidation(new validations_1.ValidateProviderPresence(this));
|
|
87
97
|
this.node.addValidation(new validations_1.ValidateFunctionVersionSupport(this));
|
|
@@ -134,7 +144,11 @@ class TerraformStack extends constructs_1.Construct {
|
|
|
134
144
|
}
|
|
135
145
|
static of(construct) {
|
|
136
146
|
return _lookup(construct);
|
|
137
|
-
|
|
147
|
+
/**
|
|
148
|
+
* Walks up the construct tree from the given construct until it finds a TerraformStack
|
|
149
|
+
* @param c Construct to start the search from
|
|
150
|
+
* @returns The nearest enclosing TerraformStack
|
|
151
|
+
*/
|
|
138
152
|
function _lookup(c) {
|
|
139
153
|
if (TerraformStack.isStack(c)) {
|
|
140
154
|
return c;
|
|
@@ -458,7 +472,12 @@ class TerraformStack extends constructs_1.Construct {
|
|
|
458
472
|
}
|
|
459
473
|
}
|
|
460
474
|
exports.TerraformStack = TerraformStack;
|
|
461
|
-
|
|
475
|
+
/**
|
|
476
|
+
* Collects the TerraformElements in a construct subtree, not descending into nested stacks
|
|
477
|
+
* @param node Root of the subtree to search
|
|
478
|
+
* @param into Array the found elements are appended to
|
|
479
|
+
* @returns The array of collected elements
|
|
480
|
+
*/
|
|
462
481
|
function terraformElements(node, into = []) {
|
|
463
482
|
if (terraform_element_1.TerraformElement.isTerraformElement(node)) {
|
|
464
483
|
into.push(node);
|
|
@@ -472,4 +491,4 @@ function terraformElements(node, into = []) {
|
|
|
472
491
|
}
|
|
473
492
|
return into;
|
|
474
493
|
}
|
|
475
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywyQ0FBeUQ7QUFDekQsdUNBQW9DO0FBRXBDLDJEQUF1RDtBQUN2RCxpQ0FBbUM7QUFDbkMsNkRBQXlEO0FBQ3pELDREQUF3RDtBQUN4RCxpREFBcUM7QUFDckMseURBQXFEO0FBRXJELDZDQUFnRDtBQUVoRCwwREFBNEQ7QUFFNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3hELCtDQUl1QjtBQUN2QiwrQkFBNEI7QUFDNUIsMkRBQXVEO0FBQ3ZELDZFQUF3RTtBQUN4RSw2REFBeUQ7QUFDekQseUNBYXNCO0FBQ3RCLHFDQU1rQjtBQWNsQiwrQ0FBK0M7QUFDL0MsU0FBUyx3QkFBd0IsQ0FBQyxHQUFXO0lBQzNDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbkQsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFBLG9DQUEyQixFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsK0NBQStDO0FBQy9DLFNBQVMsMkJBQTJCLENBQUMsR0FBVztJQUM5QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUEsa0NBQXlCLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCwrQ0FBK0M7QUFD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LENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLHNDQUFpQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUNwRSxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFsaEJILHdDQW1oQkM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyxpQkFBaUIsQ0FDeEIsSUFBZ0IsRUFDaEIsT0FBMkIsRUFBRTtJQUU3QixJQUFJLG9DQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLGdDQUFnQztRQUNoQyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxTQUFTO1FBQ1gsQ0FBQztRQUVELGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCwgTm9kZSB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vX3Rva2Vuc1wiO1xuXG5pbXBvcnQgeyBUZXJyYWZvcm1FbGVtZW50IH0gZnJvbSBcIi4vdGVycmFmb3JtLWVsZW1lbnRcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVByb3ZpZGVyIH0gZnJvbSBcIi4vdGVycmFmb3JtLXByb3ZpZGVyXCI7XG5pbXBvcnQgeyBMb2NhbEJhY2tlbmQgfSBmcm9tIFwiLi9iYWNrZW5kcy9sb2NhbC1iYWNrZW5kXCI7XG5pbXBvcnQgeyByZWYgfSBmcm9tIFwiLi90ZkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IFRlcnJhZm9ybU91dHB1dCB9IGZyb20gXCIuL3RlcnJhZm9ybS1vdXRwdXRcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVJlbW90ZVN0YXRlIH0gZnJvbSBcIi4vdGVycmFmb3JtLXJlbW90ZS1zdGF0ZVwiO1xuaW1wb3J0IHsgbWFrZVVuaXF1ZUlkIH0gZnJvbSBcIi4vcHJpdmF0ZS91bmlxdWVcIjtcbmltcG9ydCB7IElTdGFja1N5bnRoZXNpemVyIH0gZnJvbSBcIi4vc3ludGhlc2l6ZS90eXBlc1wiO1xuaW1wb3J0IHsgU3RhY2tTeW50aGVzaXplciB9IGZyb20gXCIuL3N5bnRoZXNpemUvc3ludGhlc2l6ZXJcIjtcblxuY29uc3QgU1RBQ0tfU1lNQk9MID0gU3ltYm9sLmZvcihcImNka3RmL1RlcnJhZm9ybVN0YWNrXCIpO1xuaW1wb3J0IHtcbiAgVmFsaWRhdGVGdW5jdGlvblZlcnNpb25TdXBwb3J0LFxuICBWYWxpZGF0ZVByb3ZpZGVyRnVuY3Rpb25UYXJnZXRTdXBwb3J0LFxuICBWYWxpZGF0ZVByb3ZpZGVyUHJlc2VuY2UsXG59IGZyb20gXCIuL3ZhbGlkYXRpb25zXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi9hcHBcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUJhY2tlbmQgfSBmcm9tIFwiLi90ZXJyYWZvcm0tYmFja2VuZFwiO1xuaW1wb3J0IHsgVGVycmFmb3JtUmVzb3VyY2VUYXJnZXRzIH0gZnJvbSBcIi4vdGVycmFmb3JtLXJlc291cmNlLXRhcmdldHNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVJlc291cmNlIH0gZnJvbSBcIi4vdGVycmFmb3JtLXJlc291cmNlXCI7XG5pbXBvcnQge1xuICByZW5kZXJEYXRhc291cmNlLFxuICByZW5kZXJFcGhlbWVyYWwsXG4gIHJlbmRlck1vZHVsZSxcbiAgcmVuZGVyTW92ZWQsXG4gIHJlbmRlck91dHB1dCxcbiAgcmVuZGVyUHJvdmlkZXIsXG4gIHJlbmRlclJlc291cmNlLFxuICByZW5kZXJUZXJyYWZvcm0sXG4gIHJlbmRlckxvY2FscyxcbiAgcmVuZGVyVmFyaWFibGUsXG4gIHJlbmRlckltcG9ydCxcbiAgY2xlYW5Gb3JNZXRhZGF0YSxcbn0gZnJvbSBcIi4vaGNsL3JlbmRlclwiO1xuaW1wb3J0IHtcbiAgbm9TdGFja0ZvckNvbnN0cnVjdCxcbiAgc3RhY2tDb250YWluc0Rpc2FsbG93ZWRDaGFyLFxuICBzdGFja0hhc0NpcmN1bGFyRGVwZW5kZW5jeSxcbiAgc3RhY2tJZENvbnRhaW5zV2hpdGVzcGFjZSxcbiAgc3RhY2tWYWxpZGF0aW9uRmFpbHVyZSxcbn0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbnR5cGUgU3RhY2tJZGVudGlmaWVyID0gc3RyaW5nO1xudHlwZSBPdXRwdXRJZE1hcCA9XG4gIHwgeyBbY29uc3RydWN0SWQ6IHN0cmluZ106IHN0cmluZyB9XG4gIHwgeyBbc3RhY2tPckNvbnN0cnVjdElkOiBzdHJpbmddOiBPdXRwdXRJZE1hcCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVN0YWNrTWV0YWRhdGEge1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBiYWNrZW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsb3VkPzogc3RyaW5nO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gdGhyb3dJZklkSXNHbG9iQ2hhcmFjdGVyKHN0cjogc3RyaW5nKTogdm9pZCB7XG4gIFtcIipcIiwgXCI/XCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBcIiFcIl0uZm9yRWFjaCgoY2hhcikgPT4ge1xuICAgIGlmIChzdHIuaW5jbHVkZXMoY2hhcikpIHtcbiAgICAgIHRocm93IHN0YWNrQ29udGFpbnNEaXNhbGxvd2VkQ2hhcihzdHIsIGNoYXIpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiB0aHJvd0lmSWRDb250YWluc1doaXRlc3BhY2Uoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKC9cXHMvLnRlc3Qoc3RyKSkge1xuICAgIHRocm93IHN0YWNrSWRDb250YWluc1doaXRlc3BhY2Uoc3RyKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybVN0YWNrIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSByYXdPdmVycmlkZXM6IGFueSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGNka3RmVmVyc2lvbjogc3RyaW5nO1xuICBwcml2YXRlIGNyb3NzU3RhY2tPdXRwdXRzOiBSZWNvcmQ8U3RhY2tJZGVudGlmaWVyLCBUZXJyYWZvcm1PdXRwdXQ+ID0ge307XG4gIHByaXZhdGUgY3Jvc3NTdGFja0RhdGFTb3VyY2VzOiBSZWNvcmQ8U3RhY2tJZGVudGlmaWVyLCBUZXJyYWZvcm1SZW1vdGVTdGF0ZT4gPVxuICAgIHt9O1xuICBwdWJsaWMgc3ludGhlc2l6ZXI6IElTdGFja1N5bnRoZXNpemVyO1xuICBwdWJsaWMgZGVwZW5kZW5jaWVzOiBUZXJyYWZvcm1TdGFja1tdID0gW107XG4gIHB1YmxpYyBtb3ZlVGFyZ2V0czogVGVycmFmb3JtUmVzb3VyY2VUYXJnZXRzID0gbmV3IFRlcnJhZm9ybVJlc291cmNlVGFyZ2V0cygpO1xuXG4gIC8qKlxuICAgKiBUZXJyYWZvcm0gZnVuY3Rpb25zIChgRm4uKmApIGFuZCBwcm92aWRlci1kZWZpbmVkXG4gICAqIChgcHJvdmlkZXI6OjxuYW1lPjo6PGZ1bmN0aW9uPmApIGZ1bmN0aW9ucyBhY3R1YWxseSByZW5kZXJlZCB3aGlsZVxuICAgKiByZXNvbHZpbmcgVEhJUyBzdGFjaydzIG93biBlbGVtZW50cyBkdXJpbmcgdGhlIGN1cnJlbnQgc3ludGhlc2lzIHBhc3MuXG4gICAqXG4gICAqIFVzYWdlIGlzIHN0YWNrLW93bmVkIHJhdGhlciB0aGFuIEFwcC1vd25lZDogYFZhbGlkYXRlRnVuY3Rpb25WZXJzaW9uU3VwcG9ydGBcbiAgICogLyBgVmFsaWRhdGVQcm92aWRlckZ1bmN0aW9uVGFyZ2V0U3VwcG9ydGAgYXJlIHJlZ2lzdGVyZWQgaW4gdGhpc1xuICAgKiBjb25zdHJ1Y3RvciB3aXRoIHRoZSBzdGFjayBpdHNlbGYgYXMgc2NvcGUsIGFuZCBgcmVzb2x2ZVRhcmdldFZlcnNpb25zYFxuICAgKiB3YWxrcyBjb250ZXh0IHVwIEZST00gdGhhdCBzY29wZSAtIGkuZS4gZnJvbSB0aGUgc3RhY2ssIG5vdCB0aGUgQXBwIHJvb3QuXG4gICAqIFNpYmxpbmcgc3RhY2tzIGNhbiB0aGVyZWZvcmUgZGVjbGFyZSBkaWZmZXJlbnQgYHRhcmdldFZlcnNpb25zYCB2aWFcbiAgICogc3RhY2stbGV2ZWwgYG5vZGUuc2V0Q29udGV4dGAsIGFuZCBhIHBlci1BcHAtcm9vdCB1c2FnZSByZWNvcmQgd291bGQgbGV0XG4gICAqIG9uZSBzdGFjaydzIHVzYWdlIGJlIHZhbGlkYXRlZCBhZ2FpbnN0IGEgRElGRkVSRU5UIHN0YWNrJ3MgdGFyZ2V0c1xuICAgKiAoZmFsc2UgcG9zaXRpdmVzL25lZ2F0aXZlcyBkZXBlbmRpbmcgb24gd2hpY2ggc2libGluZyBoYXBwZW5zIHRvIGJlXG4gICAqIHN0cmljdGVyKS4gS2V5aW5nIHVzYWdlIGJ5IHRoZSBzdGFjayB0aGF0IGFjdHVhbGx5IHJlbmRlcmVkIGl0IG1ha2VzXG4gICAqIGVhY2ggc3RhY2sncyB2YWxpZGF0aW9uIHNlZSBvbmx5IGl0cyBvd24gdXNhZ2UsIGNoZWNrZWQgYWdhaW5zdCBpdHMgb3duXG4gICAqIHRhcmdldHMuXG4gICAqXG4gICAqIFJlcHJlc2VudHMgdGhlIENVUlJFTlQgc3ludGhlc2lzIHBhc3Mgb25seSwgbm90IHRoZSBzdGFjaydzIHdob2xlXG4gICAqIGxpZmV0aW1lOiBgX3J1blByZXBhcmluZ1Jlc29sdmVgIGNsZWFycyBib3RoIHNldHMgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5XG4gICAqIHBhc3MsIGJlZm9yZSByZS1kaXNjb3ZlcmluZyB3aGF0IHRoYXQgcGFzcyBhY3R1YWxseSByZW5kZXJzIChzZWVcbiAgICogYF9yZWNvcmRGdW5jdGlvblVzYWdlYC9gX3JlY29yZFByb3ZpZGVyRnVuY3Rpb25Vc2FnZWAsIGNhbGxlZCBmcm9tXG4gICAqIGBGdW5jdGlvbkNhbGwucmVzb2x2ZSgpYCBpbiBgdGZFeHByZXNzaW9uLnRzYCkuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF91c2VkRnVuY3Rpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIFNlZSBgX3VzZWRGdW5jdGlvbnNgIC0gc2FtZSBwZXItc3RhY2ssIHBlci1wYXNzIHNlbWFudGljcywgZm9yXG4gICAqIHByb3ZpZGVyLWRlZmluZWQgKGBwcm92aWRlcjo6PG5hbWU+Ojo8ZnVuY3Rpb24+YCkgZnVuY3Rpb24gY2FsbHMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF91c2VkUHJvdmlkZXJGdW5jdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRocm93SWZJZElzR2xvYkNoYXJhY3RlcihpZCk7XG4gICAgdGhyb3dJZklkQ29udGFpbnNXaGl0ZXNwYWNlKGlkKTtcbiAgICB0aGlzLmNka3RmVmVyc2lvbiA9IHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwiY2RrdGZWZXJzaW9uXCIpO1xuICAgIHRoaXMuc3ludGhlc2l6ZXIgPSBuZXcgU3RhY2tTeW50aGVzaXplcihcbiAgICAgIHRoaXMsXG4gICAgICBwcm9jZXNzLmVudi5DREtURl9DT05USU5VRV9TWU5USF9PTl9FUlJPUl9BTk5PVEFUSU9OUyAhPT0gdW5kZWZpbmVkLFxuICAgICAgcHJvY2Vzcy5lbnYuU1lOVEhfSENMX09VVFBVVCA9PT0gXCJ0cnVlXCIgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnYuU1lOVEhfSENMX09VVFBVVCA9PT0gXCIxXCIsXG4gICAgKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgU1RBQ0tfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBWYWxpZGF0ZVByb3ZpZGVyUHJlc2VuY2UodGhpcykpO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBWYWxpZGF0ZUZ1bmN0aW9uVmVyc2lvblN1cHBvcnQodGhpcykpO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBWYWxpZGF0ZVByb3ZpZGVyRnVuY3Rpb25UYXJnZXRTdXBwb3J0KHRoaXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNTdGFjayh4OiBhbnkpOiB4IGlzIFRlcnJhZm9ybVN0YWNrIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBTVEFDS19TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgYGZ1bmN0aW9uTmFtZWAgKGEgYEZuLipgIFRlcnJhZm9ybSBmdW5jdGlvbikgd2FzIHJlbmRlcmVkXG4gICAqIHdoaWxlIHJlc29sdmluZyBvbmUgb2YgdGhpcyBzdGFjaydzIGVsZW1lbnRzIGR1cmluZyB0aGUgY3VycmVudFxuICAgKiBzeW50aGVzaXMgcGFzcy4gQ2FsbGVkIGZyb20gYEZ1bmN0aW9uQ2FsbC5yZXNvbHZlKClgIGluIGB0ZkV4cHJlc3Npb24udHNgXG4gICAqIC0gc2VlIGBfdXNlZEZ1bmN0aW9uc2AgZm9yIHdoeSB1c2FnZSBpcyBzdGFjay1vd25lZC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3JlY29yZEZ1bmN0aW9uVXNhZ2UoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl91c2VkRnVuY3Rpb25zLmFkZChmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgdGhhdCBgZnVsbE5hbWVgIChhIGBwcm92aWRlcjo6PG5hbWU+Ojo8ZnVuY3Rpb24+YCBjYWxsKSB3YXNcbiAgICogcmVuZGVyZWQgd2hpbGUgcmVzb2x2aW5nIG9uZSBvZiB0aGlzIHN0YWNrJ3MgZWxlbWVudHMgZHVyaW5nIHRoZVxuICAgKiBjdXJyZW50IHN5bnRoZXNpcyBwYXNzLiBDYWxsZWQgZnJvbSBgRnVuY3Rpb25DYWxsLnJlc29sdmUoKWAgaW5cbiAgICogYHRmRXhwcmVzc2lvbi50c2AgLSBzZWUgYF91c2VkRnVuY3Rpb25zYCBmb3Igd2h5IHVzYWdlIGlzIHN0YWNrLW93bmVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfcmVjb3JkUHJvdmlkZXJGdW5jdGlvblVzYWdlKGZ1bGxOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl91c2VkUHJvdmlkZXJGdW5jdGlvbnMuYWRkKGZ1bGxOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgRm4uKmAgVGVycmFmb3JtIGZ1bmN0aW9uIG5hbWVzIHJlbmRlcmVkIHdoaWxlIHJlc29sdmluZ1xuICAgKiB0aGlzIHN0YWNrJ3MgZWxlbWVudHMgZHVyaW5nIHRoZSBjdXJyZW50IHN5bnRoZXNpcyBwYXNzLiBSZWFkIGJ5XG4gICAqIGBWYWxpZGF0ZUZ1bmN0aW9uVmVyc2lvblN1cHBvcnRgLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfZ2V0VXNlZEZ1bmN0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdXNlZEZ1bmN0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYHByb3ZpZGVyOjo8bmFtZT46OjxmdW5jdGlvbj5gIGNhbGxzIHJlbmRlcmVkIHdoaWxlXG4gICAqIHJlc29sdmluZyB0aGlzIHN0YWNrJ3MgZWxlbWVudHMgZHVyaW5nIHRoZSBjdXJyZW50IHN5bnRoZXNpcyBwYXNzLiBSZWFkXG4gICAqIGJ5IGBWYWxpZGF0ZVByb3ZpZGVyRnVuY3Rpb25UYXJnZXRTdXBwb3J0YC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2dldFVzZWRQcm92aWRlckZ1bmN0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdXNlZFByb3ZpZGVyRnVuY3Rpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb2YoY29uc3RydWN0OiBJQ29uc3RydWN0KTogVGVycmFmb3JtU3RhY2sge1xuICAgIHJldHVybiBfbG9va3VwKGNvbnN0cnVjdCk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIF9sb29rdXAoYzogSUNvbnN0cnVjdCk6IFRlcnJhZm9ybVN0YWNrIHtcbiAgICAgIGlmIChUZXJyYWZvcm1TdGFjay5pc1N0YWNrKGMpKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlID0gYy5ub2RlO1xuXG4gICAgICBpZiAoIW5vZGUuc2NvcGUpIHtcbiAgICAgICAgbGV0IGhpbnQgPSBcIlwiO1xuICAgICAgICBpZiAoY29uc3RydWN0Lm5vZGUuc2NvcGUgPT09IGMgJiYgQXBwLmlzQXBwKGMpKSB7XG4gICAgICAgICAgLy8gdGhlIHNjb3BlIG9mIHRoZSBvcmlnaW5hbGx5IHBhc3NlZCBjb25zdHJ1Y3QgZXF1YWxzIHRoZSBjb25zdHJ1Y3QgY1xuICAgICAgICAgIC8vIHdoaWNoIGhhcyBubyBzY29wZSAoaS5lLiBoYXMgbm8gcGFyZW50IGNvbnN0cnVjdCkgYW5kIGMgaXMgYW4gQXBwXG4gICAgICAgICAgLy8gYW5kIG91ciBjb25zdHJ1Y3QgaXMgYSBCYWNrZW5kXG4gICAgICAgICAgaGludCA9IGAuIFlvdSBzZWVtIHRvIGhhdmUgcGFzc2VkIHlvdXIgcm9vdCBBcHAgYXMgc2NvcGUgdG8gYSBjb25zdHJ1Y3QuIFBhc3MgYSBzdGFjayAoaW5oZXJpdGluZyBmcm9tIFRlcnJhZm9ybVN0YWNrKSBhcyBzY29wZSB0byB5b3VyIGNvbnN0cnVjdCBpbnN0ZWFkLmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBub1N0YWNrRm9yQ29uc3RydWN0KGNvbnN0cnVjdC5ub2RlLnBhdGgsIGhpbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2xvb2t1cChub2RlLnNjb3BlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRBbGw8VCBleHRlbmRzIElDb25zdHJ1Y3Q+KFxuICAgIHByZWRpY2F0ZTogKG5vZGU6IHVua25vd24pID0+IG5vZGUgaXMgVCxcbiAgKTogVFtdIHtcbiAgICBjb25zdCBpdGVtczogVFtdID0gW107XG5cbiAgICBjb25zdCB2aXNpdCA9IGFzeW5jIChub2RlOiBJQ29uc3RydWN0KSA9PiB7XG4gICAgICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2gobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5ub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHZpc2l0KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmlzaXQodGhpcyk7XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgcHJlcGFyZVN0YWNrKCkge1xuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgYmFja2VuZCBjb25maWd1cmVkXG4gICAgdGhpcy5lbnN1cmVCYWNrZW5kRXhpc3RzKCk7XG4gICAgdGhpcy5fcnVuUHJlcGFyaW5nUmVzb2x2ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvbHZlLWRpc2NvdmVyeSBoYWxmIG9mIGBwcmVwYXJlU3RhY2soKWAsIHNwbGl0IG91dCBzbyBlbnRyeVxuICAgKiBwb2ludHMgdGhhdCBtdXN0IE5PVCBpbmplY3QgYSBiYWNrZW5kIChgVGVzdGluZy5zeW50aGAvYHN5bnRoSGNsYCAtXG4gICAqIGRvaW5nIHNvIHdvdWxkIGFkZCBhbiBpbXBsaWNpdCBsb2NhbCBiYWNrZW5kIHRvIHNuYXBzaG90cyB0aGF0IG5ldmVyXG4gICAqIGFza2VkIGZvciBvbmUpIGNhbiBzdGlsbCBydW4gdGhlIHBhcnQgdGhhdCBkaXNjb3ZlcnMgY3VycmVudC1wYXNzXG4gICAqIHByb3ZpZGVyLWZlYXR1cmUgYW5kIFRlcnJhZm9ybS1mdW5jdGlvbiB1c2FnZS5cbiAgICpcbiAgICogQ2xlYXJzIHRoaXMgc3RhY2sncyBvd24gYF91c2VkRnVuY3Rpb25zYC9gX3VzZWRQcm92aWRlckZ1bmN0aW9uc2Agc2V0c1xuICAgKiBmaXJzdCAtIHRoaXMgc3RhY2sncyBwZXItcGFzcyBlcG9jaCBmb3IgVGVycmFmb3JtLWZ1bmN0aW9uIHVzYWdlLlxuICAgKiBCZWNhdXNlIHRoZSByZXNldCBsaXZlcyBoZXJlLCBvbmNlIHBlciBzdGFjaywgZXZlcnkgdmFsaWRhdGlvbi1lbmFibGVkXG4gICAqIGVudHJ5IHBvaW50IChgQXBwLnN5bnRoYCwgYFRlc3Rpbmcuc3ludGhgL2BzeW50aEhjbGAsXG4gICAqIGBTdGFja1N5bnRoZXNpemVyLnN5bnRoZXNpemVgKSBnZXRzIGl0IGZvciBmcmVlIGp1c3QgYnkgY2FsbGluZ1xuICAgKiBgcHJlcGFyZVN0YWNrKClgL2BfcnVuUHJlcGFyaW5nUmVzb2x2ZSgpYCAtIHNlZSBgX3VzZWRGdW5jdGlvbnNgIGZvciB3aHlcbiAgICogdXNhZ2UgaXMga2V5ZWQgYnkgc3RhY2suXG4gICAqXG4gICAqIFRoZW4gZGVhY3RpdmF0ZXMgZXZlcnkgZWxlbWVudCdzIHN0YWxlIGByZXNvbHZlLWRpc2NvdmVyZWRgXG4gICAqIHByb3ZpZGVyLWZlYXR1cmUgcmVnaXN0cmF0aW9ucyAoc2VlXG4gICAqIGBUZXJyYWZvcm1FbGVtZW50Ll9yZXNldFJlc29sdmVEaXNjb3ZlcmVkUHJvdmlkZXJGZWF0dXJlVXNhZ2VgKSAtIHNvXG4gICAqIHVzYWdlIGZyb20gYW4gZWFybGllciBzeW50aGVzaXMgcGFzcyBvdmVyIHRoaXMgc2FtZSBzdGFjayBjYW4ndCBzdXJ2aXZlXG4gICAqIGludG8gdGhpcyBvbmUgLSB0aGVuIHJlc29sdmVzIGV2ZXJ5IGVsZW1lbnQncyBgdG9UZXJyYWZvcm0oKWAsIHdoaWNoIGlzXG4gICAqIHdoYXQgcmUtZGlzY292ZXJzIHRoaXMgcGFzcydzIGFjdHVhbCB1c2FnZSAoYm90aCBwcm92aWRlci1mZWF0dXJlIHVzYWdlXG4gICAqIHZpYSBgbWFya1dyaXRlT25seUF0dHJpYnV0ZWAsIGFuZCBUZXJyYWZvcm0tZnVuY3Rpb24gdXNhZ2UgdmlhXG4gICAqIGBGdW5jdGlvbkNhbGwucmVzb2x2ZSgpYCwgd2hpY2ggcmVjb3JkcyBpbnRvIGBfcmVjb3JkRnVuY3Rpb25Vc2FnZWAvXG4gICAqIGBfcmVjb3JkUHJvdmlkZXJGdW5jdGlvblVzYWdlYCBhYm92ZSkuIEEgcHJlcGFyaW5nIHJlc29sdmUgcnVuIG1pZ2h0XG4gICAqIGFsc28gYWRkIG5ldyByZXNvdXJjZXMgdG8gdGhlIHN0YWNrLCBlLmcuIGZvciBjcm9zcyBzdGFjayByZWZlcmVuY2VzLlxuICAgKiBDcm9zcy1zdGFjayByZWZlcmVuY2VzIHN0YXkgc291bmQgZXZlbiB0aG91Z2ggdGhpcyBtZXRob2Qgc2tpcHMgVEhJU1xuICAgKiBzdGFjaydzIGBlbnN1cmVCYWNrZW5kRXhpc3RzKClgOiByZXNvbHZpbmcgb25lIG1hdGVyaWFsaXplcyB0aGUgT1JJR0lOXG4gICAqIHN0YWNrJ3MgYmFja2VuZCBvbiBkZW1hbmQgKGByZWdpc3RlckluY29taW5nQ3Jvc3NTdGFja1JlZmVyZW5jZWAgY2FsbHNcbiAgICogYGZyb21TdGFjay5lbnN1cmVCYWNrZW5kRXhpc3RzKClgIGl0c2VsZiksIHNvIG9ubHkgdGhlIHN5bnRoZXNpemluZ1xuICAgKiBzdGFjaydzIG93biBiYWNrZW5kIGJsb2NrIGlzIGxlZnQgdW5pbmplY3RlZCAtIHdoaWNoIGlzIGV4YWN0bHkgd2hhdFxuICAgKiB0aGUgYFRlc3Rpbmcuc3ludGhgL2BzeW50aEhjbGAgY2FsbGVycyB3YW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfcnVuUHJlcGFyaW5nUmVzb2x2ZSgpIHtcbiAgICB0aGlzLl91c2VkRnVuY3Rpb25zLmNsZWFyKCk7XG4gICAgdGhpcy5fdXNlZFByb3ZpZGVyRnVuY3Rpb25zLmNsZWFyKCk7XG4gICAgdGVycmFmb3JtRWxlbWVudHModGhpcykuZm9yRWFjaCgoZSkgPT5cbiAgICAgIGUuX3Jlc2V0UmVzb2x2ZURpc2NvdmVyZWRQcm92aWRlckZlYXR1cmVVc2FnZSgpLFxuICAgICk7XG4gICAgdGVycmFmb3JtRWxlbWVudHModGhpcykuZm9yRWFjaCgoZSkgPT5cbiAgICAgIHJlc29sdmUodGhpcywgZS50b1RlcnJhZm9ybSgpLCB0cnVlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZE92ZXJyaWRlKHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgbGV0IGN1cnI6IGFueSA9IHRoaXMucmF3T3ZlcnJpZGVzO1xuXG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGtleSA9IHBhcnRzLnNoaWZ0KCkhO1xuXG4gICAgICAvLyBpZiB3ZSBjYW4ndCByZWN1cnNlIGZ1cnRoZXIgb3IgdGhlIHByZXZpb3VzIHZhbHVlIGlzIG5vdCBhblxuICAgICAgLy8gb2JqZWN0IG92ZXJ3cml0ZSBpdCB3aXRoIGFuIG9iamVjdC5cbiAgICAgIGNvbnN0IGlzT2JqZWN0ID1cbiAgICAgICAgY3VycltrZXldICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIGN1cnJba2V5XSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShjdXJyW2tleV0pO1xuICAgICAgaWYgKCFpc09iamVjdCkge1xuICAgICAgICBjdXJyW2tleV0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgY3VyciA9IGN1cnJba2V5XTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0S2V5ID0gcGFydHMuc2hpZnQoKSE7XG4gICAgY3VycltsYXN0S2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldExvZ2ljYWxJZCh0ZkVsZW1lbnQ6IFRlcnJhZm9ybUVsZW1lbnQgfCBOb2RlKTogc3RyaW5nIHtcbiAgICAvLyB3cmFwIHRoZSBhbGxvY2F0aW9uIGZvciBmdXR1cmUgcmVuYW1pbmcgc3VwcG9ydFxuICAgIHJldHVybiB0aGlzLmFsbG9jYXRlTG9naWNhbElkKHRmRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtaW5nIHNjaGVtZSB1c2VkIHRvIGFsbG9jYXRlIGxvZ2ljYWwgSURzLiBCeSBkZWZhdWx0LCB1c2VzXG4gICAqIHRoZSBgSGFzaGVkQWRkcmVzc2luZ1NjaGVtZWAgYnV0IHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIHRvIGN1c3RvbWl6ZVxuICAgKiB0aGlzIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAcGFyYW0gdGZFbGVtZW50IFRoZSBlbGVtZW50IGZvciB3aGljaCB0aGUgbG9naWNhbCBJRCBpcyBhbGxvY2F0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWxsb2NhdGVMb2dpY2FsSWQodGZFbGVtZW50OiBUZXJyYWZvcm1FbGVtZW50IHwgTm9kZSk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9kZSA9IFRlcnJhZm9ybUVsZW1lbnQuaXNUZXJyYWZvcm1FbGVtZW50KHRmRWxlbWVudClcbiAgICAgID8gdGZFbGVtZW50Lm5vZGVcbiAgICAgIDogdGZFbGVtZW50O1xuICAgIGNvbnN0IHN0YWNrID0gVGVycmFmb3JtRWxlbWVudC5pc1RlcnJhZm9ybUVsZW1lbnQodGZFbGVtZW50KVxuICAgICAgPyB0ZkVsZW1lbnQuY2RrdGZTdGFja1xuICAgICAgOiB0aGlzO1xuXG4gICAgY29uc3Qgc3RhY2tJbmRleCA9IG5vZGUuc2NvcGVzLmluZGV4T2Yoc3RhY2spO1xuXG4gICAgY29uc3QgY29tcG9uZW50cyA9IG5vZGUuc2NvcGVzLnNsaWNlKHN0YWNrSW5kZXggKyAxKS5tYXAoKGMpID0+IGMubm9kZS5pZCk7XG4gICAgcmV0dXJuIGNvbXBvbmVudHMubGVuZ3RoID4gMCA/IG1ha2VVbmlxdWVJZChjb21wb25lbnRzKSA6IFwiXCI7XG4gIH1cblxuICBwdWJsaWMgYWxsUHJvdmlkZXJzKCk6IFRlcnJhZm9ybVByb3ZpZGVyW10ge1xuICAgIHJldHVybiB0aGlzLmZpbmRBbGwoVGVycmFmb3JtUHJvdmlkZXIuaXNUZXJyYWZvcm1Qcm92aWRlcik7XG4gIH1cblxuICBwdWJsaWMgZW5zdXJlQmFja2VuZEV4aXN0cygpOiBUZXJyYWZvcm1CYWNrZW5kIHtcbiAgICBjb25zdCBiYWNrZW5kcyA9IHRoaXMuZmluZEFsbChUZXJyYWZvcm1CYWNrZW5kLmlzQmFja2VuZCk7XG4gICAgcmV0dXJuIGJhY2tlbmRzWzBdIHx8IG5ldyBMb2NhbEJhY2tlbmQodGhpcywge30pO1xuICB9XG5cbiAgcHVibGljIHRvSGNsVGVycmFmb3JtKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBUZXJyYWZvcm1TdGFja01ldGFkYXRhID0ge1xuICAgICAgdmVyc2lvbjogdGhpcy5jZGt0ZlZlcnNpb24sXG4gICAgICBzdGFja05hbWU6IHRoaXMubm9kZS5pZCxcbiAgICAgIGJhY2tlbmQ6IFwibG9jYWxcIiwgLy8gb3ZlcndyaXR0ZW4gYnkgYmFja2VuZCBpbXBsZW1lbnRhdGlvbnMgaWYgdXNlZFxuICAgICAgY2xvdWQ6IHVuZGVmaW5lZCwgLy8gb3ZlcndyaXR0ZW4gYnkgY2xvdWQgYW5kIHJlbW90ZSBiYWNrZW5kIGltcGxlbWVudGF0aW9uc1xuICAgICAgLi4uKE9iamVjdC5rZXlzKHRoaXMucmF3T3ZlcnJpZGVzKS5sZW5ndGggPiAwXG4gICAgICAgID8geyBvdmVycmlkZXM6IHsgc3RhY2s6IE9iamVjdC5rZXlzKHRoaXMucmF3T3ZlcnJpZGVzKSB9IH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcblxuICAgIGNvbnN0IGVsZW1lbnRzID0gdGVycmFmb3JtRWxlbWVudHModGhpcyk7XG5cbiAgICBjb25zdCBtZXRhZGF0YXMgPSBlbGVtZW50cy5tYXAoKGUpID0+IHJlc29sdmUodGhpcywgZS50b01ldGFkYXRhKCkpKTtcbiAgICBmb3IgKGNvbnN0IG1ldGEgb2YgbWV0YWRhdGFzKSB7XG4gICAgICBkZWVwTWVyZ2UobWV0YWRhdGEsIG1ldGEpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHM6IE91dHB1dElkTWFwID0gZWxlbWVudHMucmVkdWNlKChjYXJyeSwgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFUZXJyYWZvcm1PdXRwdXQuaXNUZXJyYWZvcm1PdXRwdXQoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgICAgfVxuXG4gICAgICBkZWVwTWVyZ2UoXG4gICAgICAgIGNhcnJ5LFxuICAgICAgICBpdGVtLm5vZGUucGF0aC5zcGxpdChcIi9cIikucmVkdWNlUmlnaHQoKGlubmVyQ2FycnksIHBhcnQpID0+IHtcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoaW5uZXJDYXJyeSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBbcGFydF06IGl0ZW0uZnJpZW5kbHlVbmlxdWVJZCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBbcGFydF06IGlubmVyQ2FycnkgfTtcbiAgICAgICAgfSwge30pLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IHRmID0ge307XG4gICAgY29uc3QgZnJhZ21lbnRzID0gZWxlbWVudHMubWFwKChlKSA9PiByZXNvbHZlKHRoaXMsIGUudG9IY2xUZXJyYWZvcm0oKSkpO1xuICAgIGNvbnN0IGxvY2FsczogeyBsb2NhbHM/OiBhbnkgfSA9IHt9O1xuXG4gICAgY29uc3QgdGZNZXRhID0ge1xuICAgICAgXCIvL1wiOiB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGhjbEZyYWdtZW50cyA9IGZyYWdtZW50c1xuICAgICAgLm1hcCgoZnJhZykgPT4ge1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgaWYgKGZyYWcucmVzb3VyY2UpIHtcbiAgICAgICAgICBjb25zdCB7IGhjbCwgbWV0YWRhdGEgfSA9IHJlbmRlclJlc291cmNlKGZyYWcucmVzb3VyY2UpO1xuICAgICAgICAgIGRlZXBNZXJnZSh0Zk1ldGEsIG1ldGFkYXRhKTtcbiAgICAgICAgICByZXMgPSBbcmVzLCBoY2xdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhZy5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgeyBoY2wsIG1ldGFkYXRhIH0gPSByZW5kZXJEYXRhc291cmNlKGZyYWcuZGF0YSk7XG4gICAgICAgICAgZGVlcE1lcmdlKHRmTWV0YSwgbWV0YWRhdGEpO1xuICAgICAgICAgIHJlcyA9IFtyZXMsIGhjbF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnLmVwaGVtZXJhbCkge1xuICAgICAgICAgIGNvbnN0IHsgaGNsLCBtZXRhZGF0YSB9ID0gcmVuZGVyRXBoZW1lcmFsKGZyYWcuZXBoZW1lcmFsKTtcbiAgICAgICAgICBkZWVwTWVyZ2UodGZNZXRhLCBtZXRhZGF0YSk7XG4gICAgICAgICAgcmVzID0gW3JlcywgaGNsXS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcucHJvdmlkZXIpIHtcbiAgICAgICAgICBkZWVwTWVyZ2UodGYsIGZyYWcpO1xuICAgICAgICAgIHJlcyA9IFtyZXMsIHJlbmRlclByb3ZpZGVyKGZyYWcucHJvdmlkZXIpXS5qb2luKFwiXFxuXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcudGVycmFmb3JtKSB7XG4gICAgICAgICAgZGVlcE1lcmdlKHRmLCBmcmFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnLm1vZHVsZSkge1xuICAgICAgICAgIGNvbnN0IHsgaGNsLCBtZXRhZGF0YSB9ID0gcmVuZGVyTW9kdWxlKGZyYWcubW9kdWxlKTtcbiAgICAgICAgICBkZWVwTWVyZ2UodGZNZXRhLCBtZXRhZGF0YSk7XG4gICAgICAgICAgcmVzID0gW3JlcywgaGNsXS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcub3V0cHV0KSB7XG4gICAgICAgICAgcmVzID0gW3JlcywgcmVuZGVyT3V0cHV0KGZyYWcub3V0cHV0KV0uam9pbihcIlxcblxcblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnLm1vdmVkKSB7XG4gICAgICAgICAgcmVzID0gW3JlcywgcmVuZGVyTW92ZWQoZnJhZy5tb3ZlZCldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhZy5pbXBvcnQpIHtcbiAgICAgICAgICByZXMgPSBbcmVzLCByZW5kZXJJbXBvcnQoZnJhZy5pbXBvcnQpXS5qb2luKFwiXFxuXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcubG9jYWxzKSB7XG4gICAgICAgICAgZGVlcE1lcmdlKGxvY2FscywgZnJhZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhZy52YXJpYWJsZSkge1xuICAgICAgICAgIHJlcyA9IFtyZXMsIHJlbmRlclZhcmlhYmxlKGZyYWcudmFyaWFibGUpXS5qb2luKFwiXFxuXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChmcmFnKSA9PiBmcmFnICE9PSB1bmRlZmluZWQpO1xuXG4gICAgZGVlcE1lcmdlKHRmLCB0aGlzLnJhd092ZXJyaWRlcyk7XG4gICAgY29uc3QgdGVycmFmb3JtQmxvY2sgPSAodGYgYXMgYW55KT8udGVycmFmb3JtO1xuXG4gICAgbGV0IHRlcnJhZm9ybUJsb2NrSGNsID0gXCJcIjtcbiAgICBpZiAodGVycmFmb3JtQmxvY2spIHtcbiAgICAgIHRlcnJhZm9ybUJsb2NrSGNsID0gcmVuZGVyVGVycmFmb3JtKHRlcnJhZm9ybUJsb2NrKTtcbiAgICAgIGRlZXBNZXJnZSh0Zk1ldGEsIHsgdGVycmFmb3JtOiBjbGVhbkZvck1ldGFkYXRhKHRlcnJhZm9ybUJsb2NrKSB9KTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxzSGNsID0gXCJcIjtcbiAgICBpZiAobG9jYWxzKSB7XG4gICAgICBsb2NhbHNIY2wgPSByZW5kZXJMb2NhbHMobG9jYWxzLmxvY2Fscyk7XG5cbiAgICAgIGlmIChsb2NhbHNIY2wpIHtcbiAgICAgICAgLy8gSGFja3kgd2F5IHRvIGFkZCBhIG5ld2xpbmUgYmV0d2VlbiB0aGUgdGVycmFmb3JtIGJsb2NrIGFuZCB0aGUgbG9jYWxzIGJsb2NrXG4gICAgICAgIGxvY2Fsc0hjbCA9IFwiXFxuXFxuXCIgKyBsb2NhbHNIY2w7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhjbDogcmVzb2x2ZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgW3RlcnJhZm9ybUJsb2NrSGNsLCBsb2NhbHNIY2wsIC4uLmhjbEZyYWdtZW50c10uam9pbihcIlwiKSxcbiAgICAgICksXG4gICAgICBtZXRhZGF0YTogcmVzb2x2ZSh0aGlzLCB0Zk1ldGEpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdG9UZXJyYWZvcm0oKTogYW55IHtcbiAgICBjb25zdCB0ZiA9IHt9O1xuXG4gICAgY29uc3QgbWV0YWRhdGE6IFRlcnJhZm9ybVN0YWNrTWV0YWRhdGEgPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLmNka3RmVmVyc2lvbixcbiAgICAgIHN0YWNrTmFtZTogdGhpcy5ub2RlLmlkLFxuICAgICAgYmFja2VuZDogXCJsb2NhbFwiLCAvLyBvdmVyd3JpdHRlbiBieSBiYWNrZW5kIGltcGxlbWVudGF0aW9ucyBpZiB1c2VkXG4gICAgICBjbG91ZDogdW5kZWZpbmVkLCAvLyBvdmVyd3JpdHRlbiBieSBjbG91ZCBhbmQgcmVtb3RlIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zXG4gICAgICAuLi4oT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IG92ZXJyaWRlczogeyBzdGFjazogT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpIH0gfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1FbGVtZW50cyh0aGlzKTtcblxuICAgIGNvbnN0IG1ldGFkYXRhcyA9IGVsZW1lbnRzLm1hcCgoZSkgPT4gcmVzb2x2ZSh0aGlzLCBlLnRvTWV0YWRhdGEoKSkpO1xuICAgIGZvciAoY29uc3QgbWV0YSBvZiBtZXRhZGF0YXMpIHtcbiAgICAgIGRlZXBNZXJnZShtZXRhZGF0YSwgbWV0YSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0czogT3V0cHV0SWRNYXAgPSBlbGVtZW50cy5yZWR1Y2UoKGNhcnJ5LCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIVRlcnJhZm9ybU91dHB1dC5pc1RlcnJhZm9ybU91dHB1dChpdGVtKSkge1xuICAgICAgICByZXR1cm4gY2Fycnk7XG4gICAgICB9XG5cbiAgICAgIGRlZXBNZXJnZShcbiAgICAgICAgY2FycnksXG4gICAgICAgIGl0ZW0ubm9kZS5wYXRoLnNwbGl0KFwiL1wiKS5yZWR1Y2VSaWdodCgoaW5uZXJDYXJyeSwgcGFydCkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhpbm5lckNhcnJ5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IFtwYXJ0XTogaXRlbS5mcmllbmRseVVuaXF1ZUlkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IFtwYXJ0XTogaW5uZXJDYXJyeSB9O1xuICAgICAgICB9LCB7fSksXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY2Fycnk7XG4gICAgfSwge30pO1xuXG4gICAgKHRmIGFzIGFueSlbXCIvL1wiXSA9IHsgbWV0YWRhdGEsIG91dHB1dHMgfTtcblxuICAgIGNvbnN0IGZyYWdtZW50cyA9IGVsZW1lbnRzLm1hcCgoZSkgPT4gcmVzb2x2ZSh0aGlzLCBlLnRvVGVycmFmb3JtKCkpKTtcbiAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuICAgICAgZGVlcE1lcmdlKHRmLCBmcmFnbWVudCk7XG4gICAgfVxuXG4gICAgZGVlcE1lcmdlKHRmLCB0aGlzLnJhd092ZXJyaWRlcyk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLCB0Zik7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPdXRnb2luZ0Nyb3NzU3RhY2tSZWZlcmVuY2UoaWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY3Jvc3NTdGFja091dHB1dHNbaWRlbnRpZmllcl0pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyb3NzU3RhY2tPdXRwdXRzW2lkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBUZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgYGNyb3NzLXN0YWNrLW91dHB1dC0ke2lkZW50aWZpZXJ9YCxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHJlZihpZGVudGlmaWVyLCB0aGlzKSxcbiAgICAgICAgc2Vuc2l0aXZlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5jcm9zc1N0YWNrT3V0cHV0c1tpZGVudGlmaWVyXSA9IG91dHB1dDtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVySW5jb21pbmdDcm9zc1N0YWNrUmVmZXJlbmNlKGZyb21TdGFjazogVGVycmFmb3JtU3RhY2spIHtcbiAgICBpZiAodGhpcy5jcm9zc1N0YWNrRGF0YVNvdXJjZXNbU3RyaW5nKGZyb21TdGFjayldKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcm9zc1N0YWNrRGF0YVNvdXJjZXNbU3RyaW5nKGZyb21TdGFjayldO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5CYWNrZW5kID0gZnJvbVN0YWNrLmVuc3VyZUJhY2tlbmRFeGlzdHMoKTtcbiAgICBjb25zdCBvcmlnaW5QYXRoID0gZnJvbVN0YWNrLm5vZGUucGF0aDtcblxuICAgIGNvbnN0IHJlbW90ZVN0YXRlID0gb3JpZ2luQmFja2VuZC5nZXRSZW1vdGVTdGF0ZURhdGFTb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgYGNyb3NzLXN0YWNrLXJlZmVyZW5jZS1pbnB1dC0ke29yaWdpblBhdGh9YCxcbiAgICAgIG9yaWdpblBhdGgsXG4gICAgKTtcblxuICAgIHRoaXMuY3Jvc3NTdGFja0RhdGFTb3VyY2VzW29yaWdpblBhdGhdID0gcmVtb3RlU3RhdGU7XG4gICAgcmV0dXJuIHJlbW90ZVN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaGVyZSBmb3IgbG9vcHMgaW4gdGhlIGRlcGVuZGVuY3kgZ3JhcGhcbiAgcHVibGljIGRlcGVuZHNPbihzdGFjazogVGVycmFmb3JtU3RhY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMuaW5jbHVkZXMoc3RhY2spIHx8XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5zb21lKChkKSA9PiBkLmRlcGVuZHNPbihzdGFjaykpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KGRlcGVuZGVuY3k6IFRlcnJhZm9ybVN0YWNrKSB7XG4gICAgaWYgKGRlcGVuZGVuY3kuZGVwZW5kc09uKHRoaXMpKSB7XG4gICAgICB0aHJvdyBzdGFja0hhc0NpcmN1bGFyRGVwZW5kZW5jeSh0aGlzLCBkZXBlbmRlbmN5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXBlbmRlbmNpZXMuaW5jbHVkZXMoZGVwZW5kZW5jeSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKGRlcGVuZGVuY3kpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhbGwgdmFsaWRhdGlvbnMgb24gdGhlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIHJ1bkFsbFZhbGlkYXRpb25zKCkge1xuICAgIGNvbnN0IGVycm9yczogeyBtZXNzYWdlOiBzdHJpbmc7IHNvdXJjZTogSUNvbnN0cnVjdCB9W10gPSB0aGlzLm5vZGVcbiAgICAgIC5maW5kQWxsKClcbiAgICAgIC5tYXAoKG5vZGUpID0+XG4gICAgICAgIG5vZGUubm9kZS52YWxpZGF0ZSgpLm1hcCgoZXJyb3IpID0+ICh7IG1lc3NhZ2U6IGVycm9yLCBzb3VyY2U6IG5vZGUgfSkpLFxuICAgICAgKVxuICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gWy4uLnByZXYsIC4uLmN1cnJdLCBbXSk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlcnJvckxpc3QgPSBlcnJvcnNcbiAgICAgICAgLm1hcCgoZSkgPT4gYFske2Uuc291cmNlLm5vZGUucGF0aH1dICR7ZS5tZXNzYWdlfWApXG4gICAgICAgIC5qb2luKFwiXFxuICBcIik7XG4gICAgICB0aHJvdyBzdGFja1ZhbGlkYXRpb25GYWlsdXJlKGVycm9yTGlzdCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhc1Jlc291cmNlTW92ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGVycmFmb3JtRWxlbWVudHModGhpcykuc29tZSgoZSkgPT4ge1xuICAgICAgaWYgKFRlcnJhZm9ybVJlc291cmNlLmlzVGVycmFmb3JtUmVzb3VyY2UoZSkgJiYgZS5oYXNSZXNvdXJjZU1vdmUoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gdGVycmFmb3JtRWxlbWVudHMoXG4gIG5vZGU6IElDb25zdHJ1Y3QsXG4gIGludG86IFRlcnJhZm9ybUVsZW1lbnRbXSA9IFtdLFxuKTogVGVycmFmb3JtRWxlbWVudFtdIHtcbiAgaWYgKFRlcnJhZm9ybUVsZW1lbnQuaXNUZXJyYWZvcm1FbGVtZW50KG5vZGUpKSB7XG4gICAgaW50by5wdXNoKG5vZGUpO1xuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLm5vZGUuY2hpbGRyZW4pIHtcbiAgICAvLyBEb24ndCByZWN1cnNlIGludG8gYSBzdWJzdGFja1xuICAgIGlmIChUZXJyYWZvcm1TdGFjay5pc1N0YWNrKGNoaWxkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdGVycmFmb3JtRWxlbWVudHMoY2hpbGQsIGludG8pO1xuICB9XG5cbiAgcmV0dXJuIGludG87XG59XG4iXX0=
|
|
494
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywyQ0FBeUQ7QUFDekQsdUNBQW9DO0FBRXBDLDJEQUF1RDtBQUN2RCxpQ0FBbUM7QUFDbkMsNkRBQXlEO0FBQ3pELDREQUF3RDtBQUN4RCxpREFBcUM7QUFDckMseURBQXFEO0FBRXJELDZDQUFnRDtBQUVoRCwwREFBNEQ7QUFFNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3hELCtDQUl1QjtBQUN2QiwrQkFBNEI7QUFDNUIsMkRBQXVEO0FBQ3ZELDZFQUF3RTtBQUN4RSw2REFBeUQ7QUFDekQseUNBYXNCO0FBQ3RCLHFDQU1rQjtBQWNsQjs7O0dBR0c7QUFDSCxTQUFTLHdCQUF3QixDQUFDLEdBQVc7SUFDM0MsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNuRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUEsb0NBQTJCLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDJCQUEyQixDQUFDLEdBQVc7SUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFBLGtDQUF5QixFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gs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QUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUNwRSxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF0aEJILHdDQXVoQkM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsaUJBQWlCLENBQ3hCLElBQWdCLEVBQ2hCLE9BQTJCLEVBQUU7SUFFN0IsSUFBSSxvQ0FBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxnQ0FBZ0M7UUFDaEMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsU0FBUztRQUNYLENBQUM7UUFFRCxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QsIE5vZGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL190b2tlbnNcIjtcblxuaW1wb3J0IHsgVGVycmFmb3JtRWxlbWVudCB9IGZyb20gXCIuL3RlcnJhZm9ybS1lbGVtZW50XCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlciB9IGZyb20gXCIuL3RlcnJhZm9ybS1wcm92aWRlclwiO1xuaW1wb3J0IHsgTG9jYWxCYWNrZW5kIH0gZnJvbSBcIi4vYmFja2VuZHMvbG9jYWwtYmFja2VuZFwiO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSBcIi4vdGZFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1PdXRwdXQgfSBmcm9tIFwiLi90ZXJyYWZvcm0tb3V0cHV0XCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1SZW1vdGVTdGF0ZSB9IGZyb20gXCIuL3RlcnJhZm9ybS1yZW1vdGUtc3RhdGVcIjtcbmltcG9ydCB7IG1ha2VVbmlxdWVJZCB9IGZyb20gXCIuL3ByaXZhdGUvdW5pcXVlXCI7XG5pbXBvcnQgeyBJU3RhY2tTeW50aGVzaXplciB9IGZyb20gXCIuL3N5bnRoZXNpemUvdHlwZXNcIjtcbmltcG9ydCB7IFN0YWNrU3ludGhlc2l6ZXIgfSBmcm9tIFwiLi9zeW50aGVzaXplL3N5bnRoZXNpemVyXCI7XG5cbmNvbnN0IFNUQUNLX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJjZGt0Zi9UZXJyYWZvcm1TdGFja1wiKTtcbmltcG9ydCB7XG4gIFZhbGlkYXRlRnVuY3Rpb25WZXJzaW9uU3VwcG9ydCxcbiAgVmFsaWRhdGVQcm92aWRlckZ1bmN0aW9uVGFyZ2V0U3VwcG9ydCxcbiAgVmFsaWRhdGVQcm92aWRlclByZXNlbmNlLFxufSBmcm9tIFwiLi92YWxpZGF0aW9uc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4vYXBwXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1CYWNrZW5kIH0gZnJvbSBcIi4vdGVycmFmb3JtLWJhY2tlbmRcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVJlc291cmNlVGFyZ2V0cyB9IGZyb20gXCIuL3RlcnJhZm9ybS1yZXNvdXJjZS10YXJnZXRzXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1SZXNvdXJjZSB9IGZyb20gXCIuL3RlcnJhZm9ybS1yZXNvdXJjZVwiO1xuaW1wb3J0IHtcbiAgcmVuZGVyRGF0YXNvdXJjZSxcbiAgcmVuZGVyRXBoZW1lcmFsLFxuICByZW5kZXJNb2R1bGUsXG4gIHJlbmRlck1vdmVkLFxuICByZW5kZXJPdXRwdXQsXG4gIHJlbmRlclByb3ZpZGVyLFxuICByZW5kZXJSZXNvdXJjZSxcbiAgcmVuZGVyVGVycmFmb3JtLFxuICByZW5kZXJMb2NhbHMsXG4gIHJlbmRlclZhcmlhYmxlLFxuICByZW5kZXJJbXBvcnQsXG4gIGNsZWFuRm9yTWV0YWRhdGEsXG59IGZyb20gXCIuL2hjbC9yZW5kZXJcIjtcbmltcG9ydCB7XG4gIG5vU3RhY2tGb3JDb25zdHJ1Y3QsXG4gIHN0YWNrQ29udGFpbnNEaXNhbGxvd2VkQ2hhcixcbiAgc3RhY2tIYXNDaXJjdWxhckRlcGVuZGVuY3ksXG4gIHN0YWNrSWRDb250YWluc1doaXRlc3BhY2UsXG4gIHN0YWNrVmFsaWRhdGlvbkZhaWx1cmUsXG59IGZyb20gXCIuL2Vycm9yc1wiO1xuXG50eXBlIFN0YWNrSWRlbnRpZmllciA9IHN0cmluZztcbnR5cGUgT3V0cHV0SWRNYXAgPVxuICB8IHsgW2NvbnN0cnVjdElkOiBzdHJpbmddOiBzdHJpbmcgfVxuICB8IHsgW3N0YWNrT3JDb25zdHJ1Y3RJZDogc3RyaW5nXTogT3V0cHV0SWRNYXAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1TdGFja01ldGFkYXRhIHtcbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgYmFja2VuZDogc3RyaW5nO1xuICByZWFkb25seSBjbG91ZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdGhlIHN0YWNrIGlkIGNvbnRhaW5zIGEgZ2xvYiBjaGFyYWN0ZXIgKGAqYCwgYD9gLCBgW2AsIGBdYCwgYHtgLCBgfWAgb3IgYCFgKVxuICogQHBhcmFtIHN0ciBTdGFjayBpZCB0byBjaGVja1xuICovXG5mdW5jdGlvbiB0aHJvd0lmSWRJc0dsb2JDaGFyYWN0ZXIoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgW1wiKlwiLCBcIj9cIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIFwiIVwiXS5mb3JFYWNoKChjaGFyKSA9PiB7XG4gICAgaWYgKHN0ci5pbmNsdWRlcyhjaGFyKSkge1xuICAgICAgdGhyb3cgc3RhY2tDb250YWluc0Rpc2FsbG93ZWRDaGFyKHN0ciwgY2hhcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdGhlIHN0YWNrIGlkIGNvbnRhaW5zIHdoaXRlc3BhY2VcbiAqIEBwYXJhbSBzdHIgU3RhY2sgaWQgdG8gY2hlY2tcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZklkQ29udGFpbnNXaGl0ZXNwYWNlKHN0cjogc3RyaW5nKTogdm9pZCB7XG4gIGlmICgvXFxzLy50ZXN0KHN0cikpIHtcbiAgICB0aHJvdyBzdGFja0lkQ29udGFpbnNXaGl0ZXNwYWNlKHN0cik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHVuaXQgb2YgZGVwbG95bWVudCB0aGF0IHN5bnRoZXNpemVzIHRvIGl0cyBvd24gVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gYW5kIHdvcmtpbmcgZGlyZWN0b3J5LCB3aXRoIGl0cyBvd25cbiAqIGJhY2tlbmQgYW5kIHN0YXRlLiBSZXNvdXJjZXMsIHByb3ZpZGVycyBhbmQgb3RoZXIgVGVycmFmb3JtIGVsZW1lbnRzIGFyZSBkZWZpbmVkIHdpdGhpbiBhIHN0YWNrLlxuICovXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtU3RhY2sgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd092ZXJyaWRlczogYW55ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RrdGZWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgY3Jvc3NTdGFja091dHB1dHM6IFJlY29yZDxTdGFja0lkZW50aWZpZXIsIFRlcnJhZm9ybU91dHB1dD4gPSB7fTtcbiAgcHJpdmF0ZSBjcm9zc1N0YWNrRGF0YVNvdXJjZXM6IFJlY29yZDxTdGFja0lkZW50aWZpZXIsIFRlcnJhZm9ybVJlbW90ZVN0YXRlPiA9XG4gICAge307XG4gIHB1YmxpYyBzeW50aGVzaXplcjogSVN0YWNrU3ludGhlc2l6ZXI7XG4gIHB1YmxpYyBkZXBlbmRlbmNpZXM6IFRlcnJhZm9ybVN0YWNrW10gPSBbXTtcbiAgcHVibGljIG1vdmVUYXJnZXRzOiBUZXJyYWZvcm1SZXNvdXJjZVRhcmdldHMgPSBuZXcgVGVycmFmb3JtUmVzb3VyY2VUYXJnZXRzKCk7XG5cbiAgLyoqXG4gICAqIFRlcnJhZm9ybSBmdW5jdGlvbnMgKGBGbi4qYCkgYW5kIHByb3ZpZGVyLWRlZmluZWRcbiAgICogKGBwcm92aWRlcjo6PG5hbWU+Ojo8ZnVuY3Rpb24+YCkgZnVuY3Rpb25zIGFjdHVhbGx5IHJlbmRlcmVkIHdoaWxlXG4gICAqIHJlc29sdmluZyBUSElTIHN0YWNrJ3Mgb3duIGVsZW1lbnRzIGR1cmluZyB0aGUgY3VycmVudCBzeW50aGVzaXMgcGFzcy5cbiAgICpcbiAgICogVXNhZ2UgaXMgc3RhY2stb3duZWQgcmF0aGVyIHRoYW4gQXBwLW93bmVkOiBgVmFsaWRhdGVGdW5jdGlvblZlcnNpb25TdXBwb3J0YFxuICAgKiAvIGBWYWxpZGF0ZVByb3ZpZGVyRnVuY3Rpb25UYXJnZXRTdXBwb3J0YCBhcmUgcmVnaXN0ZXJlZCBpbiB0aGlzXG4gICAqIGNvbnN0cnVjdG9yIHdpdGggdGhlIHN0YWNrIGl0c2VsZiBhcyBzY29wZSwgYW5kIGByZXNvbHZlVGFyZ2V0VmVyc2lvbnNgXG4gICAqIHdhbGtzIGNvbnRleHQgdXAgRlJPTSB0aGF0IHNjb3BlIC0gaS5lLiBmcm9tIHRoZSBzdGFjaywgbm90IHRoZSBBcHAgcm9vdC5cbiAgICogU2libGluZyBzdGFja3MgY2FuIHRoZXJlZm9yZSBkZWNsYXJlIGRpZmZlcmVudCBgdGFyZ2V0VmVyc2lvbnNgIHZpYVxuICAgKiBzdGFjay1sZXZlbCBgbm9kZS5zZXRDb250ZXh0YCwgYW5kIGEgcGVyLUFwcC1yb290IHVzYWdlIHJlY29yZCB3b3VsZCBsZXRcbiAgICogb25lIHN0YWNrJ3MgdXNhZ2UgYmUgdmFsaWRhdGVkIGFnYWluc3QgYSBESUZGRVJFTlQgc3RhY2sncyB0YXJnZXRzXG4gICAqIChmYWxzZSBwb3NpdGl2ZXMvbmVnYXRpdmVzIGRlcGVuZGluZyBvbiB3aGljaCBzaWJsaW5nIGhhcHBlbnMgdG8gYmVcbiAgICogc3RyaWN0ZXIpLiBLZXlpbmcgdXNhZ2UgYnkgdGhlIHN0YWNrIHRoYXQgYWN0dWFsbHkgcmVuZGVyZWQgaXQgbWFrZXNcbiAgICogZWFjaCBzdGFjaydzIHZhbGlkYXRpb24gc2VlIG9ubHkgaXRzIG93biB1c2FnZSwgY2hlY2tlZCBhZ2FpbnN0IGl0cyBvd25cbiAgICogdGFyZ2V0cy5cbiAgICpcbiAgICogUmVwcmVzZW50cyB0aGUgQ1VSUkVOVCBzeW50aGVzaXMgcGFzcyBvbmx5LCBub3QgdGhlIHN0YWNrJ3Mgd2hvbGVcbiAgICogbGlmZXRpbWU6IGBfcnVuUHJlcGFyaW5nUmVzb2x2ZWAgY2xlYXJzIGJvdGggc2V0cyBhdCB0aGUgc3RhcnQgb2YgZXZlcnlcbiAgICogcGFzcywgYmVmb3JlIHJlLWRpc2NvdmVyaW5nIHdoYXQgdGhhdCBwYXNzIGFjdHVhbGx5IHJlbmRlcnMgKHNlZVxuICAgKiBgX3JlY29yZEZ1bmN0aW9uVXNhZ2VgL2BfcmVjb3JkUHJvdmlkZXJGdW5jdGlvblVzYWdlYCwgY2FsbGVkIGZyb21cbiAgICogYEZ1bmN0aW9uQ2FsbC5yZXNvbHZlKClgIGluIGB0ZkV4cHJlc3Npb24udHNgKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZWRGdW5jdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKipcbiAgICogU2VlIGBfdXNlZEZ1bmN0aW9uc2AgLSBzYW1lIHBlci1zdGFjaywgcGVyLXBhc3Mgc2VtYW50aWNzLCBmb3JcbiAgICogcHJvdmlkZXItZGVmaW5lZCAoYHByb3ZpZGVyOjo8bmFtZT46OjxmdW5jdGlvbj5gKSBmdW5jdGlvbiBjYWxscy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZWRQcm92aWRlckZ1bmN0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhyb3dJZklkSXNHbG9iQ2hhcmFjdGVyKGlkKTtcbiAgICB0aHJvd0lmSWRDb250YWluc1doaXRlc3BhY2UoaWQpO1xuICAgIHRoaXMuY2RrdGZWZXJzaW9uID0gdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJjZGt0ZlZlcnNpb25cIik7XG4gICAgLy8gVGhlIG91dHB1dCBmb3JtYXQgY29tZXMgZnJvbSB0aGUgbWFuaWZlc3QgYXQgc3ludGggdGltZSwgc2VlXG4gICAgLy8gU3RhY2tTeW50aGVzaXplci5zeW50aGVzaXplLlxuICAgIHRoaXMuc3ludGhlc2l6ZXIgPSBuZXcgU3RhY2tTeW50aGVzaXplcihcbiAgICAgIHRoaXMsXG4gICAgICBwcm9jZXNzLmVudi5DREtURl9DT05USU5VRV9TWU5USF9PTl9FUlJPUl9BTk5PVEFUSU9OUyAhPT0gdW5kZWZpbmVkLFxuICAgICk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFNUQUNLX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgVmFsaWRhdGVQcm92aWRlclByZXNlbmNlKHRoaXMpKTtcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgVmFsaWRhdGVGdW5jdGlvblZlcnNpb25TdXBwb3J0KHRoaXMpKTtcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgVmFsaWRhdGVQcm92aWRlckZ1bmN0aW9uVGFyZ2V0U3VwcG9ydCh0aGlzKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzU3RhY2soeDogYW55KTogeCBpcyBUZXJyYWZvcm1TdGFjayB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgU1RBQ0tfU1lNQk9MIGluIHg7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkcyB0aGF0IGBmdW5jdGlvbk5hbWVgIChhIGBGbi4qYCBUZXJyYWZvcm0gZnVuY3Rpb24pIHdhcyByZW5kZXJlZFxuICAgKiB3aGlsZSByZXNvbHZpbmcgb25lIG9mIHRoaXMgc3RhY2sncyBlbGVtZW50cyBkdXJpbmcgdGhlIGN1cnJlbnRcbiAgICogc3ludGhlc2lzIHBhc3MuIENhbGxlZCBmcm9tIGBGdW5jdGlvbkNhbGwucmVzb2x2ZSgpYCBpbiBgdGZFeHByZXNzaW9uLnRzYFxuICAgKiAtIHNlZSBgX3VzZWRGdW5jdGlvbnNgIGZvciB3aHkgdXNhZ2UgaXMgc3RhY2stb3duZWQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9yZWNvcmRGdW5jdGlvblVzYWdlKGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdXNlZEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgYGZ1bGxOYW1lYCAoYSBgcHJvdmlkZXI6OjxuYW1lPjo6PGZ1bmN0aW9uPmAgY2FsbCkgd2FzXG4gICAqIHJlbmRlcmVkIHdoaWxlIHJlc29sdmluZyBvbmUgb2YgdGhpcyBzdGFjaydzIGVsZW1lbnRzIGR1cmluZyB0aGVcbiAgICogY3VycmVudCBzeW50aGVzaXMgcGFzcy4gQ2FsbGVkIGZyb20gYEZ1bmN0aW9uQ2FsbC5yZXNvbHZlKClgIGluXG4gICAqIGB0ZkV4cHJlc3Npb24udHNgIC0gc2VlIGBfdXNlZEZ1bmN0aW9uc2AgZm9yIHdoeSB1c2FnZSBpcyBzdGFjay1vd25lZC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3JlY29yZFByb3ZpZGVyRnVuY3Rpb25Vc2FnZShmdWxsTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdXNlZFByb3ZpZGVyRnVuY3Rpb25zLmFkZChmdWxsTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYEZuLipgIFRlcnJhZm9ybSBmdW5jdGlvbiBuYW1lcyByZW5kZXJlZCB3aGlsZSByZXNvbHZpbmdcbiAgICogdGhpcyBzdGFjaydzIGVsZW1lbnRzIGR1cmluZyB0aGUgY3VycmVudCBzeW50aGVzaXMgcGFzcy4gUmVhZCBieVxuICAgKiBgVmFsaWRhdGVGdW5jdGlvblZlcnNpb25TdXBwb3J0YC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2dldFVzZWRGdW5jdGlvbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3VzZWRGdW5jdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBwcm92aWRlcjo6PG5hbWU+Ojo8ZnVuY3Rpb24+YCBjYWxscyByZW5kZXJlZCB3aGlsZVxuICAgKiByZXNvbHZpbmcgdGhpcyBzdGFjaydzIGVsZW1lbnRzIGR1cmluZyB0aGUgY3VycmVudCBzeW50aGVzaXMgcGFzcy4gUmVhZFxuICAgKiBieSBgVmFsaWRhdGVQcm92aWRlckZ1bmN0aW9uVGFyZ2V0U3VwcG9ydGAuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9nZXRVc2VkUHJvdmlkZXJGdW5jdGlvbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3VzZWRQcm92aWRlckZ1bmN0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG9mKGNvbnN0cnVjdDogSUNvbnN0cnVjdCk6IFRlcnJhZm9ybVN0YWNrIHtcbiAgICByZXR1cm4gX2xvb2t1cChjb25zdHJ1Y3QpO1xuXG4gICAgLyoqXG4gICAgICogV2Fsa3MgdXAgdGhlIGNvbnN0cnVjdCB0cmVlIGZyb20gdGhlIGdpdmVuIGNvbnN0cnVjdCB1bnRpbCBpdCBmaW5kcyBhIFRlcnJhZm9ybVN0YWNrXG4gICAgICogQHBhcmFtIGMgQ29uc3RydWN0IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbVxuICAgICAqIEByZXR1cm5zIFRoZSBuZWFyZXN0IGVuY2xvc2luZyBUZXJyYWZvcm1TdGFja1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9sb29rdXAoYzogSUNvbnN0cnVjdCk6IFRlcnJhZm9ybVN0YWNrIHtcbiAgICAgIGlmIChUZXJyYWZvcm1TdGFjay5pc1N0YWNrKGMpKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlID0gYy5ub2RlO1xuXG4gICAgICBpZiAoIW5vZGUuc2NvcGUpIHtcbiAgICAgICAgbGV0IGhpbnQgPSBcIlwiO1xuICAgICAgICBpZiAoY29uc3RydWN0Lm5vZGUuc2NvcGUgPT09IGMgJiYgQXBwLmlzQXBwKGMpKSB7XG4gICAgICAgICAgLy8gdGhlIHNjb3BlIG9mIHRoZSBvcmlnaW5hbGx5IHBhc3NlZCBjb25zdHJ1Y3QgZXF1YWxzIHRoZSBjb25zdHJ1Y3QgY1xuICAgICAgICAgIC8vIHdoaWNoIGhhcyBubyBzY29wZSAoaS5lLiBoYXMgbm8gcGFyZW50IGNvbnN0cnVjdCkgYW5kIGMgaXMgYW4gQXBwXG4gICAgICAgICAgLy8gYW5kIG91ciBjb25zdHJ1Y3QgaXMgYSBCYWNrZW5kXG4gICAgICAgICAgaGludCA9IGAuIFlvdSBzZWVtIHRvIGhhdmUgcGFzc2VkIHlvdXIgcm9vdCBBcHAgYXMgc2NvcGUgdG8gYSBjb25zdHJ1Y3QuIFBhc3MgYSBzdGFjayAoaW5oZXJpdGluZyBmcm9tIFRlcnJhZm9ybVN0YWNrKSBhcyBzY29wZSB0byB5b3VyIGNvbnN0cnVjdCBpbnN0ZWFkLmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBub1N0YWNrRm9yQ29uc3RydWN0KGNvbnN0cnVjdC5ub2RlLnBhdGgsIGhpbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2xvb2t1cChub2RlLnNjb3BlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRBbGw8VCBleHRlbmRzIElDb25zdHJ1Y3Q+KFxuICAgIHByZWRpY2F0ZTogKG5vZGU6IHVua25vd24pID0+IG5vZGUgaXMgVCxcbiAgKTogVFtdIHtcbiAgICBjb25zdCBpdGVtczogVFtdID0gW107XG5cbiAgICBjb25zdCB2aXNpdCA9IGFzeW5jIChub2RlOiBJQ29uc3RydWN0KSA9PiB7XG4gICAgICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2gobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5ub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHZpc2l0KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmlzaXQodGhpcyk7XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgcHJlcGFyZVN0YWNrKCkge1xuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgYmFja2VuZCBjb25maWd1cmVkXG4gICAgdGhpcy5lbnN1cmVCYWNrZW5kRXhpc3RzKCk7XG4gICAgdGhpcy5fcnVuUHJlcGFyaW5nUmVzb2x2ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvbHZlLWRpc2NvdmVyeSBoYWxmIG9mIGBwcmVwYXJlU3RhY2soKWAsIHNwbGl0IG91dCBzbyBlbnRyeVxuICAgKiBwb2ludHMgdGhhdCBtdXN0IE5PVCBpbmplY3QgYSBiYWNrZW5kIChgVGVzdGluZy5zeW50aGAvYHN5bnRoSGNsYCAtXG4gICAqIGRvaW5nIHNvIHdvdWxkIGFkZCBhbiBpbXBsaWNpdCBsb2NhbCBiYWNrZW5kIHRvIHNuYXBzaG90cyB0aGF0IG5ldmVyXG4gICAqIGFza2VkIGZvciBvbmUpIGNhbiBzdGlsbCBydW4gdGhlIHBhcnQgdGhhdCBkaXNjb3ZlcnMgY3VycmVudC1wYXNzXG4gICAqIHByb3ZpZGVyLWZlYXR1cmUgYW5kIFRlcnJhZm9ybS1mdW5jdGlvbiB1c2FnZS5cbiAgICpcbiAgICogQ2xlYXJzIHRoaXMgc3RhY2sncyBvd24gYF91c2VkRnVuY3Rpb25zYC9gX3VzZWRQcm92aWRlckZ1bmN0aW9uc2Agc2V0c1xuICAgKiBmaXJzdCAtIHRoaXMgc3RhY2sncyBwZXItcGFzcyBlcG9jaCBmb3IgVGVycmFmb3JtLWZ1bmN0aW9uIHVzYWdlLlxuICAgKiBCZWNhdXNlIHRoZSByZXNldCBsaXZlcyBoZXJlLCBvbmNlIHBlciBzdGFjaywgZXZlcnkgdmFsaWRhdGlvbi1lbmFibGVkXG4gICAqIGVudHJ5IHBvaW50IChgQXBwLnN5bnRoYCwgYFRlc3Rpbmcuc3ludGhgL2BzeW50aEhjbGAsXG4gICAqIGBTdGFja1N5bnRoZXNpemVyLnN5bnRoZXNpemVgKSBnZXRzIGl0IGZvciBmcmVlIGp1c3QgYnkgY2FsbGluZ1xuICAgKiBgcHJlcGFyZVN0YWNrKClgL2BfcnVuUHJlcGFyaW5nUmVzb2x2ZSgpYCAtIHNlZSBgX3VzZWRGdW5jdGlvbnNgIGZvciB3aHlcbiAgICogdXNhZ2UgaXMga2V5ZWQgYnkgc3RhY2suXG4gICAqXG4gICAqIFRoZW4gZGVhY3RpdmF0ZXMgZXZlcnkgZWxlbWVudCdzIHN0YWxlIGByZXNvbHZlLWRpc2NvdmVyZWRgXG4gICAqIHByb3ZpZGVyLWZlYXR1cmUgcmVnaXN0cmF0aW9ucyAoc2VlXG4gICAqIGBUZXJyYWZvcm1FbGVtZW50Ll9yZXNldFJlc29sdmVEaXNjb3ZlcmVkUHJvdmlkZXJGZWF0dXJlVXNhZ2VgKSAtIHNvXG4gICAqIHVzYWdlIGZyb20gYW4gZWFybGllciBzeW50aGVzaXMgcGFzcyBvdmVyIHRoaXMgc2FtZSBzdGFjayBjYW4ndCBzdXJ2aXZlXG4gICAqIGludG8gdGhpcyBvbmUgLSB0aGVuIHJlc29sdmVzIGV2ZXJ5IGVsZW1lbnQncyBgdG9UZXJyYWZvcm0oKWAsIHdoaWNoIGlzXG4gICAqIHdoYXQgcmUtZGlzY292ZXJzIHRoaXMgcGFzcydzIGFjdHVhbCB1c2FnZSAoYm90aCBwcm92aWRlci1mZWF0dXJlIHVzYWdlXG4gICAqIHZpYSBgbWFya1dyaXRlT25seUF0dHJpYnV0ZWAsIGFuZCBUZXJyYWZvcm0tZnVuY3Rpb24gdXNhZ2UgdmlhXG4gICAqIGBGdW5jdGlvbkNhbGwucmVzb2x2ZSgpYCwgd2hpY2ggcmVjb3JkcyBpbnRvIGBfcmVjb3JkRnVuY3Rpb25Vc2FnZWAvXG4gICAqIGBfcmVjb3JkUHJvdmlkZXJGdW5jdGlvblVzYWdlYCBhYm92ZSkuIEEgcHJlcGFyaW5nIHJlc29sdmUgcnVuIG1pZ2h0XG4gICAqIGFsc28gYWRkIG5ldyByZXNvdXJjZXMgdG8gdGhlIHN0YWNrLCBlLmcuIGZvciBjcm9zcyBzdGFjayByZWZlcmVuY2VzLlxuICAgKiBDcm9zcy1zdGFjayByZWZlcmVuY2VzIHN0YXkgc291bmQgZXZlbiB0aG91Z2ggdGhpcyBtZXRob2Qgc2tpcHMgVEhJU1xuICAgKiBzdGFjaydzIGBlbnN1cmVCYWNrZW5kRXhpc3RzKClgOiByZXNvbHZpbmcgb25lIG1hdGVyaWFsaXplcyB0aGUgT1JJR0lOXG4gICAqIHN0YWNrJ3MgYmFja2VuZCBvbiBkZW1hbmQgKGByZWdpc3RlckluY29taW5nQ3Jvc3NTdGFja1JlZmVyZW5jZWAgY2FsbHNcbiAgICogYGZyb21TdGFjay5lbnN1cmVCYWNrZW5kRXhpc3RzKClgIGl0c2VsZiksIHNvIG9ubHkgdGhlIHN5bnRoZXNpemluZ1xuICAgKiBzdGFjaydzIG93biBiYWNrZW5kIGJsb2NrIGlzIGxlZnQgdW5pbmplY3RlZCAtIHdoaWNoIGlzIGV4YWN0bHkgd2hhdFxuICAgKiB0aGUgYFRlc3Rpbmcuc3ludGhgL2BzeW50aEhjbGAgY2FsbGVycyB3YW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfcnVuUHJlcGFyaW5nUmVzb2x2ZSgpIHtcbiAgICB0aGlzLl91c2VkRnVuY3Rpb25zLmNsZWFyKCk7XG4gICAgdGhpcy5fdXNlZFByb3ZpZGVyRnVuY3Rpb25zLmNsZWFyKCk7XG4gICAgdGVycmFmb3JtRWxlbWVudHModGhpcykuZm9yRWFjaCgoZSkgPT5cbiAgICAgIGUuX3Jlc2V0UmVzb2x2ZURpc2NvdmVyZWRQcm92aWRlckZlYXR1cmVVc2FnZSgpLFxuICAgICk7XG4gICAgdGVycmFmb3JtRWxlbWVudHModGhpcykuZm9yRWFjaCgoZSkgPT5cbiAgICAgIHJlc29sdmUodGhpcywgZS50b1RlcnJhZm9ybSgpLCB0cnVlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZE92ZXJyaWRlKHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgbGV0IGN1cnI6IGFueSA9IHRoaXMucmF3T3ZlcnJpZGVzO1xuXG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGtleSA9IHBhcnRzLnNoaWZ0KCkhO1xuXG4gICAgICAvLyBpZiB3ZSBjYW4ndCByZWN1cnNlIGZ1cnRoZXIgb3IgdGhlIHByZXZpb3VzIHZhbHVlIGlzIG5vdCBhblxuICAgICAgLy8gb2JqZWN0IG92ZXJ3cml0ZSBpdCB3aXRoIGFuIG9iamVjdC5cbiAgICAgIGNvbnN0IGlzT2JqZWN0ID1cbiAgICAgICAgY3VycltrZXldICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIGN1cnJba2V5XSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShjdXJyW2tleV0pO1xuICAgICAgaWYgKCFpc09iamVjdCkge1xuICAgICAgICBjdXJyW2tleV0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgY3VyciA9IGN1cnJba2V5XTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0S2V5ID0gcGFydHMuc2hpZnQoKSE7XG4gICAgY3VycltsYXN0S2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldExvZ2ljYWxJZCh0ZkVsZW1lbnQ6IFRlcnJhZm9ybUVsZW1lbnQgfCBOb2RlKTogc3RyaW5nIHtcbiAgICAvLyB3cmFwIHRoZSBhbGxvY2F0aW9uIGZvciBmdXR1cmUgcmVuYW1pbmcgc3VwcG9ydFxuICAgIHJldHVybiB0aGlzLmFsbG9jYXRlTG9naWNhbElkKHRmRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtaW5nIHNjaGVtZSB1c2VkIHRvIGFsbG9jYXRlIGxvZ2ljYWwgSURzLiBCeSBkZWZhdWx0LCB1c2VzXG4gICAqIHRoZSBgSGFzaGVkQWRkcmVzc2luZ1NjaGVtZWAgYnV0IHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIHRvIGN1c3RvbWl6ZVxuICAgKiB0aGlzIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAcGFyYW0gdGZFbGVtZW50IFRoZSBlbGVtZW50IGZvciB3aGljaCB0aGUgbG9naWNhbCBJRCBpcyBhbGxvY2F0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWxsb2NhdGVMb2dpY2FsSWQodGZFbGVtZW50OiBUZXJyYWZvcm1FbGVtZW50IHwgTm9kZSk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9kZSA9IFRlcnJhZm9ybUVsZW1lbnQuaXNUZXJyYWZvcm1FbGVtZW50KHRmRWxlbWVudClcbiAgICAgID8gdGZFbGVtZW50Lm5vZGVcbiAgICAgIDogdGZFbGVtZW50O1xuICAgIGNvbnN0IHN0YWNrID0gVGVycmFmb3JtRWxlbWVudC5pc1RlcnJhZm9ybUVsZW1lbnQodGZFbGVtZW50KVxuICAgICAgPyB0ZkVsZW1lbnQuY2RrdGZTdGFja1xuICAgICAgOiB0aGlzO1xuXG4gICAgY29uc3Qgc3RhY2tJbmRleCA9IG5vZGUuc2NvcGVzLmluZGV4T2Yoc3RhY2spO1xuXG4gICAgY29uc3QgY29tcG9uZW50cyA9IG5vZGUuc2NvcGVzLnNsaWNlKHN0YWNrSW5kZXggKyAxKS5tYXAoKGMpID0+IGMubm9kZS5pZCk7XG4gICAgcmV0dXJuIGNvbXBvbmVudHMubGVuZ3RoID4gMCA/IG1ha2VVbmlxdWVJZChjb21wb25lbnRzKSA6IFwiXCI7XG4gIH1cblxuICBwdWJsaWMgYWxsUHJvdmlkZXJzKCk6IFRlcnJhZm9ybVByb3ZpZGVyW10ge1xuICAgIHJldHVybiB0aGlzLmZpbmRBbGwoVGVycmFmb3JtUHJvdmlkZXIuaXNUZXJyYWZvcm1Qcm92aWRlcik7XG4gIH1cblxuICBwdWJsaWMgZW5zdXJlQmFja2VuZEV4aXN0cygpOiBUZXJyYWZvcm1CYWNrZW5kIHtcbiAgICBjb25zdCBiYWNrZW5kcyA9IHRoaXMuZmluZEFsbChUZXJyYWZvcm1CYWNrZW5kLmlzQmFja2VuZCk7XG4gICAgcmV0dXJuIGJhY2tlbmRzWzBdIHx8IG5ldyBMb2NhbEJhY2tlbmQodGhpcywge30pO1xuICB9XG5cbiAgcHVibGljIHRvSGNsVGVycmFmb3JtKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBUZXJyYWZvcm1TdGFja01ldGFkYXRhID0ge1xuICAgICAgdmVyc2lvbjogdGhpcy5jZGt0ZlZlcnNpb24sXG4gICAgICBzdGFja05hbWU6IHRoaXMubm9kZS5pZCxcbiAgICAgIGJhY2tlbmQ6IFwibG9jYWxcIiwgLy8gb3ZlcndyaXR0ZW4gYnkgYmFja2VuZCBpbXBsZW1lbnRhdGlvbnMgaWYgdXNlZFxuICAgICAgY2xvdWQ6IHVuZGVmaW5lZCwgLy8gb3ZlcndyaXR0ZW4gYnkgY2xvdWQgYW5kIHJlbW90ZSBiYWNrZW5kIGltcGxlbWVudGF0aW9uc1xuICAgICAgLi4uKE9iamVjdC5rZXlzKHRoaXMucmF3T3ZlcnJpZGVzKS5sZW5ndGggPiAwXG4gICAgICAgID8geyBvdmVycmlkZXM6IHsgc3RhY2s6IE9iamVjdC5rZXlzKHRoaXMucmF3T3ZlcnJpZGVzKSB9IH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcblxuICAgIGNvbnN0IGVsZW1lbnRzID0gdGVycmFmb3JtRWxlbWVudHModGhpcyk7XG5cbiAgICBjb25zdCBtZXRhZGF0YXMgPSBlbGVtZW50cy5tYXAoKGUpID0+IHJlc29sdmUodGhpcywgZS50b01ldGFkYXRhKCkpKTtcbiAgICBmb3IgKGNvbnN0IG1ldGEgb2YgbWV0YWRhdGFzKSB7XG4gICAgICBkZWVwTWVyZ2UobWV0YWRhdGEsIG1ldGEpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHM6IE91dHB1dElkTWFwID0gZWxlbWVudHMucmVkdWNlKChjYXJyeSwgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFUZXJyYWZvcm1PdXRwdXQuaXNUZXJyYWZvcm1PdXRwdXQoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgICAgfVxuXG4gICAgICBkZWVwTWVyZ2UoXG4gICAgICAgIGNhcnJ5LFxuICAgICAgICBpdGVtLm5vZGUucGF0aC5zcGxpdChcIi9cIikucmVkdWNlUmlnaHQoKGlubmVyQ2FycnksIHBhcnQpID0+IHtcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoaW5uZXJDYXJyeSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBbcGFydF06IGl0ZW0uZnJpZW5kbHlVbmlxdWVJZCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBbcGFydF06IGlubmVyQ2FycnkgfTtcbiAgICAgICAgfSwge30pLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IHRmID0ge307XG4gICAgY29uc3QgZnJhZ21lbnRzID0gZWxlbWVudHMubWFwKChlKSA9PiByZXNvbHZlKHRoaXMsIGUudG9IY2xUZXJyYWZvcm0oKSkpO1xuICAgIGNvbnN0IGxvY2FsczogeyBsb2NhbHM/OiBhbnkgfSA9IHt9O1xuXG4gICAgY29uc3QgdGZNZXRhID0ge1xuICAgICAgXCIvL1wiOiB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGhjbEZyYWdtZW50cyA9IGZyYWdtZW50c1xuICAgICAgLm1hcCgoZnJhZykgPT4ge1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgaWYgKGZyYWcucmVzb3VyY2UpIHtcbiAgICAgICAgICBjb25zdCB7IGhjbCwgbWV0YWRhdGEgfSA9IHJlbmRlclJlc291cmNlKGZyYWcucmVzb3VyY2UpO1xuICAgICAgICAgIGRlZXBNZXJnZSh0Zk1ldGEsIG1ldGFkYXRhKTtcbiAgICAgICAgICByZXMgPSBbcmVzLCBoY2xdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhZy5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgeyBoY2wsIG1ldGFkYXRhIH0gPSByZW5kZXJEYXRhc291cmNlKGZyYWcuZGF0YSk7XG4gICAgICAgICAgZGVlcE1lcmdlKHRmTWV0YSwgbWV0YWRhdGEpO1xuICAgICAgICAgIHJlcyA9IFtyZXMsIGhjbF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnLmVwaGVtZXJhbCkge1xuICAgICAgICAgIGNvbnN0IHsgaGNsLCBtZXRhZGF0YSB9ID0gcmVuZGVyRXBoZW1lcmFsKGZyYWcuZXBoZW1lcmFsKTtcbiAgICAgICAgICBkZWVwTWVyZ2UodGZNZXRhLCBtZXRhZGF0YSk7XG4gICAgICAgICAgcmVzID0gW3JlcywgaGNsXS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcucHJvdmlkZXIpIHtcbiAgICAgICAgICBkZWVwTWVyZ2UodGYsIGZyYWcpO1xuICAgICAgICAgIHJlcyA9IFtyZXMsIHJlbmRlclByb3ZpZGVyKGZyYWcucHJvdmlkZXIpXS5qb2luKFwiXFxuXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcudGVycmFmb3JtKSB7XG4gICAgICAgICAgZGVlcE1lcmdlKHRmLCBmcmFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnLm1vZHVsZSkge1xuICAgICAgICAgIGNvbnN0IHsgaGNsLCBtZXRhZGF0YSB9ID0gcmVuZGVyTW9kdWxlKGZyYWcubW9kdWxlKTtcbiAgICAgICAgICBkZWVwTWVyZ2UodGZNZXRhLCBtZXRhZGF0YSk7XG4gICAgICAgICAgcmVzID0gW3JlcywgaGNsXS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcub3V0cHV0KSB7XG4gICAgICAgICAgcmVzID0gW3JlcywgcmVuZGVyT3V0cHV0KGZyYWcub3V0cHV0KV0uam9pbihcIlxcblxcblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFnLm1vdmVkKSB7XG4gICAgICAgICAgcmVzID0gW3JlcywgcmVuZGVyTW92ZWQoZnJhZy5tb3ZlZCldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhZy5pbXBvcnQpIHtcbiAgICAgICAgICByZXMgPSBbcmVzLCByZW5kZXJJbXBvcnQoZnJhZy5pbXBvcnQpXS5qb2luKFwiXFxuXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYWcubG9jYWxzKSB7XG4gICAgICAgICAgZGVlcE1lcmdlKGxvY2FscywgZnJhZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhZy52YXJpYWJsZSkge1xuICAgICAgICAgIHJlcyA9IFtyZXMsIHJlbmRlclZhcmlhYmxlKGZyYWcudmFyaWFibGUpXS5qb2luKFwiXFxuXFxuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChmcmFnKSA9PiBmcmFnICE9PSB1bmRlZmluZWQpO1xuXG4gICAgZGVlcE1lcmdlKHRmLCB0aGlzLnJhd092ZXJyaWRlcyk7XG4gICAgY29uc3QgdGVycmFmb3JtQmxvY2sgPSAodGYgYXMgYW55KT8udGVycmFmb3JtO1xuXG4gICAgbGV0IHRlcnJhZm9ybUJsb2NrSGNsID0gXCJcIjtcbiAgICBpZiAodGVycmFmb3JtQmxvY2spIHtcbiAgICAgIHRlcnJhZm9ybUJsb2NrSGNsID0gcmVuZGVyVGVycmFmb3JtKHRlcnJhZm9ybUJsb2NrKTtcbiAgICAgIGRlZXBNZXJnZSh0Zk1ldGEsIHsgdGVycmFmb3JtOiBjbGVhbkZvck1ldGFkYXRhKHRlcnJhZm9ybUJsb2NrKSB9KTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxzSGNsID0gXCJcIjtcbiAgICBpZiAobG9jYWxzKSB7XG4gICAgICBsb2NhbHNIY2wgPSByZW5kZXJMb2NhbHMobG9jYWxzLmxvY2Fscyk7XG5cbiAgICAgIGlmIChsb2NhbHNIY2wpIHtcbiAgICAgICAgLy8gSGFja3kgd2F5IHRvIGFkZCBhIG5ld2xpbmUgYmV0d2VlbiB0aGUgdGVycmFmb3JtIGJsb2NrIGFuZCB0aGUgbG9jYWxzIGJsb2NrXG4gICAgICAgIGxvY2Fsc0hjbCA9IFwiXFxuXFxuXCIgKyBsb2NhbHNIY2w7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhjbDogcmVzb2x2ZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgW3RlcnJhZm9ybUJsb2NrSGNsLCBsb2NhbHNIY2wsIC4uLmhjbEZyYWdtZW50c10uam9pbihcIlwiKSxcbiAgICAgICksXG4gICAgICBtZXRhZGF0YTogcmVzb2x2ZSh0aGlzLCB0Zk1ldGEpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdG9UZXJyYWZvcm0oKTogYW55IHtcbiAgICBjb25zdCB0ZiA9IHt9O1xuXG4gICAgY29uc3QgbWV0YWRhdGE6IFRlcnJhZm9ybVN0YWNrTWV0YWRhdGEgPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLmNka3RmVmVyc2lvbixcbiAgICAgIHN0YWNrTmFtZTogdGhpcy5ub2RlLmlkLFxuICAgICAgYmFja2VuZDogXCJsb2NhbFwiLCAvLyBvdmVyd3JpdHRlbiBieSBiYWNrZW5kIGltcGxlbWVudGF0aW9ucyBpZiB1c2VkXG4gICAgICBjbG91ZDogdW5kZWZpbmVkLCAvLyBvdmVyd3JpdHRlbiBieSBjbG91ZCBhbmQgcmVtb3RlIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zXG4gICAgICAuLi4oT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IG92ZXJyaWRlczogeyBzdGFjazogT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpIH0gfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1FbGVtZW50cyh0aGlzKTtcblxuICAgIGNvbnN0IG1ldGFkYXRhcyA9IGVsZW1lbnRzLm1hcCgoZSkgPT4gcmVzb2x2ZSh0aGlzLCBlLnRvTWV0YWRhdGEoKSkpO1xuICAgIGZvciAoY29uc3QgbWV0YSBvZiBtZXRhZGF0YXMpIHtcbiAgICAgIGRlZXBNZXJnZShtZXRhZGF0YSwgbWV0YSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0czogT3V0cHV0SWRNYXAgPSBlbGVtZW50cy5yZWR1Y2UoKGNhcnJ5LCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIVRlcnJhZm9ybU91dHB1dC5pc1RlcnJhZm9ybU91dHB1dChpdGVtKSkge1xuICAgICAgICByZXR1cm4gY2Fycnk7XG4gICAgICB9XG5cbiAgICAgIGRlZXBNZXJnZShcbiAgICAgICAgY2FycnksXG4gICAgICAgIGl0ZW0ubm9kZS5wYXRoLnNwbGl0KFwiL1wiKS5yZWR1Y2VSaWdodCgoaW5uZXJDYXJyeSwgcGFydCkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhpbm5lckNhcnJ5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IFtwYXJ0XTogaXRlbS5mcmllbmRseVVuaXF1ZUlkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IFtwYXJ0XTogaW5uZXJDYXJyeSB9O1xuICAgICAgICB9LCB7fSksXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY2Fycnk7XG4gICAgfSwge30pO1xuXG4gICAgKHRmIGFzIGFueSlbXCIvL1wiXSA9IHsgbWV0YWRhdGEsIG91dHB1dHMgfTtcblxuICAgIGNvbnN0IGZyYWdtZW50cyA9IGVsZW1lbnRzLm1hcCgoZSkgPT4gcmVzb2x2ZSh0aGlzLCBlLnRvVGVycmFmb3JtKCkpKTtcbiAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuICAgICAgZGVlcE1lcmdlKHRmLCBmcmFnbWVudCk7XG4gICAgfVxuXG4gICAgZGVlcE1lcmdlKHRmLCB0aGlzLnJhd092ZXJyaWRlcyk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLCB0Zik7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPdXRnb2luZ0Nyb3NzU3RhY2tSZWZlcmVuY2UoaWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY3Jvc3NTdGFja091dHB1dHNbaWRlbnRpZmllcl0pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyb3NzU3RhY2tPdXRwdXRzW2lkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBUZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgYGNyb3NzLXN0YWNrLW91dHB1dC0ke2lkZW50aWZpZXJ9YCxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHJlZihpZGVudGlmaWVyLCB0aGlzKSxcbiAgICAgICAgc2Vuc2l0aXZlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5jcm9zc1N0YWNrT3V0cHV0c1tpZGVudGlmaWVyXSA9IG91dHB1dDtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVySW5jb21pbmdDcm9zc1N0YWNrUmVmZXJlbmNlKGZyb21TdGFjazogVGVycmFmb3JtU3RhY2spIHtcbiAgICBpZiAodGhpcy5jcm9zc1N0YWNrRGF0YVNvdXJjZXNbU3RyaW5nKGZyb21TdGFjayldKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcm9zc1N0YWNrRGF0YVNvdXJjZXNbU3RyaW5nKGZyb21TdGFjayldO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5CYWNrZW5kID0gZnJvbVN0YWNrLmVuc3VyZUJhY2tlbmRFeGlzdHMoKTtcbiAgICBjb25zdCBvcmlnaW5QYXRoID0gZnJvbVN0YWNrLm5vZGUucGF0aDtcblxuICAgIGNvbnN0IHJlbW90ZVN0YXRlID0gb3JpZ2luQmFja2VuZC5nZXRSZW1vdGVTdGF0ZURhdGFTb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgYGNyb3NzLXN0YWNrLXJlZmVyZW5jZS1pbnB1dC0ke29yaWdpblBhdGh9YCxcbiAgICAgIG9yaWdpblBhdGgsXG4gICAgKTtcblxuICAgIHRoaXMuY3Jvc3NTdGFja0RhdGFTb3VyY2VzW29yaWdpblBhdGhdID0gcmVtb3RlU3RhdGU7XG4gICAgcmV0dXJuIHJlbW90ZVN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaGVyZSBmb3IgbG9vcHMgaW4gdGhlIGRlcGVuZGVuY3kgZ3JhcGhcbiAgcHVibGljIGRlcGVuZHNPbihzdGFjazogVGVycmFmb3JtU3RhY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMuaW5jbHVkZXMoc3RhY2spIHx8XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5zb21lKChkKSA9PiBkLmRlcGVuZHNPbihzdGFjaykpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KGRlcGVuZGVuY3k6IFRlcnJhZm9ybVN0YWNrKSB7XG4gICAgaWYgKGRlcGVuZGVuY3kuZGVwZW5kc09uKHRoaXMpKSB7XG4gICAgICB0aHJvdyBzdGFja0hhc0NpcmN1bGFyRGVwZW5kZW5jeSh0aGlzLCBkZXBlbmRlbmN5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXBlbmRlbmNpZXMuaW5jbHVkZXMoZGVwZW5kZW5jeSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKGRlcGVuZGVuY3kpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhbGwgdmFsaWRhdGlvbnMgb24gdGhlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIHJ1bkFsbFZhbGlkYXRpb25zKCkge1xuICAgIGNvbnN0IGVycm9yczogeyBtZXNzYWdlOiBzdHJpbmc7IHNvdXJjZTogSUNvbnN0cnVjdCB9W10gPSB0aGlzLm5vZGVcbiAgICAgIC5maW5kQWxsKClcbiAgICAgIC5tYXAoKG5vZGUpID0+XG4gICAgICAgIG5vZGUubm9kZS52YWxpZGF0ZSgpLm1hcCgoZXJyb3IpID0+ICh7IG1lc3NhZ2U6IGVycm9yLCBzb3VyY2U6IG5vZGUgfSkpLFxuICAgICAgKVxuICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gWy4uLnByZXYsIC4uLmN1cnJdLCBbXSk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlcnJvckxpc3QgPSBlcnJvcnNcbiAgICAgICAgLm1hcCgoZSkgPT4gYFske2Uuc291cmNlLm5vZGUucGF0aH1dICR7ZS5tZXNzYWdlfWApXG4gICAgICAgIC5qb2luKFwiXFxuICBcIik7XG4gICAgICB0aHJvdyBzdGFja1ZhbGlkYXRpb25GYWlsdXJlKGVycm9yTGlzdCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhc1Jlc291cmNlTW92ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGVycmFmb3JtRWxlbWVudHModGhpcykuc29tZSgoZSkgPT4ge1xuICAgICAgaWYgKFRlcnJhZm9ybVJlc291cmNlLmlzVGVycmFmb3JtUmVzb3VyY2UoZSkgJiYgZS5oYXNSZXNvdXJjZU1vdmUoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3RzIHRoZSBUZXJyYWZvcm1FbGVtZW50cyBpbiBhIGNvbnN0cnVjdCBzdWJ0cmVlLCBub3QgZGVzY2VuZGluZyBpbnRvIG5lc3RlZCBzdGFja3NcbiAqIEBwYXJhbSBub2RlIFJvb3Qgb2YgdGhlIHN1YnRyZWUgdG8gc2VhcmNoXG4gKiBAcGFyYW0gaW50byBBcnJheSB0aGUgZm91bmQgZWxlbWVudHMgYXJlIGFwcGVuZGVkIHRvXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgY29sbGVjdGVkIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIHRlcnJhZm9ybUVsZW1lbnRzKFxuICBub2RlOiBJQ29uc3RydWN0LFxuICBpbnRvOiBUZXJyYWZvcm1FbGVtZW50W10gPSBbXSxcbik6IFRlcnJhZm9ybUVsZW1lbnRbXSB7XG4gIGlmIChUZXJyYWZvcm1FbGVtZW50LmlzVGVycmFmb3JtRWxlbWVudChub2RlKSkge1xuICAgIGludG8ucHVzaChub2RlKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5ub2RlLmNoaWxkcmVuKSB7XG4gICAgLy8gRG9uJ3QgcmVjdXJzZSBpbnRvIGEgc3Vic3RhY2tcbiAgICBpZiAoVGVycmFmb3JtU3RhY2suaXNTdGFjayhjaGlsZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRlcnJhZm9ybUVsZW1lbnRzKGNoaWxkLCBpbnRvKTtcbiAgfVxuXG4gIHJldHVybiBpbnRvO1xufVxuIl19
|
|
@@ -3,6 +3,9 @@ import { TerraformElement } from "./terraform-element";
|
|
|
3
3
|
import { IResolvable } from "./tokens/resolvable";
|
|
4
4
|
import { ITerraformAddressable } from "./terraform-addressable";
|
|
5
5
|
import { TerraformVariableValidationConfig } from "./terraform-conditions";
|
|
6
|
+
/**
|
|
7
|
+
* Type constraint keywords and constructors for the `type` argument of a TerraformVariable.
|
|
8
|
+
*/
|
|
6
9
|
export declare abstract class VariableType {
|
|
7
10
|
static readonly STRING = "string";
|
|
8
11
|
static readonly NUMBER = "number";
|
|
@@ -62,6 +65,10 @@ export interface TerraformVariableConfig {
|
|
|
62
65
|
*/
|
|
63
66
|
readonly validation?: TerraformVariableValidationConfig[];
|
|
64
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* A Terraform input variable (`variable` block): a parameter whose value is supplied when the stack is planned or
|
|
70
|
+
* applied, letting the configuration be customised without changing its code.
|
|
71
|
+
*/
|
|
65
72
|
export declare class TerraformVariable extends TerraformElement implements ITerraformAddressable {
|
|
66
73
|
readonly default?: any;
|
|
67
74
|
readonly description?: string;
|
|
@@ -6,9 +6,11 @@ const terraform_element_1 = require("./terraform-element");
|
|
|
6
6
|
const util_1 = require("./util");
|
|
7
7
|
const tokens_1 = require("./tokens");
|
|
8
8
|
const tfExpression_1 = require("./tfExpression");
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Type constraint keywords and constructors for the `type` argument of a TerraformVariable.
|
|
11
|
+
*/
|
|
10
12
|
class VariableType {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.VariableType", version: "0.26.0-pre.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.VariableType", version: "0.26.0-pre.21" };
|
|
12
14
|
static STRING = "string";
|
|
13
15
|
static NUMBER = "number";
|
|
14
16
|
static BOOL = "bool";
|
|
@@ -35,7 +37,11 @@ class VariableType {
|
|
|
35
37
|
return `set(${type})`;
|
|
36
38
|
}
|
|
37
39
|
static tuple(...elements) {
|
|
38
|
-
|
|
40
|
+
// Keep the pre-bracketed workaround for the old rendering working.
|
|
41
|
+
if (elements.length === 1 && /^\[[\s\S]*\]$/.test(elements[0].trim())) {
|
|
42
|
+
return `tuple(${elements[0].trim()})`;
|
|
43
|
+
}
|
|
44
|
+
return `tuple([${elements.join(", ")}])`;
|
|
39
45
|
}
|
|
40
46
|
static object(attributes) {
|
|
41
47
|
return `object({${Object.keys(attributes)
|
|
@@ -44,9 +50,12 @@ class VariableType {
|
|
|
44
50
|
}
|
|
45
51
|
}
|
|
46
52
|
exports.VariableType = VariableType;
|
|
47
|
-
|
|
53
|
+
/**
|
|
54
|
+
* A Terraform input variable (`variable` block): a parameter whose value is supplied when the stack is planned or
|
|
55
|
+
* applied, letting the configuration be customised without changing its code.
|
|
56
|
+
*/
|
|
48
57
|
class TerraformVariable extends terraform_element_1.TerraformElement {
|
|
49
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformVariable", version: "0.26.0-pre.
|
|
58
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformVariable", version: "0.26.0-pre.21" };
|
|
50
59
|
default;
|
|
51
60
|
description;
|
|
52
61
|
type;
|
|
@@ -124,7 +133,7 @@ class TerraformVariable extends terraform_element_1.TerraformElement {
|
|
|
124
133
|
storageClassType: "objectList",
|
|
125
134
|
},
|
|
126
135
|
};
|
|
127
|
-
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) =>
|
|
136
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value?.value !== undefined));
|
|
128
137
|
}
|
|
129
138
|
synthesizeAttributes() {
|
|
130
139
|
return {
|
|
@@ -161,4 +170,4 @@ class TerraformVariable extends terraform_element_1.TerraformElement {
|
|
|
161
170
|
}
|
|
162
171
|
}
|
|
163
172
|
exports.TerraformVariable = TerraformVariable;
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXZhcmlhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS12YXJpYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBR0EsMkRBQXVEO0FBQ3ZELGlDQUFvRDtBQUNwRCxxQ0FBaUM7QUFDakMsaURBQXFDO0FBS3JDLCtDQUErQztBQUMvQyxNQUFzQixZQUFZOztJQUN6QixNQUFNLENBQVUsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxNQUFNLENBQVUsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxNQUFNLENBQVUsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUM5QixNQUFNLENBQVUsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUU1QixNQUFNLENBQVUsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUM5QixNQUFNLENBQVUsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUM1QixNQUFNLENBQVUsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUU1QixNQUFNLENBQVUsV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUM3QyxNQUFNLENBQVUsV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUM3QyxNQUFNLENBQVUsU0FBUyxHQUFHLFlBQVksQ0FBQztJQUV6QyxNQUFNLENBQVUsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUMzQyxNQUFNLENBQVUsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUMzQyxNQUFNLENBQVUsUUFBUSxHQUFHLFdBQVcsQ0FBQztJQUV2QyxNQUFNLENBQVUsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUMzQyxNQUFNLENBQVUsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUMzQyxNQUFNLENBQVUsUUFBUSxHQUFHLFdBQVcsQ0FBQztJQUV2QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQVk7UUFDN0IsT0FBTyxRQUFRLElBQUksR0FBRyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQVk7UUFDNUIsT0FB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LFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxhQUFhLEVBQUUsVUFBVSxDQUFDLFlBQVk7Z0JBQ3RDLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUzthQUNoQyxDQUFDLENBQUM7U0FDSixDQUFDO0lBQ0osQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTztZQUNMLFFBQVEsRUFBRTtnQkFDUixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUEsZ0JBQVMsRUFDaEMsSUFBQSxzQkFBZSxFQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEVBQy9DLElBQUksQ0FBQyxZQUFZLENBQ2xCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTztZQUNMLFFBQVEsRUFBRTtnQkFDUixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUEsZ0JBQVMsRUFDaEMsSUFBQSxzQkFBZSxFQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQzVDLElBQUksQ0FBQyxZQUFZLENBQ2xCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDOztBQTdJSCw4Q0E4SUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUVsZW1lbnQgfSBmcm9tIFwiLi90ZXJyYWZvcm0tZWxlbWVudFwiO1xuaW1wb3J0IHsga2V5c1RvU25ha2VDYXNlLCBkZWVwTWVyZ2UgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCIuL3Rva2Vuc1wiO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSBcIi4vdGZFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJUmVzb2x2YWJsZSB9IGZyb20gXCIuL3Rva2Vucy9yZXNvbHZhYmxlXCI7XG5pbXBvcnQgeyBJVGVycmFmb3JtQWRkcmVzc2FibGUgfSBmcm9tIFwiLi90ZXJyYWZvcm0tYWRkcmVzc2FibGVcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVZhcmlhYmxlVmFsaWRhdGlvbkNvbmZpZyB9IGZyb20gXCIuL3RlcnJhZm9ybS1jb25kaXRpb25zXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFyaWFibGVUeXBlIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVFJJTkcgPSBcInN0cmluZ1wiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5VTUJFUiA9IFwibnVtYmVyXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQk9PTCA9IFwiYm9vbFwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFOWSA9IFwiYW55XCI7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSVNUID0gXCJsaXN0XCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFQID0gXCJtYXBcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVQgPSBcInNldFwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElTVF9TVFJJTkcgPSBcImxpc3Qoc3RyaW5nKVwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJU1RfTlVNQkVSID0gXCJsaXN0KG51bWJlcilcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSVNUX0JPT0wgPSBcImxpc3QoYm9vbClcIjtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BUF9TVFJJTkcgPSBcIm1hcChzdHJpbmcpXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFQX05VTUJFUiA9IFwibWFwKG51bWJlcilcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVBfQk9PTCA9IFwibWFwKGJvb2wpXCI7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVRfU1RSSU5HID0gXCJzZXQoc3RyaW5nKVwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFVF9OVU1CRVIgPSBcInNldChudW1iZXIpXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VUX0JPT0wgPSBcInNldChib29sKVwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgbGlzdCh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYGxpc3QoJHt0eXBlfSlgO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBtYXAodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBtYXAoJHt0eXBlfSlgO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzZXQodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBzZXQoJHt0eXBlfSlgO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0dXBsZSguLi5lbGVtZW50czogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gYHR1cGxlKCR7ZWxlbWVudHMuam9pbihcIiwgXCIpfSlgO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBvYmplY3QoYXR0cmlidXRlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiBgb2JqZWN0KHske09iamVjdC5rZXlzKGF0dHJpYnV0ZXMpXG4gICAgICAubWFwKChrKSA9PiBrICsgXCI9XCIgKyBhdHRyaWJ1dGVzW2tdKVxuICAgICAgLmpvaW4oXCIsIFwiKX19KWA7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1WYXJpYWJsZUNvbmZpZyB7XG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBhbnk7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBhcmd1bWVudCBpbiBhIHZhcmlhYmxlIGJsb2NrIGFsbG93cyB5b3UgdG8gcmVzdHJpY3QgdGhlIHR5cGUgb2YgdmFsdWUgdGhhdCB3aWxsIGJlIGFjY2VwdGVkIGFzIHRoZSB2YWx1ZSBmb3IgYSB2YXJpYWJsZS4gSWYgbm8gdHlwZSBjb25zdHJhaW50IGlzIHNldCB0aGVuIGEgdmFsdWUgb2YgYW55IHR5cGUgaXMgYWNjZXB0ZWQuXG4gICAqXG4gICAqIFdoaWxlIHR5cGUgY29uc3RyYWludHMgYXJlIG9wdGlvbmFsLCB3ZSByZWNvbW1lbmQgc3BlY2lmeWluZyB0aGVtOyB0aGV5IHNlcnZlIGFzIGVhc3kgcmVtaW5kZXJzIGZvciB1c2VycyBvZiB0aGUgbW9kdWxlLCBhbmQgYWxsb3cgVGVycmFmb3JtIHRvIHJldHVybiBhIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSBpZiB0aGUgd3JvbmcgdHlwZSBpcyB1c2VkLlxuICAgKlxuICAgKiBUeXBlIGNvbnN0cmFpbnRzIGFyZSBjcmVhdGVkIGZyb20gYSBtaXh0dXJlIG9mIHR5cGUga2V5d29yZHMgYW5kIHR5cGUgY29uc3RydWN0b3JzLiBUaGUgc3VwcG9ydGVkIHR5cGUga2V5d29yZHMgYXJlOlxuICAgKlxuICAgKiAtIHN0cmluZ1xuICAgKiAtIG51bWJlclxuICAgKiAtIGJvb2xcbiAgICpcbiAgICogVGhlIHR5cGUgY29uc3RydWN0b3JzIGFsbG93IHlvdSB0byBzcGVjaWZ5IGNvbXBsZXggdHlwZXMgc3VjaCBhcyBjb2xsZWN0aW9uczpcbiAgICpcbiAgICogLSBsaXN0KFxcPFRZUEVcXD4pXG4gICAqIC0gc2V0KFxcPFRZUEVcXD4pXG4gICAqIC0gbWFwKFxcPFRZUEVcXD4pXG4gICAqIC0gb2JqZWN0KHtcXDxBVFRSIE5BTUVcXD4gPSBcXDxUWVBFXFw+LCAuLi4gfSlcbiAgICogLSB0dXBsZShbXFw8VFlQRVxcPiwgLi4uXSlcbiAgICpcbiAgICogVGhlIGtleXdvcmQgYW55IG1heSBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgYW55IHR5cGUgaXMgYWNjZXB0YWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG1lYW5pbmcgYW5kIGJlaGF2aW9yIG9mIHRoZXNlIGRpZmZlcmVudCB0eXBlcywgYXMgd2VsbCBhcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiBjb21wbGV4IHR5cGVzLCByZWZlciB0byB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZXhwcmVzc2lvbnMvdHlwZS1jb25zdHJhaW50cyBUeXBlIENvbnN0cmFpbnRzfS5cbiAgICpcbiAgICogSWYgYm90aCB0aGUgdHlwZSBhbmQgZGVmYXVsdCBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCwgdGhlIGdpdmVuIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSBjb252ZXJ0aWJsZSB0byB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IHNlbnNpdGl2ZT86IGJvb2xlYW47XG5cbiAgLypcbiAgICogVGhlIG51bGxhYmxlIGFyZ3VtZW50IGluIGEgdmFyaWFibGUgYmxvY2sgY29udHJvbHMgd2hldGhlciB0aGUgbW9kdWxlIGNhbGxlciBtYXkgYXNzaWduIHRoZSB2YWx1ZSBudWxsIHRvIHRoZSB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IG51bGxhYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeSBhcmJpdHJhcnkgY3VzdG9tIHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgcGFydGljdWxhciB2YXJpYWJsZSB1c2luZyBhIHZhbGlkYXRpb24gYmxvY2sgbmVzdGVkIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZSBibG9ja1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbj86IFRlcnJhZm9ybVZhcmlhYmxlVmFsaWRhdGlvbkNvbmZpZ1tdO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybVZhcmlhYmxlXG4gIGV4dGVuZHMgVGVycmFmb3JtRWxlbWVudFxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdD86IGFueTtcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNlbnNpdGl2ZT86IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG4gIHByaXZhdGUgX3ZhbGlkYXRpb24/OiBUZXJyYWZvcm1WYXJpYWJsZVZhbGlkYXRpb25Db25maWdbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IFRlcnJhZm9ybVZhcmlhYmxlQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBcInZhclwiKTtcblxuICAgIHRoaXMuZGVmYXVsdCA9IGNvbmZpZy5kZWZhdWx0O1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBjb25maWcuZGVzY3JpcHRpb247XG4gICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gICAgdGhpcy5zZW5zaXRpdmUgPSBjb25maWcuc2Vuc2l0aXZlO1xuICAgIHRoaXMubnVsbGFibGUgPSBjb25maWcubnVsbGFibGU7XG4gICAgdGhpcy5fdmFsaWRhdGlvbiA9IGNvbmZpZy52YWxpZGF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJpbmdWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzLmludGVycG9sYXRpb24oKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG51bWJlclZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKHRoaXMuaW50ZXJwb2xhdGlvbigpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGlzdFZhbHVlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gVG9rZW4uYXNMaXN0KHRoaXMuaW50ZXJwb2xhdGlvbigpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYm9vbGVhblZhbHVlKCk6IElSZXNvbHZhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIFRva2VuLmFzQW55KHRoaXMuaW50ZXJwb2xhdGlvbigpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGlvbigpOiBUZXJyYWZvcm1WYXJpYWJsZVZhbGlkYXRpb25Db25maWdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb247XG4gIH1cblxuICBwdWJsaWMgYWRkVmFsaWRhdGlvbih2YWxpZGF0aW9uOiBUZXJyYWZvcm1WYXJpYWJsZVZhbGlkYXRpb25Db25maWcpIHtcbiAgICBpZiAoIXRoaXMuX3ZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb24gPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl92YWxpZGF0aW9uLnB1c2godmFsaWRhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGludGVycG9sYXRpb24oKTogSVJlc29sdmFibGUge1xuICAgIHJldHVybiByZWYoYHZhci4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLCB0aGlzLmNka3RmU3RhY2spO1xuICB9XG5cbiAgcHVibGljIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB2YWx1ZTogdGhpcy5kZWZhdWx0LFxuICAgICAgICB0eXBlOiBcImFueVwiLFxuICAgICAgfSxcblxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgdHlwZToge1xuICAgICAgICB2YWx1ZTogdGhpcy50eXBlLFxuICAgICAgICB0eXBlOiBcInR5cGVcIixcbiAgICAgIH0sXG4gICAgICBzZW5zaXRpdmU6IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc2Vuc2l0aXZlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBudWxsYWJsZToge1xuICAgICAgICB2YWx1ZTogdGhpcy5udWxsYWJsZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgdmFsaWRhdGlvbjoge1xuICAgICAgICB2YWx1ZTogdGhpcy52YWxpZGF0aW9uPy5tYXAoKHZhbGlkYXRpb24pID0+ICh7XG4gICAgICAgICAgZXJyb3JfbWVzc2FnZTogdmFsaWRhdGlvbi5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgY29uZGl0aW9uOiB2YWxpZGF0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgfSkpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJvYmplY3RMaXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gISF2YWx1ZT8udmFsdWUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlZmF1bHQ6IHRoaXMuZGVmYXVsdCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgc2Vuc2l0aXZlOiB0aGlzLnNlbnNpdGl2ZSxcbiAgICAgIG51bGxhYmxlOiB0aGlzLm51bGxhYmxlLFxuICAgICAgdmFsaWRhdGlvbjogdGhpcy52YWxpZGF0aW9uPy5tYXAoKHZhbGlkYXRpb24pID0+ICh7XG4gICAgICAgIGVycm9yX21lc3NhZ2U6IHZhbGlkYXRpb24uZXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25kaXRpb246IHZhbGlkYXRpb24uY29uZGl0aW9uLFxuICAgICAgfSkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdG9IY2xUZXJyYWZvcm0oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFyaWFibGU6IHtcbiAgICAgICAgW3RoaXMuZnJpZW5kbHlVbmlxdWVJZF06IGRlZXBNZXJnZShcbiAgICAgICAgICBrZXlzVG9TbmFrZUNhc2UodGhpcy5zeW50aGVzaXplSGNsQXR0cmlidXRlcygpKSxcbiAgICAgICAgICB0aGlzLnJhd092ZXJyaWRlcyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB0b1RlcnJhZm9ybSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB2YXJpYWJsZToge1xuICAgICAgICBbdGhpcy5mcmllbmRseVVuaXF1ZUlkXTogZGVlcE1lcmdlKFxuICAgICAgICAgIGtleXNUb1NuYWtlQ2FzZSh0aGlzLnN5bnRoZXNpemVBdHRyaWJ1dGVzKCkpLFxuICAgICAgICAgIHRoaXMucmF3T3ZlcnJpZGVzLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgc3RyaW5nIHRva2VuIHJlZmVyZW5jaW5nIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlXG4gICAqL1xuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1ZhbHVlO1xuICB9XG59XG4iXX0=
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXZhcmlhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS12YXJpYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBR0EsMkRBQXVEO0FBQ3ZELGlDQUFvRDtBQUNwRCxxQ0FBaUM7QUFDakMsaURBQXFDO0FBS3JDOztHQUVHO0FBQ0gsTUFBc0IsWUFBWTs7SUFDekIsTUFBTSxDQUFVLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDbEMsTUFBTSxDQUFVLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDbEMsTUFBTSxDQUFVLElBQUksR0FBRyxNQUFNLENBQUM7SUFDOUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFFNUIsTUFBTSxDQUFVLElBQUksR0FBRyxNQUFNLENBQUM7SUFDOUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDNUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFFNUIsTUFBTSxDQUFVLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFDN0MsTUFBTSxDQUFVLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFDN0MsTUFBTSxDQUFVLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFFekMsTUFBTSxDQUFVLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDM0MsTUFBTSxDQUFVLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDM0MsTUFBTSxDQUFVLFFBQVEsR0FBRyxXQUFXLENBQUM7SUFFdkMsTUFBTSxDQUFVLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDM0MsTUFBTSxDQUFVLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDM0MsTUFBTSxDQUFVLFFBQVEsR0FBRyxXQUFXLENBQUM7SUFFdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFZO1FBQzdCLE9BQU8sUUFBUSxJQUFJLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFZO1FBQzVCLE9BQU8s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cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUVsZW1lbnQgfSBmcm9tIFwiLi90ZXJyYWZvcm0tZWxlbWVudFwiO1xuaW1wb3J0IHsga2V5c1RvU25ha2VDYXNlLCBkZWVwTWVyZ2UgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCIuL3Rva2Vuc1wiO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSBcIi4vdGZFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJUmVzb2x2YWJsZSB9IGZyb20gXCIuL3Rva2Vucy9yZXNvbHZhYmxlXCI7XG5pbXBvcnQgeyBJVGVycmFmb3JtQWRkcmVzc2FibGUgfSBmcm9tIFwiLi90ZXJyYWZvcm0tYWRkcmVzc2FibGVcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVZhcmlhYmxlVmFsaWRhdGlvbkNvbmZpZyB9IGZyb20gXCIuL3RlcnJhZm9ybS1jb25kaXRpb25zXCI7XG5cbi8qKlxuICogVHlwZSBjb25zdHJhaW50IGtleXdvcmRzIGFuZCBjb25zdHJ1Y3RvcnMgZm9yIHRoZSBgdHlwZWAgYXJndW1lbnQgb2YgYSBUZXJyYWZvcm1WYXJpYWJsZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZhcmlhYmxlVHlwZSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSSU5HID0gXCJzdHJpbmdcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOVU1CRVIgPSBcIm51bWJlclwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJPT0wgPSBcImJvb2xcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTlkgPSBcImFueVwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElTVCA9IFwibGlzdFwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BUCA9IFwibWFwXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VUID0gXCJzZXRcIjtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJU1RfU1RSSU5HID0gXCJsaXN0KHN0cmluZylcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSVNUX05VTUJFUiA9IFwibGlzdChudW1iZXIpXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElTVF9CT09MID0gXCJsaXN0KGJvb2wpXCI7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVBfU1RSSU5HID0gXCJtYXAoc3RyaW5nKVwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BUF9OVU1CRVIgPSBcIm1hcChudW1iZXIpXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFQX0JPT0wgPSBcIm1hcChib29sKVwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VUX1NUUklORyA9IFwic2V0KHN0cmluZylcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVRfTlVNQkVSID0gXCJzZXQobnVtYmVyKVwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFVF9CT09MID0gXCJzZXQoYm9vbClcIjtcblxuICBwdWJsaWMgc3RhdGljIGxpc3QodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBsaXN0KCR7dHlwZX0pYDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbWFwKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBgbWFwKCR7dHlwZX0pYDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2V0KHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBgc2V0KCR7dHlwZX0pYDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHVwbGUoLi4uZWxlbWVudHM6IHN0cmluZ1tdKSB7XG4gICAgLy8gS2VlcCB0aGUgcHJlLWJyYWNrZXRlZCB3b3JrYXJvdW5kIGZvciB0aGUgb2xkIHJlbmRlcmluZyB3b3JraW5nLlxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDEgJiYgL15cXFtbXFxzXFxTXSpcXF0kLy50ZXN0KGVsZW1lbnRzWzBdLnRyaW0oKSkpIHtcbiAgICAgIHJldHVybiBgdHVwbGUoJHtlbGVtZW50c1swXS50cmltKCl9KWA7XG4gICAgfVxuICAgIHJldHVybiBgdHVwbGUoWyR7ZWxlbWVudHMuam9pbihcIiwgXCIpfV0pYDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb2JqZWN0KGF0dHJpYnV0ZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gYG9iamVjdCh7JHtPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKVxuICAgICAgLm1hcCgoaykgPT4gayArIFwiPVwiICsgYXR0cmlidXRlc1trXSlcbiAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtVmFyaWFibGVDb25maWcge1xuICByZWFkb25seSBkZWZhdWx0PzogYW55O1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgYXJndW1lbnQgaW4gYSB2YXJpYWJsZSBibG9jayBhbGxvd3MgeW91IHRvIHJlc3RyaWN0IHRoZSB0eXBlIG9mIHZhbHVlIHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBhcyB0aGUgdmFsdWUgZm9yIGEgdmFyaWFibGUuIElmIG5vIHR5cGUgY29uc3RyYWludCBpcyBzZXQgdGhlbiBhIHZhbHVlIG9mIGFueSB0eXBlIGlzIGFjY2VwdGVkLlxuICAgKlxuICAgKiBXaGlsZSB0eXBlIGNvbnN0cmFpbnRzIGFyZSBvcHRpb25hbCwgd2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlbTsgdGhleSBzZXJ2ZSBhcyBlYXN5IHJlbWluZGVycyBmb3IgdXNlcnMgb2YgdGhlIG1vZHVsZSwgYW5kIGFsbG93IFRlcnJhZm9ybSB0byByZXR1cm4gYSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHdyb25nIHR5cGUgaXMgdXNlZC5cbiAgICpcbiAgICogVHlwZSBjb25zdHJhaW50cyBhcmUgY3JlYXRlZCBmcm9tIGEgbWl4dHVyZSBvZiB0eXBlIGtleXdvcmRzIGFuZCB0eXBlIGNvbnN0cnVjdG9ycy4gVGhlIHN1cHBvcnRlZCB0eXBlIGtleXdvcmRzIGFyZTpcbiAgICpcbiAgICogLSBzdHJpbmdcbiAgICogLSBudW1iZXJcbiAgICogLSBib29sXG4gICAqXG4gICAqIFRoZSB0eXBlIGNvbnN0cnVjdG9ycyBhbGxvdyB5b3UgdG8gc3BlY2lmeSBjb21wbGV4IHR5cGVzIHN1Y2ggYXMgY29sbGVjdGlvbnM6XG4gICAqXG4gICAqIC0gbGlzdChcXDxUWVBFXFw+KVxuICAgKiAtIHNldChcXDxUWVBFXFw+KVxuICAgKiAtIG1hcChcXDxUWVBFXFw+KVxuICAgKiAtIG9iamVjdCh7XFw8QVRUUiBOQU1FXFw+ID0gXFw8VFlQRVxcPiwgLi4uIH0pXG4gICAqIC0gdHVwbGUoW1xcPFRZUEVcXD4sIC4uLl0pXG4gICAqXG4gICAqIFRoZSBrZXl3b3JkIGFueSBtYXkgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFueSB0eXBlIGlzIGFjY2VwdGFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBtZWFuaW5nIGFuZCBiZWhhdmlvciBvZiB0aGVzZSBkaWZmZXJlbnQgdHlwZXMsIGFzIHdlbGwgYXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYXV0b21hdGljIGNvbnZlcnNpb24gb2YgY29tcGxleCB0eXBlcywgcmVmZXIgdG8ge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2V4cHJlc3Npb25zL3R5cGUtY29uc3RyYWludHMgVHlwZSBDb25zdHJhaW50c30uXG4gICAqXG4gICAqIElmIGJvdGggdGhlIHR5cGUgYW5kIGRlZmF1bHQgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBnaXZlbiBkZWZhdWx0IHZhbHVlIG11c3QgYmUgY29udmVydGlibGUgdG8gdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICByZWFkb25seSBzZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qXG4gICAqIFRoZSBudWxsYWJsZSBhcmd1bWVudCBpbiBhIHZhcmlhYmxlIGJsb2NrIGNvbnRyb2xzIHdoZXRoZXIgdGhlIG1vZHVsZSBjYWxsZXIgbWF5IGFzc2lnbiB0aGUgdmFsdWUgbnVsbCB0byB0aGUgdmFyaWFibGUuXG4gICAqL1xuICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYXJiaXRyYXJ5IGN1c3RvbSB2YWxpZGF0aW9uIHJ1bGVzIGZvciBhIHBhcnRpY3VsYXIgdmFyaWFibGUgdXNpbmcgYSB2YWxpZGF0aW9uIGJsb2NrIG5lc3RlZCB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUgYmxvY2tcbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb24/OiBUZXJyYWZvcm1WYXJpYWJsZVZhbGlkYXRpb25Db25maWdbXTtcbn1cblxuLyoqXG4gKiBBIFRlcnJhZm9ybSBpbnB1dCB2YXJpYWJsZSAoYHZhcmlhYmxlYCBibG9jayk6IGEgcGFyYW1ldGVyIHdob3NlIHZhbHVlIGlzIHN1cHBsaWVkIHdoZW4gdGhlIHN0YWNrIGlzIHBsYW5uZWQgb3JcbiAqIGFwcGxpZWQsIGxldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gYmUgY3VzdG9taXNlZCB3aXRob3V0IGNoYW5naW5nIGl0cyBjb2RlLlxuICovXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtVmFyaWFibGVcbiAgZXh0ZW5kcyBUZXJyYWZvcm1FbGVtZW50XG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0PzogYW55O1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IG51bGxhYmxlPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsaWRhdGlvbj86IFRlcnJhZm9ybVZhcmlhYmxlVmFsaWRhdGlvbkNvbmZpZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogVGVycmFmb3JtVmFyaWFibGVDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIFwidmFyXCIpO1xuXG4gICAgdGhpcy5kZWZhdWx0ID0gY29uZmlnLmRlZmF1bHQ7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGNvbmZpZy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcbiAgICB0aGlzLnNlbnNpdGl2ZSA9IGNvbmZpZy5zZW5zaXRpdmU7XG4gICAgdGhpcy5udWxsYWJsZSA9IGNvbmZpZy5udWxsYWJsZTtcbiAgICB0aGlzLl92YWxpZGF0aW9uID0gY29uZmlnLnZhbGlkYXRpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0cmluZ1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKHRoaXMuaW50ZXJwb2xhdGlvbigpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbnVtYmVyVmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXIodGhpcy5pbnRlcnBvbGF0aW9uKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0VmFsdWUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QodGhpcy5pbnRlcnBvbGF0aW9uKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBib29sZWFuVmFsdWUoKTogSVJlc29sdmFibGUge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gVG9rZW4uYXNBbnkodGhpcy5pbnRlcnBvbGF0aW9uKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWxpZGF0aW9uKCk6IFRlcnJhZm9ybVZhcmlhYmxlVmFsaWRhdGlvbkNvbmZpZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGRWYWxpZGF0aW9uKHZhbGlkYXRpb246IFRlcnJhZm9ybVZhcmlhYmxlVmFsaWRhdGlvbkNvbmZpZykge1xuICAgIGlmICghdGhpcy5fdmFsaWRhdGlvbikge1xuICAgICAgdGhpcy5fdmFsaWRhdGlvbiA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbGlkYXRpb24ucHVzaCh2YWxpZGF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJwb2xhdGlvbigpOiBJUmVzb2x2YWJsZSB7XG4gICAgcmV0dXJuIHJlZihgdmFyLiR7dGhpcy5mcmllbmRseVVuaXF1ZUlkfWAsIHRoaXMuY2RrdGZTdGFjayk7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlZmF1bHQsXG4gICAgICAgIHR5cGU6IFwiYW55XCIsXG4gICAgICB9LFxuXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICB2YWx1ZTogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICB0eXBlOiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnR5cGUsXG4gICAgICAgIHR5cGU6IFwidHlwZVwiLFxuICAgICAgfSxcbiAgICAgIHNlbnNpdGl2ZToge1xuICAgICAgICB2YWx1ZTogdGhpcy5zZW5zaXRpdmUsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIG51bGxhYmxlOiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLm51bGxhYmxlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbGlkYXRpb24/Lm1hcCgodmFsaWRhdGlvbikgPT4gKHtcbiAgICAgICAgICBlcnJvcl9tZXNzYWdlOiB2YWxpZGF0aW9uLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICBjb25kaXRpb246IHZhbGlkYXRpb24uY29uZGl0aW9uLFxuICAgICAgICB9KSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm9iamVjdExpc3RcIixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZT8udmFsdWUgIT09IHVuZGVmaW5lZCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzeW50aGVzaXplQXR0cmlidXRlcygpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVmYXVsdDogdGhpcy5kZWZhdWx0LFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBzZW5zaXRpdmU6IHRoaXMuc2Vuc2l0aXZlLFxuICAgICAgbnVsbGFibGU6IHRoaXMubnVsbGFibGUsXG4gICAgICB2YWxpZGF0aW9uOiB0aGlzLnZhbGlkYXRpb24/Lm1hcCgodmFsaWRhdGlvbikgPT4gKHtcbiAgICAgICAgZXJyb3JfbWVzc2FnZTogdmFsaWRhdGlvbi5lcnJvck1lc3NhZ2UsXG4gICAgICAgIGNvbmRpdGlvbjogdmFsaWRhdGlvbi5jb25kaXRpb24sXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB0b0hjbFRlcnJhZm9ybSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB2YXJpYWJsZToge1xuICAgICAgICBbdGhpcy5mcmllbmRseVVuaXF1ZUlkXTogZGVlcE1lcmdlKFxuICAgICAgICAgIGtleXNUb1NuYWtlQ2FzZSh0aGlzLnN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCkpLFxuICAgICAgICAgIHRoaXMucmF3T3ZlcnJpZGVzLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHRvVGVycmFmb3JtKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhcmlhYmxlOiB7XG4gICAgICAgIFt0aGlzLmZyaWVuZGx5VW5pcXVlSWRdOiBkZWVwTWVyZ2UoXG4gICAgICAgICAga2V5c1RvU25ha2VDYXNlKHRoaXMuc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKSksXG4gICAgICAgICAgdGhpcy5yYXdPdmVycmlkZXMsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYSBzdHJpbmcgdG9rZW4gcmVmZXJlbmNpbmcgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGVcbiAgICovXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nVmFsdWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -9,6 +9,12 @@ const matchers_2 = require("../matchers");
|
|
|
9
9
|
// Jest supports asymetric matchers (https://github.com/facebook/jest/blob/main/packages/expect/src/asymmetricMatchers.ts)
|
|
10
10
|
// These matchers are great in expressing partial equality in a deeply nested way
|
|
11
11
|
// As we want to support more than one testing framework we can not use them everywhere
|
|
12
|
+
/**
|
|
13
|
+
* Checks whether any of the items partially matches the asserted properties, using jest's asymmetric matchers.
|
|
14
|
+
* @param items the synthesized items to search
|
|
15
|
+
* @param assertedProperties the properties at least one item must contain; when empty, any item matches
|
|
16
|
+
* @returns true if a matching item was found
|
|
17
|
+
*/
|
|
12
18
|
function jestPassEvaluation(items, assertedProperties) {
|
|
13
19
|
if (Object.entries(assertedProperties).length === 0) {
|
|
14
20
|
return items.length > 0;
|
|
@@ -25,6 +31,9 @@ function jestPassEvaluation(items, assertedProperties) {
|
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Registers the CDKTN matchers (toHaveResource, toBeValidTerraform, etc.) with jest's global `expect`.
|
|
36
|
+
*/
|
|
28
37
|
function setupJest() {
|
|
29
38
|
if (!("expect" in global)) {
|
|
30
39
|
throw (0, errors_1.expectNotGloballyAccessible)();
|
|
@@ -57,4 +66,4 @@ function setupJest() {
|
|
|
57
66
|
},
|
|
58
67
|
});
|
|
59
68
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2FkYXB0ZXJzL2plc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnRkEsOEJBNkZDO0FBN0tELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQWdGO0FBQ2hGLDBDQUtxQjtBQUNyQiwwQ0FNcUI7QUFtQ3JCLDBIQUEwSDtBQUMxSCxpRkFBaUY7QUFDakYsdUZBQXVGO0FBQ3ZGOzs7OztHQUtHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FDekIsS0FBWSxFQUNaLGtCQUF1QztJQUV2QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUssTUFBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFJLE1BQWMsQ0FBQyxNQUFNLENBQUM7WUFDdEMsT0FBTyxNQUFNO2lCQUNWLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7aUJBQzlELGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBQSw0QkFBbUIsR0FBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUEsb0NBQTJCLEdBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUksTUFBYyxDQUFDLE1BQW9CLENBQUM7SUFFcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNaLGNBQWMsQ0FDWixRQUFnQixFQUNoQixtQkFBeUM7WUFFekMsT0FBTyxJQUFBLDhCQUFtQixFQUN4QixJQUFBLDBDQUErQixFQUFDLGtCQUFrQixDQUFDLENBQ2pELFFBQVEsRUFDUixtQkFBbUIsRUFDbkIsRUFBRSxDQUNILENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCw0QkFBNEIsQ0FDMUIsUUFBZ0IsRUFDaEIsbUJBQXlDLEVBQ3pDLFVBQStCO1lBRS9CLE9BQU8sSUFBQSw4QkFBbUIsRUFDeEIsSUFBQSwwQ0FBK0IsRUFBQyxrQkFBa0IsQ0FBQyxDQUNqRCxRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLFVBQVUsQ0FDWCxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsZ0JBQWdCLENBQ2QsUUFBZ0IsRUFDaEIscUJBQTJDO1lBRTNDLE9BQU8sSUFBQSw4QkFBbUIsRUFDeEIsSUFBQSw0Q0FBaUMsRUFBQyxrQkFBa0IsQ0FBQyxDQUNuRCxRQUFRLEVBQ1IscUJBQXFCLEVBQ3JCLEVBQUUsQ0FDSCxDQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsOEJBQThCLENBQzVCLFFBQWdCLEVBQ2hCLHFCQUEyQyxFQUMzQyxVQUErQjtZQUUvQixPQUFPLElBQUEsOEJBQW1CLEVBQ3hCLElBQUEsNENBQWlDLEVBQUMsa0JBQWtCLENBQUMsQ0FDbkQsUUFBUSxFQUNSLHFCQUFxQixFQUNyQixVQUFVLENBQ1gsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELGNBQWMsQ0FDWixRQUFnQixFQUNoQixtQkFBeUM7WUFFekMsT0FBTyxJQUFBLDhCQUFtQixFQUN4QixJQUFBLDBDQUErQixFQUFDLGtCQUFrQixDQUFDLENBQ2pELFFBQVEsRUFDUixtQkFBbUIsRUFDbkIsRUFBRSxDQUNILENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCw0QkFBNEIsQ0FDMUIsUUFBZ0IsRUFDaEIsbUJBQXlDLEVBQ3pDLFVBQStCO1lBRS9CLE9BQU8sSUFBQSw4QkFBbUIsRUFDeEIsSUFBQSwwQ0FBK0IsRUFBQyxrQkFBa0IsQ0FBQyxDQUNqRCxRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLFVBQVUsQ0FDWCxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsa0JBQWtCLENBQUMsUUFBZ0I7WUFDakMsT0FBTyxJQUFBLDhCQUFtQixFQUFDLElBQUEsNkJBQWtCLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0Qsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxPQUFtQztZQUN0RSxPQUFPLElBQUEsOEJBQW1CLEVBQUMsSUFBQSw2QkFBa0IsRUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBleHBlY3ROb3RHbG9iYWxseUFjY2Vzc2libGUsIGplc3ROb3RJbnN0YW50aWF0ZWQgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQge1xuICBnZXRUb0hhdmVEYXRhU291cmNlV2l0aFByb3BlcnRpZXMsXG4gIHRvQmVWYWxpZFRlcnJhZm9ybSxcbiAgdG9QbGFuU3VjY2Vzc2Z1bGx5LFxuICBUb1BsYW5TdWNjZXNzZnVsbHlPcHRpb25zLFxufSBmcm9tIFwiLi4vbWF0Y2hlcnNcIjtcbmltcG9ydCB7XG4gIGdldFRvSGF2ZVJlc291cmNlV2l0aFByb3BlcnRpZXMsXG4gIGdldFRvSGF2ZVByb3ZpZGVyV2l0aFByb3BlcnRpZXMsXG4gIFRlcnJhZm9ybUNvbnN0cnVjdG9yLFxuICBNYXRjaGVyUmV0dXJuSmVzdCxcbiAgcmV0dXJuTWF0Y2hlclRvSmVzdCxcbn0gZnJvbSBcIi4uL21hdGNoZXJzXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgbmFtZXNwYWNlIGplc3Qge1xuICAgIGludGVyZmFjZSBNYXRjaGVyczxSPiB7XG4gICAgICB0b0hhdmVSZXNvdXJjZShyZXNvdXJjZUNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3Rvcik6IFI7XG4gICAgICB0b0hhdmVSZXNvdXJjZVdpdGhQcm9wZXJ0aWVzKFxuICAgICAgICByZXNvdXJjZUNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgICk6IFI7XG5cbiAgICAgIHRvSGF2ZURhdGFTb3VyY2UoZGF0YVNvdXJjZUNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3Rvcik6IFI7XG4gICAgICB0b0hhdmVEYXRhU291cmNlV2l0aFByb3BlcnRpZXMoXG4gICAgICAgIGRhdGFTb3VyY2VDb25zdHJ1Y3RvcjogVGVycmFmb3JtQ29uc3RydWN0b3IsXG4gICAgICAgIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICApOiBSO1xuXG4gICAgICB0b0hhdmVQcm92aWRlcihwcm92aWRlckNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3Rvcik6IFI7XG4gICAgICB0b0hhdmVQcm92aWRlcldpdGhQcm9wZXJ0aWVzKFxuICAgICAgICBwcm92aWRlckNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgICk6IFI7XG5cbiAgICAgIHRvQmVWYWxpZFRlcnJhZm9ybSgpOiBSO1xuICAgICAgdG9QbGFuU3VjY2Vzc2Z1bGx5KG9wdGlvbnM/OiBUb1BsYW5TdWNjZXNzZnVsbHlPcHRpb25zKTogUjtcbiAgICB9XG4gIH1cbn1cblxudHlwZSBKZXN0RXhwZWN0ID0ge1xuICBleHRlbmQ6IChcbiAgICBtYXRjaGVyczogUmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IGFueVtdKSA9PiBNYXRjaGVyUmV0dXJuSmVzdD4sXG4gICkgPT4gdm9pZDtcbn07XG5cbi8vIEplc3Qgc3VwcG9ydHMgYXN5bWV0cmljIG1hdGNoZXJzIChodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svamVzdC9ibG9iL21haW4vcGFja2FnZXMvZXhwZWN0L3NyYy9hc3ltbWV0cmljTWF0Y2hlcnMudHMpXG4vLyBUaGVzZSBtYXRjaGVycyBhcmUgZ3JlYXQgaW4gZXhwcmVzc2luZyBwYXJ0aWFsIGVxdWFsaXR5IGluIGEgZGVlcGx5IG5lc3RlZCB3YXlcbi8vIEFzIHdlIHdhbnQgdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIHRlc3RpbmcgZnJhbWV3b3JrIHdlIGNhbiBub3QgdXNlIHRoZW0gZXZlcnl3aGVyZVxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbnkgb2YgdGhlIGl0ZW1zIHBhcnRpYWxseSBtYXRjaGVzIHRoZSBhc3NlcnRlZCBwcm9wZXJ0aWVzLCB1c2luZyBqZXN0J3MgYXN5bW1ldHJpYyBtYXRjaGVycy5cbiAqIEBwYXJhbSBpdGVtcyB0aGUgc3ludGhlc2l6ZWQgaXRlbXMgdG8gc2VhcmNoXG4gKiBAcGFyYW0gYXNzZXJ0ZWRQcm9wZXJ0aWVzIHRoZSBwcm9wZXJ0aWVzIGF0IGxlYXN0IG9uZSBpdGVtIG11c3QgY29udGFpbjsgd2hlbiBlbXB0eSwgYW55IGl0ZW0gbWF0Y2hlc1xuICogQHJldHVybnMgdHJ1ZSBpZiBhIG1hdGNoaW5nIGl0ZW0gd2FzIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGplc3RQYXNzRXZhbHVhdGlvbihcbiAgaXRlbXM6IGFueVtdLFxuICBhc3NlcnRlZFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pOiBib29sZWFuIHtcbiAgaWYgKE9iamVjdC5lbnRyaWVzKGFzc2VydGVkUHJvcGVydGllcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG4gIH0gZWxzZSB7XG4gICAgaWYgKChnbG9iYWwgYXMgYW55KS5leHBlY3QpIHtcbiAgICAgIGNvbnN0IGV4cGVjdCA9IChnbG9iYWwgYXMgYW55KS5leHBlY3Q7XG4gICAgICByZXR1cm4gZXhwZWN0XG4gICAgICAgIC5hcnJheUNvbnRhaW5pbmcoW2V4cGVjdC5vYmplY3RDb250YWluaW5nKGFzc2VydGVkUHJvcGVydGllcyldKVxuICAgICAgICAuYXN5bW1ldHJpY01hdGNoKGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgamVzdE5vdEluc3RhbnRpYXRlZCgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgQ0RLVE4gbWF0Y2hlcnMgKHRvSGF2ZVJlc291cmNlLCB0b0JlVmFsaWRUZXJyYWZvcm0sIGV0Yy4pIHdpdGggamVzdCdzIGdsb2JhbCBgZXhwZWN0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwSmVzdCgpIHtcbiAgaWYgKCEoXCJleHBlY3RcIiBpbiBnbG9iYWwpKSB7XG4gICAgdGhyb3cgZXhwZWN0Tm90R2xvYmFsbHlBY2Nlc3NpYmxlKCk7XG4gIH1cblxuICBjb25zdCBleHBlY3QgPSAoZ2xvYmFsIGFzIGFueSkuZXhwZWN0IGFzIEplc3RFeHBlY3Q7XG5cbiAgZXhwZWN0LmV4dGVuZCh7XG4gICAgdG9IYXZlUmVzb3VyY2UoXG4gICAgICByZWNlaXZlZDogc3RyaW5nLFxuICAgICAgcmVzb3VyY2VDb25zdHJ1Y3RvcjogVGVycmFmb3JtQ29uc3RydWN0b3IsXG4gICAgKSB7XG4gICAgICByZXR1cm4gcmV0dXJuTWF0Y2hlclRvSmVzdChcbiAgICAgICAgZ2V0VG9IYXZlUmVzb3VyY2VXaXRoUHJvcGVydGllcyhqZXN0UGFzc0V2YWx1YXRpb24pKFxuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICAgIHJlc291cmNlQ29uc3RydWN0b3IsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sXG4gICAgdG9IYXZlUmVzb3VyY2VXaXRoUHJvcGVydGllcyhcbiAgICAgIHJlY2VpdmVkOiBzdHJpbmcsXG4gICAgICByZXNvdXJjZUNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3RvcixcbiAgICAgIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgKSB7XG4gICAgICByZXR1cm4gcmV0dXJuTWF0Y2hlclRvSmVzdChcbiAgICAgICAgZ2V0VG9IYXZlUmVzb3VyY2VXaXRoUHJvcGVydGllcyhqZXN0UGFzc0V2YWx1YXRpb24pKFxuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICAgIHJlc291cmNlQ29uc3RydWN0b3IsXG4gICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHRvSGF2ZURhdGFTb3VyY2UoXG4gICAgICByZWNlaXZlZDogc3RyaW5nLFxuICAgICAgZGF0YVNvdXJjZUNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3RvcixcbiAgICApIHtcbiAgICAgIHJldHVybiByZXR1cm5NYXRjaGVyVG9KZXN0KFxuICAgICAgICBnZXRUb0hhdmVEYXRhU291cmNlV2l0aFByb3BlcnRpZXMoamVzdFBhc3NFdmFsdWF0aW9uKShcbiAgICAgICAgICByZWNlaXZlZCxcbiAgICAgICAgICBkYXRhU291cmNlQ29uc3RydWN0b3IsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sXG4gICAgdG9IYXZlRGF0YVNvdXJjZVdpdGhQcm9wZXJ0aWVzKFxuICAgICAgcmVjZWl2ZWQ6IHN0cmluZyxcbiAgICAgIGRhdGFTb3VyY2VDb25zdHJ1Y3RvcjogVGVycmFmb3JtQ29uc3RydWN0b3IsXG4gICAgICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICkge1xuICAgICAgcmV0dXJuIHJldHVybk1hdGNoZXJUb0plc3QoXG4gICAgICAgIGdldFRvSGF2ZURhdGFTb3VyY2VXaXRoUHJvcGVydGllcyhqZXN0UGFzc0V2YWx1YXRpb24pKFxuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICAgIGRhdGFTb3VyY2VDb25zdHJ1Y3RvcixcbiAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgdG9IYXZlUHJvdmlkZXIoXG4gICAgICByZWNlaXZlZDogc3RyaW5nLFxuICAgICAgcHJvdmlkZXJDb25zdHJ1Y3RvcjogVGVycmFmb3JtQ29uc3RydWN0b3IsXG4gICAgKSB7XG4gICAgICByZXR1cm4gcmV0dXJuTWF0Y2hlclRvSmVzdChcbiAgICAgICAgZ2V0VG9IYXZlUHJvdmlkZXJXaXRoUHJvcGVydGllcyhqZXN0UGFzc0V2YWx1YXRpb24pKFxuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICAgIHByb3ZpZGVyQ29uc3RydWN0b3IsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sXG4gICAgdG9IYXZlUHJvdmlkZXJXaXRoUHJvcGVydGllcyhcbiAgICAgIHJlY2VpdmVkOiBzdHJpbmcsXG4gICAgICBwcm92aWRlckNvbnN0cnVjdG9yOiBUZXJyYWZvcm1Db25zdHJ1Y3RvcixcbiAgICAgIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgKSB7XG4gICAgICByZXR1cm4gcmV0dXJuTWF0Y2hlclRvSmVzdChcbiAgICAgICAgZ2V0VG9IYXZlUHJvdmlkZXJXaXRoUHJvcGVydGllcyhqZXN0UGFzc0V2YWx1YXRpb24pKFxuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICAgIHByb3ZpZGVyQ29uc3RydWN0b3IsXG4gICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHRvQmVWYWxpZFRlcnJhZm9ybShyZWNlaXZlZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gcmV0dXJuTWF0Y2hlclRvSmVzdCh0b0JlVmFsaWRUZXJyYWZvcm0ocmVjZWl2ZWQpKTtcbiAgICB9LFxuICAgIHRvUGxhblN1Y2Nlc3NmdWxseShyZWNlaXZlZDogc3RyaW5nLCBvcHRpb25zPzogVG9QbGFuU3VjY2Vzc2Z1bGx5T3B0aW9ucykge1xuICAgICAgcmV0dXJuIHJldHVybk1hdGNoZXJUb0plc3QodG9QbGFuU3VjY2Vzc2Z1bGx5KHJlY2VpdmVkLCBvcHRpb25zKSk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|