aws-cdk 2.1004.0 → 2.1005.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +2 -2
- package/lib/api/aws-auth/account-cache.d.ts +1 -1
- package/lib/api/aws-auth/account-cache.js +1 -1
- package/lib/api/aws-auth/awscli-compatible.d.ts +1 -1
- package/lib/api/aws-auth/awscli-compatible.js +1 -1
- package/lib/api/aws-auth/credential-plugins.d.ts +1 -1
- package/lib/api/aws-auth/credential-plugins.js +1 -1
- package/lib/api/aws-auth/provider-caching.d.ts +1 -1
- package/lib/api/aws-auth/provider-caching.js +1 -1
- package/lib/api/aws-auth/sdk-logger.d.ts +2 -2
- package/lib/api/aws-auth/sdk-logger.js +1 -1
- package/lib/api/aws-auth/sdk-provider.d.ts +4 -4
- package/lib/api/aws-auth/sdk-provider.js +1 -1
- package/lib/api/aws-auth/sdk.d.ts +12 -12
- package/lib/api/aws-auth/sdk.js +1 -1
- package/lib/api/bootstrap/bootstrap-environment.d.ts +2 -2
- package/lib/api/bootstrap/bootstrap-environment.js +1 -1
- package/lib/api/bootstrap/bootstrap-props.d.ts +3 -3
- package/lib/api/bootstrap/bootstrap-props.js +1 -1
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +4 -4
- package/lib/api/bootstrap/deploy-bootstrap.js +1 -1
- package/lib/api/bootstrap/legacy-template.d.ts +1 -1
- package/lib/api/bootstrap/legacy-template.js +1 -1
- package/lib/api/cxapp/cloud-executable.d.ts +3 -3
- package/lib/api/cxapp/cloud-executable.js +1 -1
- package/lib/api/cxapp/environments.d.ts +3 -3
- package/lib/api/cxapp/environments.js +1 -1
- package/lib/api/cxapp/exec.d.ts +4 -4
- package/lib/api/cxapp/exec.js +1 -1
- package/lib/api/deployments/asset-publishing.d.ts +2 -2
- package/lib/api/deployments/asset-publishing.js +1 -1
- package/lib/api/deployments/assets.d.ts +3 -3
- package/lib/api/deployments/assets.js +1 -1
- package/lib/api/deployments/checks.d.ts +2 -2
- package/lib/api/deployments/checks.js +1 -1
- package/lib/api/deployments/cloudformation.d.ts +2 -2
- package/lib/api/deployments/cloudformation.js +1 -1
- package/lib/api/deployments/deploy-stack.d.ts +6 -6
- package/lib/api/deployments/deploy-stack.js +36 -36
- package/lib/api/deployments/deployments.d.ts +6 -6
- package/lib/api/deployments/deployments.js +1 -1
- package/lib/api/deployments/hotswap-deployments.d.ts +6 -4
- package/lib/api/deployments/hotswap-deployments.js +51 -26
- package/lib/api/environment/environment-access.d.ts +6 -6
- package/lib/api/environment/environment-access.js +1 -1
- package/lib/api/environment/environment-resources.d.ts +1 -1
- package/lib/api/environment/environment-resources.js +1 -1
- package/lib/api/evaluate-cloudformation-template.d.ts +7 -2
- package/lib/api/evaluate-cloudformation-template.js +11 -5
- package/lib/api/garbage-collection/garbage-collector.d.ts +4 -4
- package/lib/api/garbage-collection/garbage-collector.js +2 -2
- package/lib/api/garbage-collection/progress-printer.d.ts +2 -2
- package/lib/api/garbage-collection/progress-printer.js +1 -1
- package/lib/api/garbage-collection/stack-refresh.d.ts +2 -2
- package/lib/api/garbage-collection/stack-refresh.js +1 -1
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -2
- package/lib/api/hotswap/appsync-mapping-templates.js +8 -6
- package/lib/api/hotswap/code-build-projects.d.ts +3 -2
- package/lib/api/hotswap/code-build-projects.js +8 -6
- package/lib/api/hotswap/common.d.ts +45 -34
- package/lib/api/hotswap/common.js +2 -14
- package/lib/api/hotswap/ecs-services.d.ts +3 -2
- package/lib/api/hotswap/ecs-services.js +7 -5
- package/lib/api/hotswap/lambda-functions.d.ts +3 -2
- package/lib/api/hotswap/lambda-functions.js +47 -65
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +4 -8
- package/lib/api/hotswap/s3-bucket-deployments.js +18 -17
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +3 -2
- package/lib/api/hotswap/stepfunctions-state-machines.js +8 -6
- package/lib/api/logs/find-cloudwatch-logs.d.ts +1 -1
- package/lib/api/logs/find-cloudwatch-logs.js +2 -3
- package/lib/api/logs/logs-monitor.d.ts +2 -2
- package/lib/api/logs/logs-monitor.js +1 -1
- package/lib/api/resource-import/importer.d.ts +4 -4
- package/lib/api/resource-import/importer.js +1 -1
- package/lib/api/resource-import/migrator.d.ts +3 -3
- package/lib/api/resource-import/migrator.js +1 -1
- package/lib/api/stack-events/stack-activity-monitor.d.ts +1 -2
- package/lib/api/stack-events/stack-activity-monitor.js +3 -23
- package/lib/api/stack-events/stack-progress-monitor.d.ts +1 -1
- package/lib/api/stack-events/stack-progress-monitor.js +1 -1
- package/lib/api/toolkit-info.d.ts +2 -2
- package/lib/api/toolkit-info.js +1 -1
- package/lib/api/util/template-body-parameter.d.ts +1 -1
- package/lib/api/util/template-body-parameter.js +1 -1
- package/lib/api/work-graph/work-graph-builder.d.ts +2 -2
- package/lib/api/work-graph/work-graph-builder.js +1 -1
- package/lib/api/work-graph/work-graph-types.d.ts +2 -2
- package/lib/api/work-graph/work-graph-types.js +1 -1
- package/lib/api/work-graph/work-graph.d.ts +2 -2
- package/lib/api/work-graph/work-graph.js +1 -1
- package/lib/cli/activity-printer/base.d.ts +2 -2
- package/lib/cli/activity-printer/base.js +1 -1
- package/lib/cli/activity-printer/current.d.ts +2 -1
- package/lib/cli/activity-printer/current.js +1 -1
- package/lib/cli/activity-printer/history.d.ts +2 -1
- package/lib/cli/activity-printer/history.js +1 -1
- package/lib/cli/cdk-toolkit.d.ts +7 -7
- package/lib/cli/cdk-toolkit.js +10 -2
- package/lib/cli/ci-systems.d.ts +29 -0
- package/lib/cli/ci-systems.js +62 -0
- package/lib/cli/cli.d.ts +1 -1
- package/lib/cli/cli.js +22 -3
- package/lib/cli/convert-to-user-input.js +1 -1
- package/lib/cli/messages.d.ts +1 -1
- package/lib/cli/messages.js +1 -1
- package/lib/cli/parse-command-line-arguments.js +1 -1
- package/lib/cli/user-configuration.js +1 -1
- package/lib/cli/user-input.js +1 -1
- package/lib/commands/context.d.ts +1 -1
- package/lib/commands/context.js +1 -1
- package/lib/commands/migrate.d.ts +1 -1
- package/lib/commands/migrate.js +1 -1
- package/lib/context-providers/ami.d.ts +1 -1
- package/lib/context-providers/ami.js +1 -1
- package/lib/context-providers/availability-zones.d.ts +1 -1
- package/lib/context-providers/availability-zones.js +1 -1
- package/lib/context-providers/cc-api-provider.d.ts +1 -1
- package/lib/context-providers/cc-api-provider.js +1 -1
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -1
- package/lib/context-providers/endpoint-service-availability-zones.js +1 -1
- package/lib/context-providers/hosted-zones.d.ts +2 -2
- package/lib/context-providers/hosted-zones.js +1 -1
- package/lib/context-providers/index.d.ts +3 -3
- package/lib/context-providers/index.js +1 -1
- package/lib/context-providers/keys.d.ts +1 -1
- package/lib/context-providers/keys.js +1 -1
- package/lib/context-providers/load-balancers.d.ts +3 -3
- package/lib/context-providers/load-balancers.js +1 -1
- package/lib/context-providers/ssm-parameters.d.ts +1 -1
- package/lib/context-providers/ssm-parameters.js +1 -1
- package/lib/context-providers/vpcs.d.ts +1 -1
- package/lib/context-providers/vpcs.js +1 -1
- package/lib/diff.d.ts +1 -1
- package/lib/diff.js +1 -1
- package/lib/index.js +4028 -3727
- package/lib/legacy-logging-source.js +1 -1
- package/lib/list-stacks.d.ts +1 -1
- package/lib/list-stacks.js +1 -1
- package/lib/logging.d.ts +3 -3
- package/lib/logging.js +37 -35
- package/lib/notices.d.ts +22 -18
- package/lib/notices.js +46 -46
- package/lib/toolkit/cli-io-host.d.ts +17 -2
- package/lib/toolkit/cli-io-host.js +34 -5
- package/lib/tree.d.ts +1 -1
- package/lib/tree.js +1 -1
- package/package.json +3 -5
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { CloudFormationStackArtifact } from '@aws-cdk/cx-api';
|
|
1
2
|
import type { Export, StackResourceSummary } from '@aws-sdk/client-cloudformation';
|
|
2
3
|
import type { SDK } from './aws-auth';
|
|
3
4
|
import type { NestedStackTemplates } from './deployments';
|
|
5
|
+
import type { ResourceMetadata } from '../../../@aws-cdk/tmp-toolkit-helpers/src/api/resource-metadata/resource-metadata';
|
|
4
6
|
export interface ListStackResources {
|
|
5
7
|
listStackResources(): Promise<StackResourceSummary[]>;
|
|
6
8
|
}
|
|
@@ -33,8 +35,9 @@ export interface ResourceDefinition {
|
|
|
33
35
|
};
|
|
34
36
|
}
|
|
35
37
|
export interface EvaluateCloudFormationTemplateProps {
|
|
36
|
-
readonly
|
|
37
|
-
readonly
|
|
38
|
+
readonly stackArtifact: CloudFormationStackArtifact;
|
|
39
|
+
readonly stackName?: string;
|
|
40
|
+
readonly template?: Template;
|
|
38
41
|
readonly parameters: {
|
|
39
42
|
[parameterName: string]: string;
|
|
40
43
|
};
|
|
@@ -47,6 +50,7 @@ export interface EvaluateCloudFormationTemplateProps {
|
|
|
47
50
|
};
|
|
48
51
|
}
|
|
49
52
|
export declare class EvaluateCloudFormationTemplate {
|
|
53
|
+
readonly stackArtifact: CloudFormationStackArtifact;
|
|
50
54
|
private readonly stackName;
|
|
51
55
|
private readonly template;
|
|
52
56
|
private readonly context;
|
|
@@ -68,6 +72,7 @@ export declare class EvaluateCloudFormationTemplate {
|
|
|
68
72
|
findReferencesTo(logicalId: string): Array<ResourceDefinition>;
|
|
69
73
|
evaluateCfnExpression(cfnExpression: any): Promise<any>;
|
|
70
74
|
getResourceProperty(logicalId: string, propertyName: string): any;
|
|
75
|
+
metadataFor(logicalId: string): ResourceMetadata | undefined;
|
|
71
76
|
private references;
|
|
72
77
|
private parseIntrinsic;
|
|
73
78
|
private findRefTarget;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EvaluateCloudFormationTemplate = exports.CfnEvaluationException = exports.LazyLookupExport = exports.LookupExportError = exports.LazyListStackResources = void 0;
|
|
4
|
+
const resource_metadata_1 = require("../../../@aws-cdk/tmp-toolkit-helpers/src/api/resource-metadata/resource-metadata");
|
|
4
5
|
const error_1 = require("../toolkit/error");
|
|
5
6
|
class LazyListStackResources {
|
|
6
7
|
constructor(sdk, stackName) {
|
|
@@ -62,9 +63,10 @@ class CfnEvaluationException extends Error {
|
|
|
62
63
|
exports.CfnEvaluationException = CfnEvaluationException;
|
|
63
64
|
class EvaluateCloudFormationTemplate {
|
|
64
65
|
constructor(props) {
|
|
65
|
-
var _a;
|
|
66
|
-
this.
|
|
67
|
-
this.
|
|
66
|
+
var _a, _b, _c;
|
|
67
|
+
this.stackArtifact = props.stackArtifact;
|
|
68
|
+
this.stackName = (_a = props.stackName) !== null && _a !== void 0 ? _a : props.stackArtifact.stackName;
|
|
69
|
+
this.template = (_b = props.template) !== null && _b !== void 0 ? _b : props.stackArtifact.template;
|
|
68
70
|
this.context = {
|
|
69
71
|
'AWS::AccountId': props.account,
|
|
70
72
|
'AWS::Region': props.region,
|
|
@@ -76,7 +78,7 @@ class EvaluateCloudFormationTemplate {
|
|
|
76
78
|
this.partition = props.partition;
|
|
77
79
|
this.sdk = props.sdk;
|
|
78
80
|
// We need names of nested stack so we can evaluate cross stack references
|
|
79
|
-
this.nestedStacks = (
|
|
81
|
+
this.nestedStacks = (_c = props.nestedStacks) !== null && _c !== void 0 ? _c : {};
|
|
80
82
|
// The current resources of the Stack.
|
|
81
83
|
// We need them to figure out the physical name of a resource in case it wasn't specified by the user.
|
|
82
84
|
// We fetch it lazily, to save a service call, in case all hotswapped resources have their physical names set.
|
|
@@ -88,6 +90,7 @@ class EvaluateCloudFormationTemplate {
|
|
|
88
90
|
async createNestedEvaluateCloudFormationTemplate(stackName, nestedTemplate, nestedStackParameters) {
|
|
89
91
|
const evaluatedParams = await this.evaluateCfnExpression(nestedStackParameters);
|
|
90
92
|
return new EvaluateCloudFormationTemplate({
|
|
93
|
+
stackArtifact: this.stackArtifact,
|
|
91
94
|
stackName,
|
|
92
95
|
template: nestedTemplate,
|
|
93
96
|
parameters: evaluatedParams,
|
|
@@ -236,6 +239,9 @@ class EvaluateCloudFormationTemplate {
|
|
|
236
239
|
var _a, _b, _c;
|
|
237
240
|
return (_c = (_b = (_a = this.template.Resources) === null || _a === void 0 ? void 0 : _a[logicalId]) === null || _b === void 0 ? void 0 : _b.Properties) === null || _c === void 0 ? void 0 : _c[propertyName];
|
|
238
241
|
}
|
|
242
|
+
metadataFor(logicalId) {
|
|
243
|
+
return (0, resource_metadata_1.resourceMetadata)(this.stackArtifact, logicalId);
|
|
244
|
+
}
|
|
239
245
|
references(logicalId, templateElement) {
|
|
240
246
|
if (typeof templateElement === 'string') {
|
|
241
247
|
return logicalId === templateElement;
|
|
@@ -440,4 +446,4 @@ async function asyncGlobalReplace(str, regex, cb) {
|
|
|
440
446
|
ret.push(str.slice(start));
|
|
441
447
|
return ret.join('');
|
|
442
448
|
}
|
|
443
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSw0Q0FBZ0Q7QUFNaEQsTUFBYSxzQkFBc0I7SUFHakMsWUFDbUIsR0FBUSxFQUNSLFNBQWlCO1FBRGpCLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDUixjQUFTLEdBQVQsU0FBUyxDQUFRO0lBRXBDLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCO1FBQzdCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQWpCRCx3REFpQkM7QUFNRCxNQUFhLGlCQUFrQixTQUFRLEtBQUs7Q0FDM0M7QUFERCw4Q0FDQztBQUVELE1BQWEsZ0JBQWdCO0lBRzNCLFlBQTZCLEdBQVE7UUFBUixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBRjdCLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztJQUd2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFZO1FBQzdCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxLQUFLLEVBQUUsTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJ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QUFNLElBQUksb0JBQVksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU07UUFDUixDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTNCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFeHBvcnQsIExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dCwgU3RhY2tSZXNvdXJjZVN1bW1hcnkgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuL2F3cy1hdXRoJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfSBmcm9tICcuL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uL3Rvb2xraXQvZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTdGFja1Jlc291cmNlcyB7XG4gIGxpc3RTdGFja1Jlc291cmNlcygpOiBQcm9taXNlPFN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+O1xufVxuXG5leHBvcnQgY2xhc3MgTGF6eUxpc3RTdGFja1Jlc291cmNlcyBpbXBsZW1lbnRzIExpc3RTdGFja1Jlc291cmNlcyB7XG4gIHByaXZhdGUgc3RhY2tSZXNvdXJjZXM6IFByb21pc2U8U3RhY2tSZXNvdXJjZVN1bW1hcnlbXT4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZGs6IFNESyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0U3RhY2tSZXNvdXJjZXMoKTogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPiB7XG4gICAgaWYgKHRoaXMuc3RhY2tSZXNvdXJjZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdGFja1Jlc291cmNlcyA9IHRoaXMuc2RrLmNsb3VkRm9ybWF0aW9uKCkubGlzdFN0YWNrUmVzb3VyY2VzKHtcbiAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFja1Jlc291cmNlcztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cEV4cG9ydCB7XG4gIGxvb2t1cEV4cG9ydChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEV4cG9ydCB8IHVuZGVmaW5lZD47XG59XG5cbmV4cG9ydCBjbGFzcyBMb29rdXBFeHBvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cblxuZXhwb3J0IGNsYXNzIExhenlMb29rdXBFeHBvcnQgaW1wbGVtZW50cyBMb29rdXBFeHBvcnQge1xuICBwcml2YXRlIGNhY2hlZEV4cG9ydHM6IHsgW25hbWU6IHN0cmluZ106IEV4cG9ydCB9ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzZGs6IFNESykge1xuICB9XG5cbiAgYXN5bmMgbG9va3VwRXhwb3J0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8RXhwb3J0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuY2FjaGVkRXhwb3J0c1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkRXhwb3J0c1tuYW1lXTtcbiAgICB9XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNmbkV4cG9ydCBvZiB0aGlzLmxpc3RFeHBvcnRzKCkpIHtcbiAgICAgIGlmICghY2ZuRXhwb3J0Lk5hbWUpIHtcbiAgICAgICAgY29udGludWU7IC8vIGlnbm9yZSBhbnkgcmVzdWx0IHRoYXQgb21pdHMgYSBuYW1lXG4gICAgICB9XG4gICAgICB0aGlzLmNhY2hlZEV4cG9ydHNbY2ZuRXhwb3J0Lk5hbWVdID0gY2ZuRXhwb3J0O1xuXG4gICAgICBpZiAoY2ZuRXhwb3J0Lk5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNmbkV4cG9ydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBleHBvcnQgbm90IGZvdW5kXG4gIH1cblxuICAvLyBUT0RPOiBQYWdpbmF0ZVxuICBwcml2YXRlIGFzeW5jICpsaXN0RXhwb3J0cygpIHtcbiAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBMaXN0RXhwb3J0c0NvbW1hbmRPdXRwdXQgPSBhd2FpdCB0aGlzLnNkay5jbG91ZEZvcm1hdGlvbigpLmxpc3RFeHBvcnRzKHsgTmV4dFRva2VuOiBuZXh0VG9rZW4gfSk7XG4gICAgICBmb3IgKGNvbnN0IGNmbkV4cG9ydCBvZiByZXNwb25zZS5FeHBvcnRzID8/IFtdKSB7XG4gICAgICAgIHlpZWxkIGNmbkV4cG9ydDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZS5OZXh0VG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbmV4dFRva2VuID0gcmVzcG9uc2UuTmV4dFRva2VuO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZURlZmluaXRpb24ge1xuICByZWFkb25seSBMb2dpY2FsSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBQcm9wZXJ0aWVzOiB7IFtwOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGVQcm9wcyB7XG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0ZW1wbGF0ZTogVGVtcGxhdGU7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgc2RrOiBTREs7XG4gIHJlYWRvbmx5IG5lc3RlZFN0YWNrcz86IHtcbiAgICBbbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZTogVGVtcGxhdGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogeyBbazogc3RyaW5nXTogYW55IH07XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNkazogU0RLO1xuICBwcml2YXRlIHJlYWRvbmx5IG5lc3RlZFN0YWNrczoge1xuICAgIFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXM7XG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tSZXNvdXJjZXM6IExpc3RTdGFja1Jlc291cmNlcztcbiAgcHJpdmF0ZSByZWFkb25seSBsb29rdXBFeHBvcnQ6IExvb2t1cEV4cG9ydDtcblxuICBwcml2YXRlIGNhY2hlZFVybFN1ZmZpeDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGVQcm9wcykge1xuICAgIHRoaXMuc3RhY2tOYW1lID0gcHJvcHMuc3RhY2tOYW1lO1xuICAgIHRoaXMudGVtcGxhdGUgPSBwcm9wcy50ZW1wbGF0ZTtcbiAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAnQVdTOjpBY2NvdW50SWQnOiBwcm9wcy5hY2NvdW50LFxuICAgICAgJ0FXUzo6UmVnaW9uJzogcHJvcHMucmVnaW9uLFxuICAgICAgJ0FXUzo6UGFydGl0aW9uJzogcHJvcHMucGFydGl0aW9uLFxuICAgICAgLi4ucHJvcHMucGFyYW1ldGVycyxcbiAgICB9O1xuICAgIHRoaXMuYWNjb3VudCA9IHByb3BzLmFjY291bnQ7XG4gICAgdGhpcy5yZWdpb24gPSBwcm9wcy5yZWdpb247XG4gICAgdGhpcy5wYXJ0aXRpb24gPSBwcm9wcy5wYXJ0aXRpb247XG4gICAgdGhpcy5zZGsgPSBwcm9wcy5zZGs7XG5cbiAgICAvLyBXZSBuZWVkIG5hbWVzIG9mIG5lc3RlZCBzdGFjayBzbyB3ZSBjYW4gZXZhbHVhdGUgY3Jvc3Mgc3RhY2sgcmVmZXJlbmNlc1xuICAgIHRoaXMubmVzdGVkU3RhY2tzID0gcHJvcHMubmVzdGVkU3RhY2tzID8/IHt9O1xuXG4gICAgLy8gVGhlIGN1cnJlbnQgcmVzb3VyY2VzIG9mIHRoZSBTdGFjay5cbiAgICAvLyBXZSBuZWVkIHRoZW0gdG8gZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgbmFtZSBvZiBhIHJlc291cmNlIGluIGNhc2UgaXQgd2Fzbid0IHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAgICAvLyBXZSBmZXRjaCBpdCBsYXppbHksIHRvIHNhdmUgYSBzZXJ2aWNlIGNhbGwsIGluIGNhc2UgYWxsIGhvdHN3YXBwZWQgcmVzb3VyY2VzIGhhdmUgdGhlaXIgcGh5c2ljYWwgbmFtZXMgc2V0LlxuICAgIHRoaXMuc3RhY2tSZXNvdXJjZXMgPSBuZXcgTGF6eUxpc3RTdGFja1Jlc291cmNlcyh0aGlzLnNkaywgdGhpcy5zdGFja05hbWUpO1xuXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gRXhwb3J0cyBsb29rdXAgdG8gYmUgYWJsZSB0byByZXNvbHZlIEZuOjpJbXBvcnRWYWx1ZSBpbnRyaW5zaWNzIGluIHRlbXBsYXRlXG4gICAgdGhpcy5sb29rdXBFeHBvcnQgPSBuZXcgTGF6eUxvb2t1cEV4cG9ydCh0aGlzLnNkayk7XG4gIH1cblxuICAvLyBjbG9uZXMgY3VycmVudCBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgb2JqZWN0LCBidXQgdXBkYXRlcyB0aGUgc3RhY2sgbmFtZVxuICBwdWJsaWMgYXN5bmMgY3JlYXRlTmVzdGVkRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIG5lc3RlZFRlbXBsYXRlOiBUZW1wbGF0ZSxcbiAgICBuZXN0ZWRTdGFja1BhcmFtZXRlcnM6IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IGFueSB9LFxuICApIHtcbiAgICBjb25zdCBldmFsdWF0ZWRQYXJhbXMgPSBhd2FpdCB0aGlzLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihuZXN0ZWRTdGFja1BhcmFtZXRlcnMpO1xuICAgIHJldHVybiBuZXcgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKHtcbiAgICAgIHN0YWNrTmFtZSxcbiAgICAgIHRlbXBsYXRlOiBuZXN0ZWRUZW1wbGF0ZSxcbiAgICAgIHBhcmFtZXRlcnM6IGV2YWx1YXRlZFBhcmFtcyxcbiAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICBwYXJ0aXRpb246IHRoaXMucGFydGl0aW9uLFxuICAgICAgc2RrOiB0aGlzLnNkayxcbiAgICAgIG5lc3RlZFN0YWNrczogdGhpcy5uZXN0ZWRTdGFja3MsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXN0YWJsaXNoUmVzb3VyY2VQaHlzaWNhbE5hbWUoXG4gICAgbG9naWNhbElkOiBzdHJpbmcsXG4gICAgcGh5c2ljYWxOYW1lSW5DZm5UZW1wbGF0ZTogYW55LFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmIChwaHlzaWNhbE5hbWVJbkNmblRlbXBsYXRlICE9IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihwaHlzaWNhbE5hbWVJbkNmblRlbXBsYXRlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWYgd2UgY2FuJ3QgZXZhbHVhdGUgdGhlIHJlc291cmNlJ3MgbmFtZSBDbG91ZEZvcm1hdGlvbiBleHByZXNzaW9uLFxuICAgICAgICAvLyBqdXN0IGxvb2sgaXQgdXAgaW4gdGhlIGN1cnJlbnRseSBkZXBsb3llZCBTdGFja1xuICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbikpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmRQaHlzaWNhbE5hbWVGb3IobG9naWNhbElkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaW5kUGh5c2ljYWxOYW1lRm9yKGxvZ2ljYWxJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IGF3YWl0IHRoaXMuc3RhY2tSZXNvdXJjZXMubGlzdFN0YWNrUmVzb3VyY2VzKCk7XG4gICAgcmV0dXJuIHN0YWNrUmVzb3VyY2VzLmZpbmQoKHNyKSA9PiBzci5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9naWNhbElkKT8uUGh5c2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbmRMb2dpY2FsSWRGb3JQaHlzaWNhbE5hbWUocGh5c2ljYWxOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5zdGFja1Jlc291cmNlcy5saXN0U3RhY2tSZXNvdXJjZXMoKTtcbiAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXMuZmluZCgoc3IpID0+IHNyLlBoeXNpY2FsUmVzb3VyY2VJZCA9PT0gcGh5c2ljYWxOYW1lKT8uTG9naWNhbFJlc291cmNlSWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFJlZmVyZW5jZXNUbyhsb2dpY2FsSWQ6IHN0cmluZyk6IEFycmF5PFJlc291cmNlRGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxSZXNvdXJjZURlZmluaXRpb24+KCk7XG4gICAgZm9yIChjb25zdCBbcmVzb3VyY2VMb2dpY2FsSWQsIHJlc291cmNlRGVmXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnRlbXBsYXRlPy5SZXNvdXJjZXMgPz8ge30pKSB7XG4gICAgICBpZiAobG9naWNhbElkICE9PSByZXNvdXJjZUxvZ2ljYWxJZCAmJiB0aGlzLnJlZmVyZW5jZXMobG9naWNhbElkLCByZXNvdXJjZURlZikpIHtcbiAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgIC4uLihyZXNvdXJjZURlZiBhcyBhbnkpLFxuICAgICAgICAgIExvZ2ljYWxJZDogcmVzb3VyY2VMb2dpY2FsSWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihjZm5FeHByZXNzaW9uOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlcyBDbG91ZEZvcm1hdGlvbiBpbnRyaW5zaWMgZnVuY3Rpb25zXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgc3VwcG9ydGVkIGludHJpbnNpYyBmdW5jdGlvbnMgYXJlIGRvY3VtZW50ZWQgaW4gUkVBRE1FLm1kIC0tIHBsZWFzZSB1cGRhdGVcbiAgICAgKiBsaXN0IG9mIHN1cHBvcnRlZCBmdW5jdGlvbnMgd2hlbiBhZGRpbmcgbmV3IGV2YWx1YXRpb25zXG4gICAgICpcbiAgICAgKiBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UuaHRtbFxuICAgICAqL1xuICAgIGNsYXNzIENmbkludHJpbnNpY3Mge1xuICAgICAgcHVibGljIGV2YWx1YXRlSW50cmluc2ljKGludHJpbnNpYzogSW50cmluc2ljKTogYW55IHtcbiAgICAgICAgY29uc3QgaW50cmluc2ljRnVuYyA9ICh0aGlzIGFzIGFueSlbaW50cmluc2ljLm5hbWVdO1xuICAgICAgICBpZiAoIWludHJpbnNpY0Z1bmMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbihgQ2xvdWRGb3JtYXRpb24gZnVuY3Rpb24gJHtpbnRyaW5zaWMubmFtZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnc0FzQXJyYXkgPSBBcnJheS5pc0FycmF5KGludHJpbnNpYy5hcmdzKSA/IGludHJpbnNpYy5hcmdzIDogW2ludHJpbnNpYy5hcmdzXTtcblxuICAgICAgICByZXR1cm4gaW50cmluc2ljRnVuYy5hcHBseSh0aGlzLCBhcmdzQXNBcnJheSk7XG4gICAgICB9XG5cbiAgICAgIGFzeW5jICdGbjo6Sm9pbicoc2VwYXJhdG9yOiBzdHJpbmcsIGFyZ3M6IGFueVtdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkQXJncyA9IGF3YWl0IHNlbGYuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGFyZ3MpO1xuICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJncy5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGFzeW5jICdGbjo6U3BsaXQnKHNlcGFyYXRvcjogc3RyaW5nLCBhcmdzOiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBldmFsdWF0ZWRBcmdzID0gYXdhaXQgc2VsZi5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oYXJncyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZWRBcmdzLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGFzeW5jICdGbjo6U2VsZWN0JyhpbmRleDogbnVtYmVyLCBhcmdzOiBhbnlbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEFyZ3MgPSBhd2FpdCBzZWxmLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihhcmdzKTtcbiAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3NbaW5kZXhdO1xuICAgICAgfVxuXG4gICAgICBhc3luYyBSZWYobG9naWNhbElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZWZUYXJnZXQgPSBhd2FpdCBzZWxmLmZpbmRSZWZUYXJnZXQobG9naWNhbElkKTtcbiAgICAgICAgaWYgKHJlZlRhcmdldCkge1xuICAgICAgICAgIHJldHVybiByZWZUYXJnZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYFBhcmFtZXRlciBvciByZXNvdXJjZSAnJHtsb2dpY2FsSWR9JyBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGV2YWx1YXRpb25gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OkdldEF0dCcobG9naWNhbElkOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIFRvRG8gaGFuZGxlIHRoZSAnbG9naWNhbElkLmF0dHJpYnV0ZU5hbWUnIGZvcm0gb2YgRm46OkdldEF0dFxuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBhd2FpdCBzZWxmLmZpbmRHZXRBdHRUYXJnZXQobG9naWNhbElkLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgaWYgKGF0dHJWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiBhdHRyVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oXG4gICAgICAgICAgICBgQXR0cmlidXRlICcke2F0dHJpYnV0ZU5hbWV9JyBvZiByZXNvdXJjZSAnJHtsb2dpY2FsSWR9JyBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGV2YWx1YXRpb25gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXN5bmMgJ0ZuOjpTdWInKHRlbXBsYXRlOiBzdHJpbmcsIGV4cGxpY2l0UGxhY2Vob2xkZXJzPzogeyBbdmFyaWFibGU6IHN0cmluZ106IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gZXhwbGljaXRQbGFjZWhvbGRlcnMgPyBhd2FpdCBzZWxmLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihleHBsaWNpdFBsYWNlaG9sZGVycykgOiB7fTtcblxuICAgICAgICByZXR1cm4gYXN5bmNHbG9iYWxSZXBsYWNlKHRlbXBsYXRlLCAvXFwkeyhbXn1dKil9L2csIChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5IGluIHBsYWNlaG9sZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyc1trZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEtleSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgcmV0dXJuIHNwbGl0S2V5Lmxlbmd0aCA9PT0gMSA/IHRoaXMuUmVmKGtleSkgOiB0aGlzWydGbjo6R2V0QXR0J10oc3BsaXRLZXlbMF0sIHNwbGl0S2V5LnNsaWNlKDEpLmpvaW4oJy4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYXN5bmMgJ0ZuOjpJbXBvcnRWYWx1ZScobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZXhwb3J0ZWQgPSBhd2FpdCBzZWxmLmxvb2t1cEV4cG9ydC5sb29rdXBFeHBvcnQobmFtZSk7XG4gICAgICAgIGlmICghZXhwb3J0ZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbihgRXhwb3J0ICcke25hbWV9JyBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGV2YWx1YXRpb25gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4cG9ydGVkLlZhbHVlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYEV4cG9ydCAnJHtuYW1lfScgZXhpc3RzIHdpdGhvdXQgYSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHBvcnRlZC5WYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2ZuRXhwcmVzc2lvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY2ZuRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjZm5FeHByZXNzaW9uKSkge1xuICAgICAgLy8gU21hbGwgYXJyYXlzIGluIHByYWN0aWNlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChjZm5FeHByZXNzaW9uLm1hcCgoZXhwcikgPT4gdGhpcy5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oZXhwcikpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNmbkV4cHJlc3Npb24gPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBpbnRyaW5zaWMgPSB0aGlzLnBhcnNlSW50cmluc2ljKGNmbkV4cHJlc3Npb24pO1xuICAgICAgaWYgKGludHJpbnNpYykge1xuICAgICAgICByZXR1cm4gbmV3IENmbkludHJpbnNpY3MoKS5ldmFsdWF0ZUludHJpbnNpYyhpbnRyaW5zaWMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmV0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhjZm5FeHByZXNzaW9uKSkge1xuICAgICAgICAgIHJldFtrZXldID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjZm5FeHByZXNzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldFJlc291cmNlUHJvcGVydHkobG9naWNhbElkOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5SZXNvdXJjZXM/Lltsb2dpY2FsSWRdPy5Qcm9wZXJ0aWVzPy5bcHJvcGVydHlOYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmZXJlbmNlcyhsb2dpY2FsSWQ6IHN0cmluZywgdGVtcGxhdGVFbGVtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHRlbXBsYXRlRWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBsb2dpY2FsSWQgPT09IHRlbXBsYXRlRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGVtcGxhdGVFbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGVFbGVtZW50LnNvbWUoKGVsKSA9PiB0aGlzLnJlZmVyZW5jZXMobG9naWNhbElkLCBlbCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGVtcGxhdGVFbGVtZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGVtcGxhdGVFbGVtZW50KS5zb21lKChlbCkgPT4gdGhpcy5yZWZlcmVuY2VzKGxvZ2ljYWxJZCwgZWwpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW50cmluc2ljKHg6IGFueSk6IEludHJpbnNpYyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHgpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSAmJiAoa2V5c1swXS5zdGFydHNXaXRoKCdGbjo6JykgfHwga2V5c1swXSA9PT0gJ1JlZicpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBrZXlzWzBdLFxuICAgICAgICBhcmdzOiB4W2tleXNbMF1dLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZFJlZlRhcmdldChsb2dpY2FsSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gZmlyc3QsIGNoZWNrIHRvIHNlZSBpZiB0aGUgUmVmIGlzIGEgUGFyYW1ldGVyIHdobydzIHZhbHVlIHdlIGhhdmVcbiAgICBpZiAobG9naWNhbElkID09PSAnQVdTOjpVUkxTdWZmaXgnKSB7XG4gICAgICBpZiAoIXRoaXMuY2FjaGVkVXJsU3VmZml4KSB7XG4gICAgICAgIHRoaXMuY2FjaGVkVXJsU3VmZml4ID0gYXdhaXQgdGhpcy5zZGsuZ2V0VXJsU3VmZml4KHRoaXMucmVnaW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkVXJsU3VmZml4O1xuICAgIH1cblxuICAgIC8vIFRyeSBmaW5kaW5nIHRoZSByZWYgaW4gdGhlIHBhc3NlZCBpbiBwYXJhbWV0ZXJzXG4gICAgY29uc3QgcGFyYW1ldGVyVGFyZ2V0ID0gdGhpcy5jb250ZXh0W2xvZ2ljYWxJZF07XG4gICAgaWYgKHBhcmFtZXRlclRhcmdldCkge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlclRhcmdldDtcbiAgICB9XG5cbiAgICAvLyBJZiBub3QgaW4gdGhlIHBhc3NlZCBpbiBwYXJhbWV0ZXJzLCBzZWUgaWYgdGhlcmUgaXMgYSBkZWZhdWx0IHZhbHVlIGluIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgbm90IHBhc3NlZCBpblxuICAgIGNvbnN0IGRlZmF1bHRQYXJhbWV0ZXJWYWx1ZSA9IHRoaXMudGVtcGxhdGUuUGFyYW1ldGVycz8uW2xvZ2ljYWxJZF0/LkRlZmF1bHQ7XG4gICAgaWYgKGRlZmF1bHRQYXJhbWV0ZXJWYWx1ZSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQYXJhbWV0ZXJWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBpZiBpdCdzIG5vdCBhIFBhcmFtZXRlciwgd2UgbmVlZCB0byBzZWFyY2ggaW4gdGhlIGN1cnJlbnQgU3RhY2sgcmVzb3VyY2VzXG4gICAgcmV0dXJuIHRoaXMuZmluZEdldEF0dFRhcmdldChsb2dpY2FsSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kR2V0QXR0VGFyZ2V0KGxvZ2ljYWxJZDogc3RyaW5nLCBhdHRyaWJ1dGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIHRoZSBhdHRyaWJ1dGUgaXMgcmVmZXJlbmNpbmcgYSBzdGFjayBvdXRwdXQgKHVzZWQgaW4gbmVzdGVkIHN0YWNrcyB0byBzaGFyZSBwYXJhbWV0ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9xdWlja3JlZi1jbG91ZGZvcm1hdGlvbi5odG1sI3cyYWIxYzE3YzIzYzE5YjVcbiAgICBpZiAobG9naWNhbElkID09PSAnT3V0cHV0cycgJiYgYXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odGhpcy50ZW1wbGF0ZS5PdXRwdXRzW2F0dHJpYnV0ZV0/LlZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IGF3YWl0IHRoaXMuc3RhY2tSZXNvdXJjZXMubGlzdFN0YWNrUmVzb3VyY2VzKCk7XG4gICAgY29uc3QgZm91bmRSZXNvdXJjZSA9IHN0YWNrUmVzb3VyY2VzLmZpbmQoKHNyKSA9PiBzci5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9naWNhbElkKTtcbiAgICBpZiAoIWZvdW5kUmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGZvdW5kUmVzb3VyY2UuUmVzb3VyY2VUeXBlID09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycgJiYgYXR0cmlidXRlPy5zdGFydHNXaXRoKCdPdXRwdXRzLicpKSB7XG4gICAgICBjb25zdCBkZXBlbmRhbnRTdGFjayA9IHRoaXMuZmluZE5lc3RlZFN0YWNrKGxvZ2ljYWxJZCwgdGhpcy5uZXN0ZWRTdGFja3MpO1xuICAgICAgaWYgKCFkZXBlbmRhbnRTdGFjayB8fCAhZGVwZW5kYW50U3RhY2sucGh5c2ljYWxOYW1lKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYSBuZXdseSBjcmVhdGVkIG5lc3RlZCBzdGFjayBhbmQgY2Fubm90IGJlIGhvdHN3YXBwZWRcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU5lc3RlZEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZShcbiAgICAgICAgZGVwZW5kYW50U3RhY2sucGh5c2ljYWxOYW1lLFxuICAgICAgICBkZXBlbmRhbnRTdGFjay5nZW5lcmF0ZWRUZW1wbGF0ZSxcbiAgICAgICAgZGVwZW5kYW50U3RhY2suZ2VuZXJhdGVkVGVtcGxhdGUuUGFyYW1ldGVycyEsXG4gICAgICApO1xuXG4gICAgICAvLyBTcGxpdCBPdXRwdXRzLjxyZWZOYW1lPiBpbnRvICdPdXRwdXRzJyBhbmQgJzxyZWZOYW1lPicgYW5kIHJlY3Vyc2l2ZWx5IGNhbGwgZXZhbHVhdGVcbiAgICAgIHJldHVybiBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih7XG4gICAgICAgICdGbjo6R2V0QXR0JzogYXR0cmlidXRlLnNwbGl0KC9cXC4oLiopL3MpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIG5vdywgd2UgbmVlZCB0byBmb3JtYXQgdGhlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXIgZGVwZW5kaW5nIG9uIHRoZSByZXNvdXJjZSB0eXBlLFxuICAgIC8vIGFuZCB0aGUgcmVxdWVzdGVkIGF0dHJpYnV0ZSBuYW1lXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0UmVzb3VyY2VBdHRyaWJ1dGUoZm91bmRSZXNvdXJjZSwgYXR0cmlidXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE5lc3RlZFN0YWNrKFxuICAgIGxvZ2ljYWxJZDogc3RyaW5nLFxuICAgIG5lc3RlZFN0YWNrczoge1xuICAgICAgW25lc3RlZFN0YWNrTG9naWNhbElkOiBzdHJpbmddOiBOZXN0ZWRTdGFja1RlbXBsYXRlcztcbiAgICB9LFxuICApOiBOZXN0ZWRTdGFja1RlbXBsYXRlcyB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBuZXN0ZWRTdGFja0xvZ2ljYWxJZCBvZiBPYmplY3Qua2V5cyhuZXN0ZWRTdGFja3MpKSB7XG4gICAgICBpZiAobmVzdGVkU3RhY2tMb2dpY2FsSWQgPT09IGxvZ2ljYWxJZCkge1xuICAgICAgICByZXR1cm4gbmVzdGVkU3RhY2tzW25lc3RlZFN0YWNrTG9naWNhbElkXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNoZWNrSW5OZXN0ZWRDaGlsZFN0YWNrcyA9IHRoaXMuZmluZE5lc3RlZFN0YWNrKFxuICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgIG5lc3RlZFN0YWNrc1tuZXN0ZWRTdGFja0xvZ2ljYWxJZF0ubmVzdGVkU3RhY2tUZW1wbGF0ZXMsXG4gICAgICApO1xuICAgICAgaWYgKGNoZWNrSW5OZXN0ZWRDaGlsZFN0YWNrcykgcmV0dXJuIGNoZWNrSW5OZXN0ZWRDaGlsZFN0YWNrcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UmVzb3VyY2VBdHRyaWJ1dGUocmVzb3VyY2U6IFN0YWNrUmVzb3VyY2VTdW1tYXJ5LCBhdHRyaWJ1dGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGh5c2ljYWxJZCA9IHJlc291cmNlLlBoeXNpY2FsUmVzb3VyY2VJZDtcblxuICAgIC8vIG5vIGF0dHJpYnV0ZSBtZWFucyBSZWYgZXhwcmVzc2lvbiwgZm9yIHdoaWNoIHdlIHVzZSB0aGUgcGh5c2ljYWwgSUQgZGlyZWN0bHlcbiAgICBpZiAoIWF0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIHBoeXNpY2FsSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlRm9ybWF0cyA9IFJFU09VUkNFX1RZUEVfQVRUUklCVVRFU19GT1JNQVRTW3Jlc291cmNlLlJlc291cmNlVHlwZSFdO1xuICAgIGlmICghcmVzb3VyY2VUeXBlRm9ybWF0cykge1xuICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oXG4gICAgICAgIGBXZSBkb24ndCBzdXBwb3J0IGF0dHJpYnV0ZXMgb2YgdGhlICcke3Jlc291cmNlLlJlc291cmNlVHlwZX0nIHJlc291cmNlLiBUaGlzIGlzIGEgQ0RLIGxpbWl0YXRpb24uIGAgK1xuICAgICAgICAgICdQbGVhc2UgcmVwb3J0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvbmV3L2Nob29zZScsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVGbXRGdW5jID0gcmVzb3VyY2VUeXBlRm9ybWF0c1thdHRyaWJ1dGVdO1xuICAgIGlmICghYXR0cmlidXRlRm10RnVuYykge1xuICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oXG4gICAgICAgIGBXZSBkb24ndCBzdXBwb3J0IHRoZSAnJHthdHRyaWJ1dGV9JyBhdHRyaWJ1dGUgb2YgdGhlICcke3Jlc291cmNlLlJlc291cmNlVHlwZX0nIHJlc291cmNlLiBUaGlzIGlzIGEgQ0RLIGxpbWl0YXRpb24uIGAgK1xuICAgICAgICAgICdQbGVhc2UgcmVwb3J0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvbmV3L2Nob29zZScsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlT2ZSZXNvdXJjZShyZXNvdXJjZSk7XG4gICAgY29uc3QgcmVzb3VyY2VUeXBlQXJuUGFydCA9IHRoaXMuZ2V0UmVzb3VyY2VUeXBlQXJuUGFydE9mUmVzb3VyY2UocmVzb3VyY2UpO1xuICAgIHJldHVybiBhdHRyaWJ1dGVGbXRGdW5jKHtcbiAgICAgIHBhcnRpdGlvbjogdGhpcy5wYXJ0aXRpb24sXG4gICAgICBzZXJ2aWNlLFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VUeXBlQXJuUGFydCxcbiAgICAgIHJlc291cmNlTmFtZTogcGh5c2ljYWxJZCEsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZpY2VPZlJlc291cmNlKHJlc291cmNlOiBTdGFja1Jlc291cmNlU3VtbWFyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc291cmNlLlJlc291cmNlVHlwZSEuc3BsaXQoJzo6JylbMV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVzb3VyY2VUeXBlQXJuUGFydE9mUmVzb3VyY2UocmVzb3VyY2U6IFN0YWNrUmVzb3VyY2VTdW1tYXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSByZXNvdXJjZS5SZXNvdXJjZVR5cGUhO1xuICAgIGNvbnN0IHNwZWNpYWxDYXNlUmVzb3VyY2VUeXBlID0gUkVTT1VSQ0VfVFlQRV9TUEVDSUFMX05BTUVTW3Jlc291cmNlVHlwZV0/LnJlc291cmNlVHlwZTtcbiAgICByZXR1cm4gc3BlY2lhbENhc2VSZXNvdXJjZVR5cGVcbiAgICAgID8gc3BlY2lhbENhc2VSZXNvdXJjZVR5cGVcbiAgICAgIDogLy8gdGhpcyBpcyB0aGUgZGVmYXVsdCBjYXNlXG4gICAgICByZXNvdXJjZVR5cGUuc3BsaXQoJzo6JylbMl0udG9Mb3dlckNhc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZSA9IHsgW3NlY3Rpb246IHN0cmluZ106IHsgW2hlYWRpbmdzOiBzdHJpbmddOiBhbnkgfSB9O1xuXG5pbnRlcmZhY2UgQXJuUGFydHMge1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXN1YWxseSwgd2UgZGVkdWNlIHRoZSBuYW1lcyBvZiB0aGUgc2VydmljZSBhbmQgdGhlIHJlc291cmNlIHR5cGUgdXNlZCB0byBmb3JtYXQgdGhlIEFSTiBmcm9tIHRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlLlxuICogRm9yIGEgQ0ZOIHR5cGUgbGlrZSBBV1M6OlNlcnZpY2U6OlJlc291cmNlVHlwZSwgdGhlIHNlY29uZCBzZWdtZW50IGJlY29tZXMgdGhlIHNlcnZpY2UgbmFtZSwgYW5kIHRoZSB0aGlyZCB0aGUgcmVzb3VyY2UgdHlwZVxuICogKGFmdGVyIGNvbnZlcnRpbmcgYm90aCBvZiB0aGVtIHRvIGxvd2VyY2FzZSkuXG4gKiBIb3dldmVyLCBzb21lIHJlc291cmNlIHR5cGVzIGJyZWFrIHRoaXMgc2ltcGxlIGNvbnZlbnRpb24sIGFuZCB3ZSBuZWVkIHRvIHNwZWNpYWwtY2FzZSB0aGVtLlxuICogVGhpcyBtYXAgaXMgZm9yIHN0b3JpbmcgdGhvc2UgY2FzZXMuXG4gKi9cbmNvbnN0IFJFU09VUkNFX1RZUEVfU1BFQ0lBTF9OQU1FUzoge1xuICBbdHlwZTogc3RyaW5nXTogeyByZXNvdXJjZVR5cGU6IHN0cmluZyB9O1xufSA9IHtcbiAgJ0FXUzo6RXZlbnRzOjpFdmVudEJ1cyc6IHtcbiAgICByZXNvdXJjZVR5cGU6ICdldmVudC1idXMnLFxuICB9LFxufTtcblxuY29uc3QgUkVTT1VSQ0VfVFlQRV9BVFRSSUJVVEVTX0ZPUk1BVFM6IHtcbiAgW3R5cGU6IHN0cmluZ106IHsgW2F0dHJpYnV0ZTogc3RyaW5nXTogKHBhcnRzOiBBcm5QYXJ0cykgPT4gc3RyaW5nIH07XG59ID0ge1xuICAnQVdTOjpJQU06OlJvbGUnOiB7IEFybjogaWFtQXJuRm10IH0sXG4gICdBV1M6OklBTTo6VXNlcic6IHsgQXJuOiBpYW1Bcm5GbXQgfSxcbiAgJ0FXUzo6SUFNOjpHcm91cCc6IHsgQXJuOiBpYW1Bcm5GbXQgfSxcbiAgJ0FXUzo6UzM6OkJ1Y2tldCc6IHsgQXJuOiBzM0FybkZtdCB9LFxuICAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJzogeyBBcm46IHN0ZENvbG9uUmVzb3VyY2VBcm5GbXQgfSxcbiAgJ0FXUzo6RXZlbnRzOjpFdmVudEJ1cyc6IHtcbiAgICBBcm46IHN0ZFNsYXNoUmVzb3VyY2VBcm5GbXQsXG4gICAgLy8gdGhlIG5hbWUgYXR0cmlidXRlIG9mIHRoZSBFdmVudEJ1cyBpcyB0aGUgc2FtZSBhcyB0aGUgUmVmXG4gICAgTmFtZTogKHBhcnRzKSA9PiBwYXJ0cy5yZXNvdXJjZU5hbWUsXG4gIH0sXG4gICdBV1M6OkR5bmFtb0RCOjpUYWJsZSc6IHsgQXJuOiBzdGRTbGFzaFJlc291cmNlQXJuRm10IH0sXG4gICdBV1M6OkFwcFN5bmM6OkdyYXBoUUxBcGknOiB7IEFwaUlkOiBhcHBzeW5jR3JhcGhRbEFwaUFwaUlkRm10IH0sXG4gICdBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvbic6IHtcbiAgICBGdW5jdGlvbklkOiBhcHBzeW5jR3JhcGhRbEZ1bmN0aW9uSURGbXQsXG4gIH0sXG4gICdBV1M6OkFwcFN5bmM6OkRhdGFTb3VyY2UnOiB7IE5hbWU6IGFwcHN5bmNHcmFwaFFsRGF0YVNvdXJjZU5hbWVGbXQgfSxcbiAgJ0FXUzo6S01TOjpLZXknOiB7IEFybjogc3RkU2xhc2hSZXNvdXJjZUFybkZtdCB9LFxufTtcblxuZnVuY3Rpb24gaWFtQXJuRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIHdlIHNraXAgcmVnaW9uIGZvciBJQU0gcmVzb3VyY2VzXG4gIHJldHVybiBgYXJuOiR7cGFydHMucGFydGl0aW9ufToke3BhcnRzLnNlcnZpY2V9Ojoke3BhcnRzLmFjY291bnR9OiR7cGFydHMucmVzb3VyY2VUeXBlfS8ke3BhcnRzLnJlc291cmNlTmFtZX1gO1xufVxuXG5mdW5jdGlvbiBzM0FybkZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyB3ZSBza2lwIGFjY291bnQsIHJlZ2lvbiBhbmQgcmVzb3VyY2VUeXBlIGZvciBTMyByZXNvdXJjZXNcbiAgcmV0dXJuIGBhcm46JHtwYXJ0cy5wYXJ0aXRpb259OiR7cGFydHMuc2VydmljZX06Ojoke3BhcnRzLnJlc291cmNlTmFtZX1gO1xufVxuXG5mdW5jdGlvbiBzdGRDb2xvblJlc291cmNlQXJuRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIHRoaXMgaXMgYSBzdGFuZGFyZCBmb3JtYXQgZm9yIEFSTnMgbGlrZTogYXJuOmF3czpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50OnJlc291cmNlVHlwZTpyZXNvdXJjZU5hbWVcbiAgcmV0dXJuIGBhcm46JHtwYXJ0cy5wYXJ0aXRpb259OiR7cGFydHMuc2VydmljZX06JHtwYXJ0cy5yZWdpb259OiR7cGFydHMuYWNjb3VudH06JHtwYXJ0cy5yZXNvdXJjZVR5cGV9OiR7cGFydHMucmVzb3VyY2VOYW1lfWA7XG59XG5cbmZ1bmN0aW9uIHN0ZFNsYXNoUmVzb3VyY2VBcm5GbXQocGFydHM6IEFyblBhcnRzKTogc3RyaW5nIHtcbiAgLy8gdGhpcyBpcyBhIHN0YW5kYXJkIGZvcm1hdCBmb3IgQVJOcyBsaWtlOiBhcm46YXdzOnNlcnZpY2U6cmVnaW9uOmFjY291bnQ6cmVzb3VyY2VUeXBlL3Jlc291cmNlTmFtZVxuICByZXR1cm4gYGFybjoke3BhcnRzLnBhcnRpdGlvbn06JHtwYXJ0cy5zZXJ2aWNlfToke3BhcnRzLnJlZ2lvbn06JHtwYXJ0cy5hY2NvdW50fToke3BhcnRzLnJlc291cmNlVHlwZX0vJHtwYXJ0cy5yZXNvdXJjZU5hbWV9YDtcbn1cblxuZnVuY3Rpb24gYXBwc3luY0dyYXBoUWxBcGlBcGlJZEZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyBhcm46YXdzOmFwcHN5bmM6dXMtZWFzdC0xOjExMTExMTExMTExMTphcGlzLzxhcGlJZD5cbiAgcmV0dXJuIHBhcnRzLnJlc291cmNlTmFtZS5zcGxpdCgnLycpWzFdO1xufVxuXG5mdW5jdGlvbiBhcHBzeW5jR3JhcGhRbEZ1bmN0aW9uSURGbXQocGFydHM6IEFyblBhcnRzKTogc3RyaW5nIHtcbiAgLy8gYXJuOmF3czphcHBzeW5jOnVzLWVhc3QtMToxMTExMTExMTExMTE6YXBpcy88YXBpSWQ+L2Z1bmN0aW9ucy88ZnVuY3Rpb25JZD5cbiAgcmV0dXJuIHBhcnRzLnJlc291cmNlTmFtZS5zcGxpdCgnLycpWzNdO1xufVxuXG5mdW5jdGlvbiBhcHBzeW5jR3JhcGhRbERhdGFTb3VyY2VOYW1lRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIGFybjphd3M6YXBwc3luYzp1cy1lYXN0LTE6MTExMTExMTExMTExOmFwaXMvPGFwaUlkPi9kYXRhc291cmNlcy88bmFtZT5cbiAgcmV0dXJuIHBhcnRzLnJlc291cmNlTmFtZS5zcGxpdCgnLycpWzNdO1xufVxuXG5pbnRlcmZhY2UgSW50cmluc2ljIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhcmdzOiBhbnk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFzeW5jR2xvYmFsUmVwbGFjZShzdHI6IHN0cmluZywgcmVnZXg6IFJlZ0V4cCwgY2I6ICh4OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghcmVnZXguZ2xvYmFsKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignUmVnZXggbXVzdCBiZSBjcmVhdGVkIHdpdGggL2cgZmxhZycpO1xuICB9XG5cbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXQucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaC5pbmRleCkpO1xuICAgIHJldC5wdXNoKGF3YWl0IGNiKG1hdGNoWzFdKSk7XG5cbiAgICBzdGFydCA9IHJlZ2V4Lmxhc3RJbmRleDtcbiAgfVxuICByZXQucHVzaChzdHIuc2xpY2Uoc3RhcnQpKTtcblxuICByZXR1cm4gcmV0LmpvaW4oJycpO1xufVxuIl19
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSx5SEFBcUg7QUFFckgsNENBQWdEO0FBTWhELE1BQWEsc0JBQXNCO0lBR2pDLFlBQ21CLEdBQVEsRUFDUixTQUFpQjtRQURqQixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ1IsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUVwQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNqRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFqQkQsd0RBaUJDO0FBTUQsTUFBYSxpQkFBa0IsU0FBUSxLQUFLO0NBQzNDO0FBREQsOENBQ0M7QUFFRCxNQUFhLGdCQUFnQjtJQUczQixZQUE2QixHQUFRO1FBQVIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUY3QixrQkFBYSxHQUErQixFQUFFLENBQUM7SUFHdkQsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksS0FBSyxFQUFFLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FB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IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IEV4cG9ydCwgTGlzdEV4cG9ydHNDb21tYW5kT3V0cHV0LCBTdGFja1Jlc291cmNlU3VtbWFyeSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IFNESyB9IGZyb20gJy4vYXdzLWF1dGgnO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9IGZyb20gJy4vZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgcmVzb3VyY2VNZXRhZGF0YSB9IGZyb20gJy4uLy4uLy4uL0Bhd3MtY2RrL3RtcC10b29sa2l0LWhlbHBlcnMvc3JjL2FwaS9yZXNvdXJjZS1tZXRhZGF0YS9yZXNvdXJjZS1tZXRhZGF0YSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi8uLi9AYXdzLWNkay90bXAtdG9vbGtpdC1oZWxwZXJzL3NyYy9hcGkvcmVzb3VyY2UtbWV0YWRhdGEvcmVzb3VyY2UtbWV0YWRhdGEnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC9lcnJvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFN0YWNrUmVzb3VyY2VzIHtcbiAgbGlzdFN0YWNrUmVzb3VyY2VzKCk6IFByb21pc2U8U3RhY2tSZXNvdXJjZVN1bW1hcnlbXT47XG59XG5cbmV4cG9ydCBjbGFzcyBMYXp5TGlzdFN0YWNrUmVzb3VyY2VzIGltcGxlbWVudHMgTGlzdFN0YWNrUmVzb3VyY2VzIHtcbiAgcHJpdmF0ZSBzdGFja1Jlc291cmNlczogUHJvbWlzZTxTdGFja1Jlc291cmNlU3VtbWFyeVtdPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNkazogU0RLLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RTdGFja1Jlc291cmNlcygpOiBQcm9taXNlPFN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+IHtcbiAgICBpZiAodGhpcy5zdGFja1Jlc291cmNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YWNrUmVzb3VyY2VzID0gdGhpcy5zZGsuY2xvdWRGb3JtYXRpb24oKS5saXN0U3RhY2tSZXNvdXJjZXMoe1xuICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YWNrUmVzb3VyY2VzO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwRXhwb3J0IHtcbiAgbG9va3VwRXhwb3J0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8RXhwb3J0IHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IGNsYXNzIExvb2t1cEV4cG9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5leHBvcnQgY2xhc3MgTGF6eUxvb2t1cEV4cG9ydCBpbXBsZW1lbnRzIExvb2t1cEV4cG9ydCB7XG4gIHByaXZhdGUgY2FjaGVkRXhwb3J0czogeyBbbmFtZTogc3RyaW5nXTogRXhwb3J0IH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHNkazogU0RLKSB7XG4gIH1cblxuICBhc3luYyBsb29rdXBFeHBvcnQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxFeHBvcnQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy5jYWNoZWRFeHBvcnRzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZWRFeHBvcnRzW25hbWVdO1xuICAgIH1cblxuICAgIGZvciBhd2FpdCAoY29uc3QgY2ZuRXhwb3J0IG9mIHRoaXMubGlzdEV4cG9ydHMoKSkge1xuICAgICAgaWYgKCFjZm5FeHBvcnQuTmFtZSkge1xuICAgICAgICBjb250aW51ZTsgLy8gaWdub3JlIGFueSByZXN1bHQgdGhhdCBvbWl0cyBhIG5hbWVcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FjaGVkRXhwb3J0c1tjZm5FeHBvcnQuTmFtZV0gPSBjZm5FeHBvcnQ7XG5cbiAgICAgIGlmIChjZm5FeHBvcnQuTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gY2ZuRXhwb3J0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGV4cG9ydCBub3QgZm91bmRcbiAgfVxuXG4gIC8vIFRPRE86IFBhZ2luYXRlXG4gIHByaXZhdGUgYXN5bmMgKmxpc3RFeHBvcnRzKCkge1xuICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dCA9IGF3YWl0IHRoaXMuc2RrLmNsb3VkRm9ybWF0aW9uKCkubGlzdEV4cG9ydHMoeyBOZXh0VG9rZW46IG5leHRUb2tlbiB9KTtcbiAgICAgIGZvciAoY29uc3QgY2ZuRXhwb3J0IG9mIHJlc3BvbnNlLkV4cG9ydHMgPz8gW10pIHtcbiAgICAgICAgeWllbGQgY2ZuRXhwb3J0O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLk5leHRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBuZXh0VG9rZW4gPSByZXNwb25zZS5OZXh0VG9rZW47XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlRGVmaW5pdGlvbiB7XG4gIHJlYWRvbmx5IExvZ2ljYWxJZDogc3RyaW5nO1xuICByZWFkb25seSBUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IFByb3BlcnRpZXM6IHsgW3A6IHN0cmluZ106IGFueSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZVByb3BzIHtcbiAgcmVhZG9ubHkgc3RhY2tBcnRpZmFjdDogQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICByZWFkb25seSBzdGFja05hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogVGVtcGxhdGU7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgc2RrOiBTREs7XG4gIHJlYWRvbmx5IG5lc3RlZFN0YWNrcz86IHtcbiAgICBbbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrQXJ0aWZhY3Q6IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZTogVGVtcGxhdGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogeyBbazogc3RyaW5nXTogYW55IH07XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNkazogU0RLO1xuICBwcml2YXRlIHJlYWRvbmx5IG5lc3RlZFN0YWNrczoge1xuICAgIFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXM7XG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tSZXNvdXJjZXM6IExpc3RTdGFja1Jlc291cmNlcztcbiAgcHJpdmF0ZSByZWFkb25seSBsb29rdXBFeHBvcnQ6IExvb2t1cEV4cG9ydDtcblxuICBwcml2YXRlIGNhY2hlZFVybFN1ZmZpeDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGVQcm9wcykge1xuICAgIHRoaXMuc3RhY2tBcnRpZmFjdCA9IHByb3BzLnN0YWNrQXJ0aWZhY3Q7XG4gICAgdGhpcy5zdGFja05hbWUgPSBwcm9wcy5zdGFja05hbWUgPz8gcHJvcHMuc3RhY2tBcnRpZmFjdC5zdGFja05hbWU7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IHByb3BzLnRlbXBsYXRlID8/IHByb3BzLnN0YWNrQXJ0aWZhY3QudGVtcGxhdGU7XG4gICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgJ0FXUzo6QWNjb3VudElkJzogcHJvcHMuYWNjb3VudCxcbiAgICAgICdBV1M6OlJlZ2lvbic6IHByb3BzLnJlZ2lvbixcbiAgICAgICdBV1M6OlBhcnRpdGlvbic6IHByb3BzLnBhcnRpdGlvbixcbiAgICAgIC4uLnByb3BzLnBhcmFtZXRlcnMsXG4gICAgfTtcbiAgICB0aGlzLmFjY291bnQgPSBwcm9wcy5hY2NvdW50O1xuICAgIHRoaXMucmVnaW9uID0gcHJvcHMucmVnaW9uO1xuICAgIHRoaXMucGFydGl0aW9uID0gcHJvcHMucGFydGl0aW9uO1xuICAgIHRoaXMuc2RrID0gcHJvcHMuc2RrO1xuXG4gICAgLy8gV2UgbmVlZCBuYW1lcyBvZiBuZXN0ZWQgc3RhY2sgc28gd2UgY2FuIGV2YWx1YXRlIGNyb3NzIHN0YWNrIHJlZmVyZW5jZXNcbiAgICB0aGlzLm5lc3RlZFN0YWNrcyA9IHByb3BzLm5lc3RlZFN0YWNrcyA/PyB7fTtcblxuICAgIC8vIFRoZSBjdXJyZW50IHJlc291cmNlcyBvZiB0aGUgU3RhY2suXG4gICAgLy8gV2UgbmVlZCB0aGVtIHRvIGZpZ3VyZSBvdXQgdGhlIHBoeXNpY2FsIG5hbWUgb2YgYSByZXNvdXJjZSBpbiBjYXNlIGl0IHdhc24ndCBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG4gICAgLy8gV2UgZmV0Y2ggaXQgbGF6aWx5LCB0byBzYXZlIGEgc2VydmljZSBjYWxsLCBpbiBjYXNlIGFsbCBob3Rzd2FwcGVkIHJlc291cmNlcyBoYXZlIHRoZWlyIHBoeXNpY2FsIG5hbWVzIHNldC5cbiAgICB0aGlzLnN0YWNrUmVzb3VyY2VzID0gbmV3IExhenlMaXN0U3RhY2tSZXNvdXJjZXModGhpcy5zZGssIHRoaXMuc3RhY2tOYW1lKTtcblxuICAgIC8vIENsb3VkRm9ybWF0aW9uIEV4cG9ydHMgbG9va3VwIHRvIGJlIGFibGUgdG8gcmVzb2x2ZSBGbjo6SW1wb3J0VmFsdWUgaW50cmluc2ljcyBpbiB0ZW1wbGF0ZVxuICAgIHRoaXMubG9va3VwRXhwb3J0ID0gbmV3IExhenlMb29rdXBFeHBvcnQodGhpcy5zZGspO1xuICB9XG5cbiAgLy8gY2xvbmVzIGN1cnJlbnQgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIG9iamVjdCwgYnV0IHVwZGF0ZXMgdGhlIHN0YWNrIG5hbWVcbiAgcHVibGljIGFzeW5jIGNyZWF0ZU5lc3RlZEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZShcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBuZXN0ZWRUZW1wbGF0ZTogVGVtcGxhdGUsXG4gICAgbmVzdGVkU3RhY2tQYXJhbWV0ZXJzOiB7IFtwYXJhbWV0ZXJOYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgKSB7XG4gICAgY29uc3QgZXZhbHVhdGVkUGFyYW1zID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUNmbkV4cHJlc3Npb24obmVzdGVkU3RhY2tQYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gbmV3IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSh7XG4gICAgICBzdGFja0FydGlmYWN0OiB0aGlzLnN0YWNrQXJ0aWZhY3QsXG4gICAgICBzdGFja05hbWUsXG4gICAgICB0ZW1wbGF0ZTogbmVzdGVkVGVtcGxhdGUsXG4gICAgICBwYXJhbWV0ZXJzOiBldmFsdWF0ZWRQYXJhbXMsXG4gICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgcGFydGl0aW9uOiB0aGlzLnBhcnRpdGlvbixcbiAgICAgIHNkazogdGhpcy5zZGssXG4gICAgICBuZXN0ZWRTdGFja3M6IHRoaXMubmVzdGVkU3RhY2tzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVzdGFibGlzaFJlc291cmNlUGh5c2ljYWxOYW1lKFxuICAgIGxvZ2ljYWxJZDogc3RyaW5nLFxuICAgIHBoeXNpY2FsTmFtZUluQ2ZuVGVtcGxhdGU6IGFueSxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAocGh5c2ljYWxOYW1lSW5DZm5UZW1wbGF0ZSAhPSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ldmFsdWF0ZUNmbkV4cHJlc3Npb24ocGh5c2ljYWxOYW1lSW5DZm5UZW1wbGF0ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElmIHdlIGNhbid0IGV2YWx1YXRlIHRoZSByZXNvdXJjZSdzIG5hbWUgQ2xvdWRGb3JtYXRpb24gZXhwcmVzc2lvbixcbiAgICAgICAgLy8ganVzdCBsb29rIGl0IHVwIGluIHRoZSBjdXJyZW50bHkgZGVwbG95ZWQgU3RhY2tcbiAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIENmbkV2YWx1YXRpb25FeGNlcHRpb24pKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5kUGh5c2ljYWxOYW1lRm9yKGxvZ2ljYWxJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmluZFBoeXNpY2FsTmFtZUZvcihsb2dpY2FsSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qgc3RhY2tSZXNvdXJjZXMgPSBhd2FpdCB0aGlzLnN0YWNrUmVzb3VyY2VzLmxpc3RTdGFja1Jlc291cmNlcygpO1xuICAgIHJldHVybiBzdGFja1Jlc291cmNlcy5maW5kKChzcikgPT4gc3IuTG9naWNhbFJlc291cmNlSWQgPT09IGxvZ2ljYWxJZCk/LlBoeXNpY2FsUmVzb3VyY2VJZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaW5kTG9naWNhbElkRm9yUGh5c2ljYWxOYW1lKHBoeXNpY2FsTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IGF3YWl0IHRoaXMuc3RhY2tSZXNvdXJjZXMubGlzdFN0YWNrUmVzb3VyY2VzKCk7XG4gICAgcmV0dXJuIHN0YWNrUmVzb3VyY2VzLmZpbmQoKHNyKSA9PiBzci5QaHlzaWNhbFJlc291cmNlSWQgPT09IHBoeXNpY2FsTmFtZSk/LkxvZ2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgcHVibGljIGZpbmRSZWZlcmVuY2VzVG8obG9naWNhbElkOiBzdHJpbmcpOiBBcnJheTxSZXNvdXJjZURlZmluaXRpb24+IHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8UmVzb3VyY2VEZWZpbml0aW9uPigpO1xuICAgIGZvciAoY29uc3QgW3Jlc291cmNlTG9naWNhbElkLCByZXNvdXJjZURlZl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy50ZW1wbGF0ZT8uUmVzb3VyY2VzID8/IHt9KSkge1xuICAgICAgaWYgKGxvZ2ljYWxJZCAhPT0gcmVzb3VyY2VMb2dpY2FsSWQgJiYgdGhpcy5yZWZlcmVuY2VzKGxvZ2ljYWxJZCwgcmVzb3VyY2VEZWYpKSB7XG4gICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAuLi4ocmVzb3VyY2VEZWYgYXMgYW55KSxcbiAgICAgICAgICBMb2dpY2FsSWQ6IHJlc291cmNlTG9naWNhbElkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZUNmbkV4cHJlc3Npb24oY2ZuRXhwcmVzc2lvbjogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZXMgQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljIGZ1bmN0aW9uc1xuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHN1cHBvcnRlZCBpbnRyaW5zaWMgZnVuY3Rpb25zIGFyZSBkb2N1bWVudGVkIGluIFJFQURNRS5tZCAtLSBwbGVhc2UgdXBkYXRlXG4gICAgICogbGlzdCBvZiBzdXBwb3J0ZWQgZnVuY3Rpb25zIHdoZW4gYWRkaW5nIG5ldyBldmFsdWF0aW9uc1xuICAgICAqXG4gICAgICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9pbnRyaW5zaWMtZnVuY3Rpb24tcmVmZXJlbmNlLmh0bWxcbiAgICAgKi9cbiAgICBjbGFzcyBDZm5JbnRyaW5zaWNzIHtcbiAgICAgIHB1YmxpYyBldmFsdWF0ZUludHJpbnNpYyhpbnRyaW5zaWM6IEludHJpbnNpYyk6IGFueSB7XG4gICAgICAgIGNvbnN0IGludHJpbnNpY0Z1bmMgPSAodGhpcyBhcyBhbnkpW2ludHJpbnNpYy5uYW1lXTtcbiAgICAgICAgaWYgKCFpbnRyaW5zaWNGdW5jKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYENsb3VkRm9ybWF0aW9uIGZ1bmN0aW9uICR7aW50cmluc2ljLm5hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3NBc0FycmF5ID0gQXJyYXkuaXNBcnJheShpbnRyaW5zaWMuYXJncykgPyBpbnRyaW5zaWMuYXJncyA6IFtpbnRyaW5zaWMuYXJnc107XG5cbiAgICAgICAgcmV0dXJuIGludHJpbnNpY0Z1bmMuYXBwbHkodGhpcywgYXJnc0FzQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OkpvaW4nKHNlcGFyYXRvcjogc3RyaW5nLCBhcmdzOiBhbnlbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEFyZ3MgPSBhd2FpdCBzZWxmLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihhcmdzKTtcbiAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3Muam9pbihzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OlNwbGl0JyhzZXBhcmF0b3I6IHN0cmluZywgYXJnczogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkQXJncyA9IGF3YWl0IHNlbGYuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGFyZ3MpO1xuICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJncy5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OlNlbGVjdCcoaW5kZXg6IG51bWJlciwgYXJnczogYW55W10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBldmFsdWF0ZWRBcmdzID0gYXdhaXQgc2VsZi5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oYXJncyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZWRBcmdzW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgYXN5bmMgUmVmKGxvZ2ljYWxJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVmVGFyZ2V0ID0gYXdhaXQgc2VsZi5maW5kUmVmVGFyZ2V0KGxvZ2ljYWxJZCk7XG4gICAgICAgIGlmIChyZWZUYXJnZXQpIHtcbiAgICAgICAgICByZXR1cm4gcmVmVGFyZ2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKGBQYXJhbWV0ZXIgb3IgcmVzb3VyY2UgJyR7bG9naWNhbElkfScgY291bGQgbm90IGJlIGZvdW5kIGZvciBldmFsdWF0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXN5bmMgJ0ZuOjpHZXRBdHQnKGxvZ2ljYWxJZDogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICAvLyBUb0RvIGhhbmRsZSB0aGUgJ2xvZ2ljYWxJZC5hdHRyaWJ1dGVOYW1lJyBmb3JtIG9mIEZuOjpHZXRBdHRcbiAgICAgICAgY29uc3QgYXR0clZhbHVlID0gYXdhaXQgc2VsZi5maW5kR2V0QXR0VGFyZ2V0KGxvZ2ljYWxJZCwgYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIGlmIChhdHRyVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gYXR0clZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKFxuICAgICAgICAgICAgYEF0dHJpYnV0ZSAnJHthdHRyaWJ1dGVOYW1lfScgb2YgcmVzb3VyY2UgJyR7bG9naWNhbElkfScgY291bGQgbm90IGJlIGZvdW5kIGZvciBldmFsdWF0aW9uYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzeW5jICdGbjo6U3ViJyh0ZW1wbGF0ZTogc3RyaW5nLCBleHBsaWNpdFBsYWNlaG9sZGVycz86IHsgW3ZhcmlhYmxlOiBzdHJpbmddOiBzdHJpbmcgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IGV4cGxpY2l0UGxhY2Vob2xkZXJzID8gYXdhaXQgc2VsZi5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oZXhwbGljaXRQbGFjZWhvbGRlcnMpIDoge307XG5cbiAgICAgICAgcmV0dXJuIGFzeW5jR2xvYmFsUmVwbGFjZSh0ZW1wbGF0ZSwgL1xcJHsoW159XSopfS9nLCAoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGtleSBpbiBwbGFjZWhvbGRlcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlcnNba2V5XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRLZXkgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHJldHVybiBzcGxpdEtleS5sZW5ndGggPT09IDEgPyB0aGlzLlJlZihrZXkpIDogdGhpc1snRm46OkdldEF0dCddKHNwbGl0S2V5WzBdLCBzcGxpdEtleS5zbGljZSgxKS5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGFzeW5jICdGbjo6SW1wb3J0VmFsdWUnKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGV4cG9ydGVkID0gYXdhaXQgc2VsZi5sb29rdXBFeHBvcnQubG9va3VwRXhwb3J0KG5hbWUpO1xuICAgICAgICBpZiAoIWV4cG9ydGVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYEV4cG9ydCAnJHtuYW1lfScgY291bGQgbm90IGJlIGZvdW5kIGZvciBldmFsdWF0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleHBvcnRlZC5WYWx1ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKGBFeHBvcnQgJyR7bmFtZX0nIGV4aXN0cyB3aXRob3V0IGEgdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwb3J0ZWQuVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNmbkV4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNmbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2ZuRXhwcmVzc2lvbikpIHtcbiAgICAgIC8vIFNtYWxsIGFycmF5cyBpbiBwcmFjdGljZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2ZuRXhwcmVzc2lvbi5tYXAoKGV4cHIpID0+IHRoaXMuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGV4cHIpKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjZm5FeHByZXNzaW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgaW50cmluc2ljID0gdGhpcy5wYXJzZUludHJpbnNpYyhjZm5FeHByZXNzaW9uKTtcbiAgICAgIGlmIChpbnRyaW5zaWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDZm5JbnRyaW5zaWNzKCkuZXZhbHVhdGVJbnRyaW5zaWMoaW50cmluc2ljKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJldDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoY2ZuRXhwcmVzc2lvbikpIHtcbiAgICAgICAgICByZXRba2V5XSA9IGF3YWl0IHRoaXMuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2ZuRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXNvdXJjZVByb3BlcnR5KGxvZ2ljYWxJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuUmVzb3VyY2VzPy5bbG9naWNhbElkXT8uUHJvcGVydGllcz8uW3Byb3BlcnR5TmFtZV07XG4gIH1cblxuICBwdWJsaWMgbWV0YWRhdGFGb3IobG9naWNhbElkOiBzdHJpbmcpOiBSZXNvdXJjZU1ldGFkYXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcmVzb3VyY2VNZXRhZGF0YSh0aGlzLnN0YWNrQXJ0aWZhY3QsIGxvZ2ljYWxJZCk7XG4gIH1cblxuICBwcml2YXRlIHJlZmVyZW5jZXMobG9naWNhbElkOiBzdHJpbmcsIHRlbXBsYXRlRWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZUVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbG9naWNhbElkID09PSB0ZW1wbGF0ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlRWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5zb21lKChlbCkgPT4gdGhpcy5yZWZlcmVuY2VzKGxvZ2ljYWxJZCwgZWwpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRlbXBsYXRlRWxlbWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRlbXBsYXRlRWxlbWVudCkuc29tZSgoZWwpID0+IHRoaXMucmVmZXJlbmNlcyhsb2dpY2FsSWQsIGVsKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUludHJpbnNpYyh4OiBhbnkpOiBJbnRyaW5zaWMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh4KTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEgJiYgKGtleXNbMF0uc3RhcnRzV2l0aCgnRm46OicpIHx8IGtleXNbMF0gPT09ICdSZWYnKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZToga2V5c1swXSxcbiAgICAgICAgYXJnczogeFtrZXlzWzBdXSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRSZWZUYXJnZXQobG9naWNhbElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIGZpcnN0LCBjaGVjayB0byBzZWUgaWYgdGhlIFJlZiBpcyBhIFBhcmFtZXRlciB3aG8ncyB2YWx1ZSB3ZSBoYXZlXG4gICAgaWYgKGxvZ2ljYWxJZCA9PT0gJ0FXUzo6VVJMU3VmZml4Jykge1xuICAgICAgaWYgKCF0aGlzLmNhY2hlZFVybFN1ZmZpeCkge1xuICAgICAgICB0aGlzLmNhY2hlZFVybFN1ZmZpeCA9IGF3YWl0IHRoaXMuc2RrLmdldFVybFN1ZmZpeCh0aGlzLnJlZ2lvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZFVybFN1ZmZpeDtcbiAgICB9XG5cbiAgICAvLyBUcnkgZmluZGluZyB0aGUgcmVmIGluIHRoZSBwYXNzZWQgaW4gcGFyYW1ldGVyc1xuICAgIGNvbnN0IHBhcmFtZXRlclRhcmdldCA9IHRoaXMuY29udGV4dFtsb2dpY2FsSWRdO1xuICAgIGlmIChwYXJhbWV0ZXJUYXJnZXQpIHtcbiAgICAgIHJldHVybiBwYXJhbWV0ZXJUYXJnZXQ7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IGluIHRoZSBwYXNzZWQgaW4gcGFyYW1ldGVycywgc2VlIGlmIHRoZXJlIGlzIGEgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIG5vdCBwYXNzZWQgaW5cbiAgICBjb25zdCBkZWZhdWx0UGFyYW1ldGVyVmFsdWUgPSB0aGlzLnRlbXBsYXRlLlBhcmFtZXRlcnM/Lltsb2dpY2FsSWRdPy5EZWZhdWx0O1xuICAgIGlmIChkZWZhdWx0UGFyYW1ldGVyVmFsdWUpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0UGFyYW1ldGVyVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBub3QgYSBQYXJhbWV0ZXIsIHdlIG5lZWQgdG8gc2VhcmNoIGluIHRoZSBjdXJyZW50IFN0YWNrIHJlc291cmNlc1xuICAgIHJldHVybiB0aGlzLmZpbmRHZXRBdHRUYXJnZXQobG9naWNhbElkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZEdldEF0dFRhcmdldChsb2dpY2FsSWQ6IHN0cmluZywgYXR0cmlidXRlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSB0aGUgYXR0cmlidXRlIGlzIHJlZmVyZW5jaW5nIGEgc3RhY2sgb3V0cHV0ICh1c2VkIGluIG5lc3RlZCBzdGFja3MgdG8gc2hhcmUgcGFyYW1ldGVycylcbiAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvcXVpY2tyZWYtY2xvdWRmb3JtYXRpb24uaHRtbCN3MmFiMWMxN2MyM2MxOWI1XG4gICAgaWYgKGxvZ2ljYWxJZCA9PT0gJ091dHB1dHMnICYmIGF0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHRoaXMudGVtcGxhdGUuT3V0cHV0c1thdHRyaWJ1dGVdPy5WYWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2tSZXNvdXJjZXMgPSBhd2FpdCB0aGlzLnN0YWNrUmVzb3VyY2VzLmxpc3RTdGFja1Jlc291cmNlcygpO1xuICAgIGNvbnN0IGZvdW5kUmVzb3VyY2UgPSBzdGFja1Jlc291cmNlcy5maW5kKChzcikgPT4gc3IuTG9naWNhbFJlc291cmNlSWQgPT09IGxvZ2ljYWxJZCk7XG4gICAgaWYgKCFmb3VuZFJlc291cmNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChmb3VuZFJlc291cmNlLlJlc291cmNlVHlwZSA9PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snICYmIGF0dHJpYnV0ZT8uc3RhcnRzV2l0aCgnT3V0cHV0cy4nKSkge1xuICAgICAgY29uc3QgZGVwZW5kYW50U3RhY2sgPSB0aGlzLmZpbmROZXN0ZWRTdGFjayhsb2dpY2FsSWQsIHRoaXMubmVzdGVkU3RhY2tzKTtcbiAgICAgIGlmICghZGVwZW5kYW50U3RhY2sgfHwgIWRlcGVuZGFudFN0YWNrLnBoeXNpY2FsTmFtZSkge1xuICAgICAgICAvLyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCBuZXN0ZWQgc3RhY2sgYW5kIGNhbm5vdCBiZSBob3Rzd2FwcGVkXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBldmFsdWF0ZUNmblRlbXBsYXRlID0gYXdhaXQgdGhpcy5jcmVhdGVOZXN0ZWRFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUoXG4gICAgICAgIGRlcGVuZGFudFN0YWNrLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgZGVwZW5kYW50U3RhY2suZ2VuZXJhdGVkVGVtcGxhdGUsXG4gICAgICAgIGRlcGVuZGFudFN0YWNrLmdlbmVyYXRlZFRlbXBsYXRlLlBhcmFtZXRlcnMhLFxuICAgICAgKTtcblxuICAgICAgLy8gU3BsaXQgT3V0cHV0cy48cmVmTmFtZT4gaW50byAnT3V0cHV0cycgYW5kICc8cmVmTmFtZT4nIGFuZCByZWN1cnNpdmVseSBjYWxsIGV2YWx1YXRlXG4gICAgICByZXR1cm4gZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICAgICAnRm46OkdldEF0dCc6IGF0dHJpYnV0ZS5zcGxpdCgvXFwuKC4qKS9zKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBub3csIHdlIG5lZWQgdG8gZm9ybWF0IHRoZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVyIGRlcGVuZGluZyBvbiB0aGUgcmVzb3VyY2UgdHlwZSxcbiAgICAvLyBhbmQgdGhlIHJlcXVlc3RlZCBhdHRyaWJ1dGUgbmFtZVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFJlc291cmNlQXR0cmlidXRlKGZvdW5kUmVzb3VyY2UsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROZXN0ZWRTdGFjayhcbiAgICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgICBuZXN0ZWRTdGFja3M6IHtcbiAgICAgIFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXM7XG4gICAgfSxcbiAgKTogTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgbmVzdGVkU3RhY2tMb2dpY2FsSWQgb2YgT2JqZWN0LmtleXMobmVzdGVkU3RhY2tzKSkge1xuICAgICAgaWYgKG5lc3RlZFN0YWNrTG9naWNhbElkID09PSBsb2dpY2FsSWQpIHtcbiAgICAgICAgcmV0dXJuIG5lc3RlZFN0YWNrc1tuZXN0ZWRTdGFja0xvZ2ljYWxJZF07XG4gICAgICB9XG4gICAgICBjb25zdCBjaGVja0luTmVzdGVkQ2hpbGRTdGFja3MgPSB0aGlzLmZpbmROZXN0ZWRTdGFjayhcbiAgICAgICAgbG9naWNhbElkLFxuICAgICAgICBuZXN0ZWRTdGFja3NbbmVzdGVkU3RhY2tMb2dpY2FsSWRdLm5lc3RlZFN0YWNrVGVtcGxhdGVzLFxuICAgICAgKTtcbiAgICAgIGlmIChjaGVja0luTmVzdGVkQ2hpbGRTdGFja3MpIHJldHVybiBjaGVja0luTmVzdGVkQ2hpbGRTdGFja3M7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFJlc291cmNlQXR0cmlidXRlKHJlc291cmNlOiBTdGFja1Jlc291cmNlU3VtbWFyeSwgYXR0cmlidXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBoeXNpY2FsSWQgPSByZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQ7XG5cbiAgICAvLyBubyBhdHRyaWJ1dGUgbWVhbnMgUmVmIGV4cHJlc3Npb24sIGZvciB3aGljaCB3ZSB1c2UgdGhlIHBoeXNpY2FsIElEIGRpcmVjdGx5XG4gICAgaWYgKCFhdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBwaHlzaWNhbElkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlVHlwZUZvcm1hdHMgPSBSRVNPVVJDRV9UWVBFX0FUVFJJQlVURVNfRk9STUFUU1tyZXNvdXJjZS5SZXNvdXJjZVR5cGUhXTtcbiAgICBpZiAoIXJlc291cmNlVHlwZUZvcm1hdHMpIHtcbiAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKFxuICAgICAgICBgV2UgZG9uJ3Qgc3VwcG9ydCBhdHRyaWJ1dGVzIG9mIHRoZSAnJHtyZXNvdXJjZS5SZXNvdXJjZVR5cGV9JyByZXNvdXJjZS4gVGhpcyBpcyBhIENESyBsaW1pdGF0aW9uLiBgICtcbiAgICAgICAgICAnUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlRm10RnVuYyA9IHJlc291cmNlVHlwZUZvcm1hdHNbYXR0cmlidXRlXTtcbiAgICBpZiAoIWF0dHJpYnV0ZUZtdEZ1bmMpIHtcbiAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKFxuICAgICAgICBgV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgJyR7YXR0cmlidXRlfScgYXR0cmlidXRlIG9mIHRoZSAnJHtyZXNvdXJjZS5SZXNvdXJjZVR5cGV9JyByZXNvdXJjZS4gVGhpcyBpcyBhIENESyBsaW1pdGF0aW9uLiBgICtcbiAgICAgICAgICAnUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuZ2V0U2VydmljZU9mUmVzb3VyY2UocmVzb3VyY2UpO1xuICAgIGNvbnN0IHJlc291cmNlVHlwZUFyblBhcnQgPSB0aGlzLmdldFJlc291cmNlVHlwZUFyblBhcnRPZlJlc291cmNlKHJlc291cmNlKTtcbiAgICByZXR1cm4gYXR0cmlidXRlRm10RnVuYyh7XG4gICAgICBwYXJ0aXRpb246IHRoaXMucGFydGl0aW9uLFxuICAgICAgc2VydmljZSxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlVHlwZUFyblBhcnQsXG4gICAgICByZXNvdXJjZU5hbWU6IHBoeXNpY2FsSWQhLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZXJ2aWNlT2ZSZXNvdXJjZShyZXNvdXJjZTogU3RhY2tSZXNvdXJjZVN1bW1hcnkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvdXJjZS5SZXNvdXJjZVR5cGUhLnNwbGl0KCc6OicpWzFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlc291cmNlVHlwZUFyblBhcnRPZlJlc291cmNlKHJlc291cmNlOiBTdGFja1Jlc291cmNlU3VtbWFyeSk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gcmVzb3VyY2UuUmVzb3VyY2VUeXBlITtcbiAgICBjb25zdCBzcGVjaWFsQ2FzZVJlc291cmNlVHlwZSA9IFJFU09VUkNFX1RZUEVfU1BFQ0lBTF9OQU1FU1tyZXNvdXJjZVR5cGVdPy5yZXNvdXJjZVR5cGU7XG4gICAgcmV0dXJuIHNwZWNpYWxDYXNlUmVzb3VyY2VUeXBlXG4gICAgICA/IHNwZWNpYWxDYXNlUmVzb3VyY2VUeXBlXG4gICAgICA6IC8vIHRoaXMgaXMgdGhlIGRlZmF1bHQgY2FzZVxuICAgICAgcmVzb3VyY2VUeXBlLnNwbGl0KCc6OicpWzJdLnRvTG93ZXJDYXNlKCk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVGVtcGxhdGUgPSB7IFtzZWN0aW9uOiBzdHJpbmddOiB7IFtoZWFkaW5nczogc3RyaW5nXTogYW55IH0gfTtcblxuaW50ZXJmYWNlIEFyblBhcnRzIHtcbiAgcmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzdWFsbHksIHdlIGRlZHVjZSB0aGUgbmFtZXMgb2YgdGhlIHNlcnZpY2UgYW5kIHRoZSByZXNvdXJjZSB0eXBlIHVzZWQgdG8gZm9ybWF0IHRoZSBBUk4gZnJvbSB0aGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZS5cbiAqIEZvciBhIENGTiB0eXBlIGxpa2UgQVdTOjpTZXJ2aWNlOjpSZXNvdXJjZVR5cGUsIHRoZSBzZWNvbmQgc2VnbWVudCBiZWNvbWVzIHRoZSBzZXJ2aWNlIG5hbWUsIGFuZCB0aGUgdGhpcmQgdGhlIHJlc291cmNlIHR5cGVcbiAqIChhZnRlciBjb252ZXJ0aW5nIGJvdGggb2YgdGhlbSB0byBsb3dlcmNhc2UpLlxuICogSG93ZXZlciwgc29tZSByZXNvdXJjZSB0eXBlcyBicmVhayB0aGlzIHNpbXBsZSBjb252ZW50aW9uLCBhbmQgd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhlbS5cbiAqIFRoaXMgbWFwIGlzIGZvciBzdG9yaW5nIHRob3NlIGNhc2VzLlxuICovXG5jb25zdCBSRVNPVVJDRV9UWVBFX1NQRUNJQUxfTkFNRVM6IHtcbiAgW3R5cGU6IHN0cmluZ106IHsgcmVzb3VyY2VUeXBlOiBzdHJpbmcgfTtcbn0gPSB7XG4gICdBV1M6OkV2ZW50czo6RXZlbnRCdXMnOiB7XG4gICAgcmVzb3VyY2VUeXBlOiAnZXZlbnQtYnVzJyxcbiAgfSxcbn07XG5cbmNvbnN0IFJFU09VUkNFX1RZUEVfQVRUUklCVVRFU19GT1JNQVRTOiB7XG4gIFt0eXBlOiBzdHJpbmddOiB7IFthdHRyaWJ1dGU6IHN0cmluZ106IChwYXJ0czogQXJuUGFydHMpID0+IHN0cmluZyB9O1xufSA9IHtcbiAgJ0FXUzo6SUFNOjpSb2xlJzogeyBBcm46IGlhbUFybkZtdCB9LFxuICAnQVdTOjpJQU06OlVzZXInOiB7IEFybjogaWFtQXJuRm10IH0sXG4gICdBV1M6OklBTTo6R3JvdXAnOiB7IEFybjogaWFtQXJuRm10IH0sXG4gICdBV1M6OlMzOjpCdWNrZXQnOiB7IEFybjogczNBcm5GbXQgfSxcbiAgJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbic6IHsgQXJuOiBzdGRDb2xvblJlc291cmNlQXJuRm10IH0sXG4gICdBV1M6OkV2ZW50czo6RXZlbnRCdXMnOiB7XG4gICAgQXJuOiBzdGRTbGFzaFJlc291cmNlQXJuRm10LFxuICAgIC8vIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgRXZlbnRCdXMgaXMgdGhlIHNhbWUgYXMgdGhlIFJlZlxuICAgIE5hbWU6IChwYXJ0cykgPT4gcGFydHMucmVzb3VyY2VOYW1lLFxuICB9LFxuICAnQVdTOjpEeW5hbW9EQjo6VGFibGUnOiB7IEFybjogc3RkU2xhc2hSZXNvdXJjZUFybkZtdCB9LFxuICAnQVdTOjpBcHBTeW5jOjpHcmFwaFFMQXBpJzogeyBBcGlJZDogYXBwc3luY0dyYXBoUWxBcGlBcGlJZEZtdCB9LFxuICAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nOiB7XG4gICAgRnVuY3Rpb25JZDogYXBwc3luY0dyYXBoUWxGdW5jdGlvbklERm10LFxuICB9LFxuICAnQVdTOjpBcHBTeW5jOjpEYXRhU291cmNlJzogeyBOYW1lOiBhcHBzeW5jR3JhcGhRbERhdGFTb3VyY2VOYW1lRm10IH0sXG4gICdBV1M6OktNUzo6S2V5JzogeyBBcm46IHN0ZFNsYXNoUmVzb3VyY2VBcm5GbXQgfSxcbn07XG5cbmZ1bmN0aW9uIGlhbUFybkZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyB3ZSBza2lwIHJlZ2lvbiBmb3IgSUFNIHJlc291cmNlc1xuICByZXR1cm4gYGFybjoke3BhcnRzLnBhcnRpdGlvbn06JHtwYXJ0cy5zZXJ2aWNlfTo6JHtwYXJ0cy5hY2NvdW50fToke3BhcnRzLnJlc291cmNlVHlwZX0vJHtwYXJ0cy5yZXNvdXJjZU5hbWV9YDtcbn1cblxuZnVuY3Rpb24gczNBcm5GbXQocGFydHM6IEFyblBhcnRzKTogc3RyaW5nIHtcbiAgLy8gd2Ugc2tpcCBhY2NvdW50LCByZWdpb24gYW5kIHJlc291cmNlVHlwZSBmb3IgUzMgcmVzb3VyY2VzXG4gIHJldHVybiBgYXJuOiR7cGFydHMucGFydGl0aW9ufToke3BhcnRzLnNlcnZpY2V9Ojo6JHtwYXJ0cy5yZXNvdXJjZU5hbWV9YDtcbn1cblxuZnVuY3Rpb24gc3RkQ29sb25SZXNvdXJjZUFybkZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyB0aGlzIGlzIGEgc3RhbmRhcmQgZm9ybWF0IGZvciBBUk5zIGxpa2U6IGFybjphd3M6c2VydmljZTpyZWdpb246YWNjb3VudDpyZXNvdXJjZVR5cGU6cmVzb3VyY2VOYW1lXG4gIHJldHVybiBgYXJuOiR7cGFydHMucGFydGl0aW9ufToke3BhcnRzLnNlcnZpY2V9OiR7cGFydHMucmVnaW9ufToke3BhcnRzLmFjY291bnR9OiR7cGFydHMucmVzb3VyY2VUeXBlfToke3BhcnRzLnJlc291cmNlTmFtZX1gO1xufVxuXG5mdW5jdGlvbiBzdGRTbGFzaFJlc291cmNlQXJuRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIHRoaXMgaXMgYSBzdGFuZGFyZCBmb3JtYXQgZm9yIEFSTnMgbGlrZTogYXJuOmF3czpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50OnJlc291cmNlVHlwZS9yZXNvdXJjZU5hbWVcbiAgcmV0dXJuIGBhcm46JHtwYXJ0cy5wYXJ0aXRpb259OiR7cGFydHMuc2VydmljZX06JHtwYXJ0cy5yZWdpb259OiR7cGFydHMuYWNjb3VudH06JHtwYXJ0cy5yZXNvdXJjZVR5cGV9LyR7cGFydHMucmVzb3VyY2VOYW1lfWA7XG59XG5cbmZ1bmN0aW9uIGFwcHN5bmNHcmFwaFFsQXBpQXBpSWRGbXQocGFydHM6IEFyblBhcnRzKTogc3RyaW5nIHtcbiAgLy8gYXJuOmF3czphcHBzeW5jOnVzLWVhc3QtMToxMTExMTExMTExMTE6YXBpcy88YXBpSWQ+XG4gIHJldHVybiBwYXJ0cy5yZXNvdXJjZU5hbWUuc3BsaXQoJy8nKVsxXTtcbn1cblxuZnVuY3Rpb24gYXBwc3luY0dyYXBoUWxGdW5jdGlvbklERm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIGFybjphd3M6YXBwc3luYzp1cy1lYXN0LTE6MTExMTExMTExMTExOmFwaXMvPGFwaUlkPi9mdW5jdGlvbnMvPGZ1bmN0aW9uSWQ+XG4gIHJldHVybiBwYXJ0cy5yZXNvdXJjZU5hbWUuc3BsaXQoJy8nKVszXTtcbn1cblxuZnVuY3Rpb24gYXBwc3luY0dyYXBoUWxEYXRhU291cmNlTmFtZUZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyBhcm46YXdzOmFwcHN5bmM6dXMtZWFzdC0xOjExMTExMTExMTExMTphcGlzLzxhcGlJZD4vZGF0YXNvdXJjZXMvPG5hbWU+XG4gIHJldHVybiBwYXJ0cy5yZXNvdXJjZU5hbWUuc3BsaXQoJy8nKVszXTtcbn1cblxuaW50ZXJmYWNlIEludHJpbnNpYyB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJnczogYW55O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhc3luY0dsb2JhbFJlcGxhY2Uoc3RyOiBzdHJpbmcsIHJlZ2V4OiBSZWdFeHAsIGNiOiAoeDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXJlZ2V4Lmdsb2JhbCkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1JlZ2V4IG11c3QgYmUgY3JlYXRlZCB3aXRoIC9nIGZsYWcnKTtcbiAgfVxuXG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGxldCBzdGFydCA9IDA7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKHN0cik7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goc3RyLnN1YnN0cmluZyhzdGFydCwgbWF0Y2guaW5kZXgpKTtcbiAgICByZXQucHVzaChhd2FpdCBjYihtYXRjaFsxXSkpO1xuXG4gICAgc3RhcnQgPSByZWdleC5sYXN0SW5kZXg7XG4gIH1cbiAgcmV0LnB1c2goc3RyLnNsaWNlKHN0YXJ0KSk7XG5cbiAgcmV0dXJuIHJldC5qb2luKCcnKTtcbn1cbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as cxapi from '@aws-cdk/cx-api';
|
|
2
|
-
import { Tag } from '@aws-sdk/client-s3';
|
|
3
|
-
import { IS3Client, SDK, SdkProvider } from '../aws-auth';
|
|
1
|
+
import type * as cxapi from '@aws-cdk/cx-api';
|
|
2
|
+
import type { Tag } from '@aws-sdk/client-s3';
|
|
3
|
+
import type { IS3Client, SDK, SdkProvider } from '../aws-auth';
|
|
4
4
|
import { ActiveAssetCache, BackgroundStackRefresh } from './stack-refresh';
|
|
5
|
-
import { IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
|
|
5
|
+
import type { IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
|
|
6
6
|
export declare const S3_ISOLATED_TAG = "aws-cdk:isolated";
|
|
7
7
|
export declare const ECR_ISOLATED_TAG = "aws-cdk.isolated";
|
|
8
8
|
export type GcAsset = ImageAsset | ObjectAsset;
|