aws-cdk 2.10.0 → 2.11.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/CONTRIBUTING.md CHANGED
@@ -131,7 +131,7 @@ Its value can either be that of `CANDIDATE_VERSION` (for testing against the lat
131
131
 
132
132
  Following are the steps involved in running these tests:
133
133
 
134
- 1. Run [`./bump-candidate.sh`](../../bump-candidate.sh) to differentiate between the local version and the published version. For example, if the version in `lerna.json` is `1.67.0`, this script will result in a version `1.67.0-rc.0`. This is needed so that we can launch a verdaccio instance serving local tarballs without worrying about conflicts with the public npm uplink. This will help us avoid version quirks that might happen during the *post-release-pre-merge-back* time window.
134
+ 1. Run [`./bump-candidate.sh`](../../scripts/bump-candidate.sh) to differentiate between the local version and the published version. For example, if the version in `lerna.json` is `1.67.0`, this script will result in a version `1.67.0-rc.0`. This is needed so that we can launch a verdaccio instance serving local tarballs without worrying about conflicts with the public npm uplink. This will help us avoid version quirks that might happen during the *post-release-pre-merge-back* time window.
135
135
 
136
136
  2. Run [`./align-version.sh`](../../scripts/align-version.sh) to configure the above version in all our packages.
137
137
 
package/build-info.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "comment": "Generated at 2022-01-29T03:51:21Z by generate.sh",
3
- "commit": "e5b301f"
2
+ "comment": "Generated at 2022-02-08T14:37:59Z by generate.sh",
3
+ "commit": "f7148c5"
4
4
  }
@@ -196,10 +196,17 @@ export interface PreparedSdkForEnvironment {
196
196
  export declare class CloudFormationDeployments {
197
197
  private readonly sdkProvider;
198
198
  constructor(props: ProvisionerProps);
199
- readCurrentTemplate(stackArtifact: cxapi.CloudFormationStackArtifact): Promise<Template>;
199
+ readCurrentTemplateWithNestedStacks(rootStackArtifact: cxapi.CloudFormationStackArtifact): Promise<Template>;
200
+ readCurrentTemplate(stackArtifact: cxapi.CloudFormationStackArtifact, sdk?: ISDK): Promise<Template>;
200
201
  deployStack(options: DeployStackOptions): Promise<DeployStackResult>;
201
202
  destroyStack(options: DestroyStackOptions): Promise<void>;
202
203
  stackExists(options: StackExistsOptions): Promise<boolean>;
204
+ private prepareSdkWithLookupOrDeployRole;
205
+ private readCurrentStackTemplate;
206
+ private addNestedTemplatesToGeneratedAndDeployedStacks;
207
+ private getNestedStackTemplates;
208
+ private getNestedStackArn;
209
+ private isCdkManagedNestedStack;
203
210
  /**
204
211
  * Get the environment necessary for touching the given stack
205
212
  *
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CloudFormationDeployments = exports.prepareSdkWithLookupRoleFor = exports.replaceEnvPlaceholders = void 0;
4
+ const path = require("path");
4
5
  const cxapi = require("@aws-cdk/cx-api");
5
6
  const cdk_assets_1 = require("cdk-assets");
7
+ const fs = require("fs-extra");
6
8
  const logging_1 = require("../logging");
7
9
  const asset_publishing_1 = require("../util/asset-publishing");
8
10
  const aws_auth_1 = require("./aws-auth");
9
11
  const deploy_stack_1 = require("./deploy-stack");
12
+ const evaluate_cloudformation_template_1 = require("./evaluate-cloudformation-template");
10
13
  const toolkit_info_1 = require("./toolkit-info");
11
14
  const cloudformation_1 = require("./util/cloudformation");
12
15
  /**
@@ -97,23 +100,22 @@ class CloudFormationDeployments {
97
100
  constructor(props) {
98
101
  this.sdkProvider = props.sdkProvider;
99
102
  }
100
- async readCurrentTemplate(stackArtifact) {
103
+ async readCurrentTemplateWithNestedStacks(rootStackArtifact) {
104
+ const sdk = await this.prepareSdkWithLookupOrDeployRole(rootStackArtifact);
105
+ const deployedTemplate = await this.readCurrentTemplate(rootStackArtifact, sdk);
106
+ await this.addNestedTemplatesToGeneratedAndDeployedStacks(rootStackArtifact, sdk, {
107
+ generatedTemplate: rootStackArtifact.template,
108
+ deployedTemplate: deployedTemplate,
109
+ deployedStackName: rootStackArtifact.stackName,
110
+ });
111
+ return deployedTemplate;
112
+ }
113
+ async readCurrentTemplate(stackArtifact, sdk) {
101
114
  logging_1.debug(`Reading existing template for stack ${stackArtifact.displayName}.`);
102
- let stackSdk = undefined;
103
- // try to assume the lookup role and fallback to the deploy role
104
- try {
105
- const result = await prepareSdkWithLookupRoleFor(this.sdkProvider, stackArtifact);
106
- if (result.didAssumeRole) {
107
- stackSdk = result.sdk;
108
- }
109
- }
110
- catch (_a) { }
111
- if (!stackSdk) {
112
- stackSdk = (await this.prepareSdkFor(stackArtifact, undefined, aws_auth_1.Mode.ForReading)).stackSdk;
115
+ if (!sdk) {
116
+ sdk = await this.prepareSdkWithLookupOrDeployRole(stackArtifact);
113
117
  }
114
- const cfn = stackSdk.cloudFormation();
115
- const stack = await cloudformation_1.CloudFormationStack.lookup(cfn, stackArtifact.stackName);
116
- return stack.template();
118
+ return this.readCurrentStackTemplate(stackArtifact.stackName, sdk);
117
119
  }
118
120
  async deployStack(options) {
119
121
  const { stackSdk, resolvedEnvironment, cloudFormationRoleArn } = await this.prepareSdkFor(options.stack, options.roleArn);
@@ -162,6 +164,74 @@ class CloudFormationDeployments {
162
164
  const stack = await cloudformation_1.CloudFormationStack.lookup(stackSdk.cloudFormation(), (_a = options.deployName) !== null && _a !== void 0 ? _a : options.stack.stackName);
163
165
  return stack.exists;
164
166
  }
167
+ async prepareSdkWithLookupOrDeployRole(stackArtifact) {
168
+ // try to assume the lookup role
169
+ try {
170
+ const result = await prepareSdkWithLookupRoleFor(this.sdkProvider, stackArtifact);
171
+ if (result.didAssumeRole) {
172
+ return result.sdk;
173
+ }
174
+ }
175
+ catch (_a) { }
176
+ // fall back to the deploy role
177
+ return (await this.prepareSdkFor(stackArtifact, undefined, aws_auth_1.Mode.ForReading)).stackSdk;
178
+ }
179
+ async readCurrentStackTemplate(stackName, stackSdk) {
180
+ const cfn = stackSdk.cloudFormation();
181
+ const stack = await cloudformation_1.CloudFormationStack.lookup(cfn, stackName);
182
+ return stack.template();
183
+ }
184
+ async addNestedTemplatesToGeneratedAndDeployedStacks(rootStackArtifact, sdk, parentTemplates) {
185
+ var _a, _b, _c, _d, _e;
186
+ const listStackResources = parentTemplates.deployedStackName ? new evaluate_cloudformation_template_1.LazyListStackResources(sdk, parentTemplates.deployedStackName) : undefined;
187
+ for (const [nestedStackLogicalId, generatedNestedStackResource] of Object.entries((_a = parentTemplates.generatedTemplate.Resources) !== null && _a !== void 0 ? _a : {})) {
188
+ if (!this.isCdkManagedNestedStack(generatedNestedStackResource)) {
189
+ continue;
190
+ }
191
+ const assetPath = generatedNestedStackResource.Metadata['aws:asset:path'];
192
+ const nestedStackTemplates = await this.getNestedStackTemplates(rootStackArtifact, assetPath, nestedStackLogicalId, listStackResources, sdk);
193
+ generatedNestedStackResource.Properties.NestedTemplate = nestedStackTemplates.generatedTemplate;
194
+ const deployedParentTemplate = parentTemplates.deployedTemplate;
195
+ deployedParentTemplate.Resources = (_b = deployedParentTemplate.Resources) !== null && _b !== void 0 ? _b : {};
196
+ const deployedNestedStackResource = (_c = deployedParentTemplate.Resources[nestedStackLogicalId]) !== null && _c !== void 0 ? _c : {};
197
+ deployedParentTemplate.Resources[nestedStackLogicalId] = deployedNestedStackResource;
198
+ deployedNestedStackResource.Type = (_d = deployedNestedStackResource.Type) !== null && _d !== void 0 ? _d : 'AWS::CloudFormation::Stack';
199
+ deployedNestedStackResource.Properties = (_e = deployedNestedStackResource.Properties) !== null && _e !== void 0 ? _e : {};
200
+ deployedNestedStackResource.Properties.NestedTemplate = nestedStackTemplates.deployedTemplate;
201
+ await this.addNestedTemplatesToGeneratedAndDeployedStacks(rootStackArtifact, sdk, nestedStackTemplates);
202
+ }
203
+ }
204
+ async getNestedStackTemplates(rootStackArtifact, nestedTemplateAssetPath, nestedStackLogicalId, listStackResources, sdk) {
205
+ const nestedTemplatePath = path.join(rootStackArtifact.assembly.directory, nestedTemplateAssetPath);
206
+ // CFN generates the nested stack name in the form `ParentStackName-NestedStackLogicalID-SomeHashWeCan'tCompute,
207
+ // the arn is of the form: arn:aws:cloudformation:region:123456789012:stack/NestedStackName/AnotherHashWeDon'tNeed
208
+ // so we get the ARN and manually extract the name.
209
+ const nestedStackArn = await this.getNestedStackArn(nestedStackLogicalId, listStackResources);
210
+ const deployedStackName = nestedStackArn === null || nestedStackArn === void 0 ? void 0 : nestedStackArn.slice(nestedStackArn.indexOf('/') + 1, nestedStackArn.lastIndexOf('/'));
211
+ return {
212
+ generatedTemplate: JSON.parse(fs.readFileSync(nestedTemplatePath, 'utf-8')),
213
+ deployedTemplate: deployedStackName
214
+ ? await this.readCurrentStackTemplate(deployedStackName, sdk)
215
+ : {},
216
+ deployedStackName,
217
+ };
218
+ }
219
+ async getNestedStackArn(nestedStackLogicalId, listStackResources) {
220
+ var _a;
221
+ try {
222
+ const stackResources = await (listStackResources === null || listStackResources === void 0 ? void 0 : listStackResources.listStackResources());
223
+ return (_a = stackResources === null || stackResources === void 0 ? void 0 : stackResources.find(sr => sr.LogicalResourceId === nestedStackLogicalId)) === null || _a === void 0 ? void 0 : _a.PhysicalResourceId;
224
+ }
225
+ catch (e) {
226
+ if (e.message.startsWith('Stack with id ') && e.message.endsWith(' does not exist')) {
227
+ return;
228
+ }
229
+ throw e;
230
+ }
231
+ }
232
+ isCdkManagedNestedStack(stackResource) {
233
+ return stackResource.Type === 'AWS::CloudFormation::Stack' && stackResource.Metadata && stackResource.Metadata['aws:asset:path'];
234
+ }
165
235
  /**
166
236
  * Get the environment necessary for touching the given stack
167
237
  *
@@ -223,4 +293,4 @@ exports.CloudFormationDeployments = CloudFormationDeployments;
223
293
  function isAssetManifestArtifact(art) {
224
294
  return art instanceof cxapi.AssetManifestArtifact;
225
295
  }
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24tZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi1kZXBsb3ltZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsMkNBQTJDO0FBRTNDLHdDQUE0QztBQUM1QywrREFBeUQ7QUFDekQseUNBQXFEO0FBQ3JELGlEQUE4RTtBQUM5RSxpREFBNkM7QUFDN0MsMERBQXNFO0FBR3RFOztHQUVHO0FBQ0ksS0FBSyxVQUFVLHNCQUFzQixDQUFnQixNQUFTLEVBQUUsR0FBc0IsRUFBRSxXQUF3QjtJQUNySCxPQUFPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQ3hELFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDN0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7O1lBQ3BCLDRDQUE0QztZQUM1QyxrREFBa0Q7WUFDbEQsRUFBRTtZQUNGLHlHQUF5RztZQUN6RywrRkFBK0Y7WUFDL0YsYUFBTyxDQUFDLE1BQU0sV0FBVyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxlQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsbUNBQUksS0FBSyxDQUFDO1FBQ3JGLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBYkQsd0RBYUM7QUEyQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBaUJJO0FBQ0csS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxXQUF3QixFQUN4QixLQUF3Qzs7SUFFeEMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEYsNkVBQTZF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QU8sR0FBRyxZQUFZLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3QgfSBmcm9tICdjZGstYXNzZXRzJztcbmltcG9ydCB7IFRhZyB9IGZyb20gJy4uL2Nkay10b29sa2l0JztcbmltcG9ydCB7IGRlYnVnLCB3YXJuaW5nIH0gZnJvbSAnLi4vbG9nZ2luZyc7XG5pbXBvcnQgeyBwdWJsaXNoQXNzZXRzIH0gZnJvbSAnLi4vdXRpbC9hc3NldC1wdWJsaXNoaW5nJztcbmltcG9ydCB7IE1vZGUsIFNka1Byb3ZpZGVyLCBJU0RLIH0gZnJvbSAnLi9hd3MtYXV0aCc7XG5pbXBvcnQgeyBkZXBsb3lTdGFjaywgRGVwbG95U3RhY2tSZXN1bHQsIGRlc3Ryb3lTdGFjayB9IGZyb20gJy4vZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IFRvb2xraXRJbmZvIH0gZnJvbSAnLi90b29sa2l0LWluZm8nO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFjaywgVGVtcGxhdGUgfSBmcm9tICcuL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eVByb2dyZXNzIH0gZnJvbSAnLi91dGlsL2Nsb3VkZm9ybWF0aW9uL3N0YWNrLWFjdGl2aXR5LW1vbml0b3InO1xuXG4vKipcbiAqIFJlcGxhY2UgdGhlIHtBQ0NPVU5UfSBhbmQge1JFR0lPTn0gcGxhY2Vob2xkZXJzIGluIGFsbCBzdHJpbmdzIGZvdW5kIGluIGEgY29tcGxleCBvYmplY3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlRW52UGxhY2Vob2xkZXJzPEEgZXh0ZW5kcyB7IH0+KG9iamVjdDogQSwgZW52OiBjeGFwaS5FbnZpcm9ubWVudCwgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyKTogUHJvbWlzZTxBPiB7XG4gIHJldHVybiBjeGFwaS5FbnZpcm9ubWVudFBsYWNlaG9sZGVycy5yZXBsYWNlQXN5bmMob2JqZWN0LCB7XG4gICAgYWNjb3VudElkOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoZW52LmFjY291bnQpLFxuICAgIHJlZ2lvbjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGVudi5yZWdpb24pLFxuICAgIHBhcnRpdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlcmUncyBubyBnb29kIHdheSB0byBnZXQgdGhlIHBhcnRpdGlvbiFcbiAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGhhZCBpdCBhbHJlYWR5LCBleGNlcHQgd2UgZG9uJ3QuXG4gICAgICAvL1xuICAgICAgLy8gQmVzdCB3ZSBjYW4gZG8gaXMgYXNrIHRoZSBcImJhc2UgY3JlZGVudGlhbHNcIiBmb3IgdGhpcyBlbnZpcm9ubWVudCBmb3IgdGhlaXIgcGFydGl0aW9uLiBDcm9zcy1wYXJ0aXRpb25cbiAgICAgIC8vIEFzc3VtZVJvbGUnaW5nIHdpbGwgbmV2ZXIgd29yayBhbnl3YXksIHNvIHRoaXMgYW5zd2VyIHdvbid0IGJlIHdyb25nIChpdCB3aWxsIGp1c3QgYmUgc2xvdyEpXG4gICAgICByZXR1cm4gKGF3YWl0IHNka1Byb3ZpZGVyLmJhc2VDcmVkZW50aWFsc1BhcnRpdGlvbihlbnYsIE1vZGUuRm9yUmVhZGluZykpID8/ICdhd3MnO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNESyBvYnRhaW5lZCBieSBhc3N1bWluZyB0aGUgbG9va3VwIHJvbGVcbiAqIGZvciBhIGdpdmVuIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZWRTZGtXaXRoTG9va3VwUm9sZUZvckVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTREsgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2RrOiBJU0RLO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb2x2ZWQgZW52aXJvbm1lbnQgZm9yIHRoZSBzdGFja1xuICAgKiAobm8gbW9yZSAndW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJylcbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYXNzdW1lIHJvbGUgd2FzIHN1Y2Nlc3NmdWwuXG4gICAqIElmIHRoZSBhc3N1bWUgcm9sZSB3YXMgbm90IHN1Y2Nlc3NmdWwgKGZhbHNlKVxuICAgKiB0aGVuIHRoYXQgbWVhbnMgdGhhdCB0aGUgJ3NkaycgcmV0dXJuZWQgY29udGFpbnNcbiAgICogdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMgKG5vdCB0aGUgYXNzdW1lIHJvbGUgY3JlZGVudGlhbHMpXG4gICAqL1xuICByZWFkb25seSBkaWRBc3N1bWVSb2xlOiBib29sZWFuO1xufVxuXG4vKipcbiAgKiBUcnkgdG8gdXNlIHRoZSBib290c3RyYXAgbG9va3VwUm9sZS4gVGhlcmUgYXJlIHR3byBzY2VuYXJpb3MgdGhhdCBhcmUgaGFuZGxlZCBoZXJlXG4gICogIDEuIFRoZSBsb29rdXAgcm9sZSBtYXkgbm90IGV4aXN0IChpdCB3YXMgYWRkZWQgaW4gYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gNylcbiAgKiAgMi4gVGhlIGxvb2t1cCByb2xlIG1heSBub3QgaGF2ZSB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyAoUmVhZE9ubHlBY2Nlc3Mgd2FzIGFkZGVkIGluXG4gICogICAgICBib290c3RyYXAgc3RhY2sgdmVyc2lvbiA4KVxuICAqXG4gICogSW4gdGhlIGNhc2Ugb2YgMSAobG9va3VwIHJvbGUgZG9lc24ndCBleGlzdCkgYGZvckVudmlyb25tZW50YCB3aWxsIGVpdGhlcjpcbiAgKiAgIDEuIFJldHVybiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBpZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSBzdGFjayBhY2NvdW50XG4gICogICAyLiBUaHJvdyBhbiBlcnJvciBpZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgbm90IGZvciB0aGUgc3RhY2sgYWNjb3VudC5cbiAgKlxuICAqIElmIHdlIHN1Y2Nlc3NmdWxseSBhc3N1bWUgdGhlIGxvb2t1cCByb2xlIHdlIHRoZW4gcHJvY2VlZCB0byAyIGFuZCBjaGVjayB3aGV0aGVyIHRoZSBib290c3RyYXBcbiAgKiBzdGFjayB2ZXJzaW9uIGlzIHZhbGlkLiBJZiBpdCBpcyBub3Qgd2UgdGhyb3cgYW4gZXJyb3Igd2hpY2ggc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIGNhbGxpbmdcbiAgKiBmdW5jdGlvbiAoYW5kIGZhbGxiYWNrIHRvIHVzZSBhIGRpZmZlcmVudCByb2xlLCBldGMpXG4gICpcbiAgKiBJZiB3ZSBkbyBub3Qgc3VjY2Vzc2Z1bGx5IGFzc3VtZSB0aGUgbG9va3VwIHJvbGUsIGJ1dCBkbyBnZXQgYmFjayB0aGUgZGVmYXVsdCBjcmVkZW50aWFsc1xuICAqIHRoZW4gcmV0dXJuIHRob3NlIGFuZCBub3RlIHRoYXQgd2UgYXJlIHJldHVybmluZyB0aGUgZGVmYXVsdCBjcmVkZW50aWFscy4gVGhlIGNhbGxpbmdcbiAgKiBmdW5jdGlvbiBjYW4gdGhlbiBkZWNpZGUgdG8gdXNlIHRoZW0gb3IgZmFsbGJhY2sgdG8gYW5vdGhlciByb2xlLlxuICAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVTZGtXaXRoTG9va3VwUm9sZUZvcihcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuKTogUHJvbWlzZTxQcmVwYXJlZFNka1dpdGhMb29rdXBSb2xlRm9yRW52aXJvbm1lbnQ+IHtcbiAgY29uc3QgcmVzb2x2ZWRFbnZpcm9ubWVudCA9IGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzdGFjay5lbnZpcm9ubWVudCk7XG5cbiAgLy8gU3Vic3RpdHV0ZSBhbnkgcGxhY2Vob2xkZXJzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnRcbiAgY29uc3QgYXJucyA9IGF3YWl0IHJlcGxhY2VFbnZQbGFjZWhvbGRlcnMoe1xuICAgIGxvb2t1cFJvbGVBcm46IHN0YWNrLmxvb2t1cFJvbGU/LmFybixcbiAgfSwgcmVzb2x2ZWRFbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIpO1xuXG4gIC8vIHRyeSB0byBhc3N1bWUgdGhlIGxvb2t1cCByb2xlXG4gIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gYENvdWxkIG5vdCBhc3N1bWUgJHthcm5zLmxvb2t1cFJvbGVBcm59LCBwcm9jZWVkaW5nIGFueXdheS5gO1xuICBjb25zdCB1cGdyYWRlTWVzc2FnZSA9IGAoVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsIHBsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49ICR7c3RhY2subG9va3VwUm9sZT8ucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb259KWA7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhY2tTZGsgPSBhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudmlyb25tZW50LCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgIGFzc3VtZVJvbGVBcm46IGFybnMubG9va3VwUm9sZUFybixcbiAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiBzdGFjay5sb29rdXBSb2xlPy5hc3N1bWVSb2xlRXh0ZXJuYWxJZCxcbiAgICB9KTtcblxuICAgIC8vIGlmIHdlIHN1Y2NlZWQgaW4gYXNzdW1pbmcgdGhlIGxvb2t1cCByb2xlLCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBib290c3RyYXAgc3RhY2sgdmVyc2lvblxuICAgIGlmIChzdGFja1Nkay5kaWRBc3N1bWVSb2xlICYmIHN0YWNrLmxvb2t1cFJvbGU/LmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlciAmJiBzdGFjay5sb29rdXBSb2xlLnJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgVG9vbGtpdEluZm8udmVyc2lvbkZyb21Tc21QYXJhbWV0ZXIoc3RhY2tTZGsuc2RrLCBzdGFjay5sb29rdXBSb2xlLmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcik7XG4gICAgICBpZiAodmVyc2lvbiA8IHN0YWNrLmxvb2t1cFJvbGUucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCb290c3RyYXAgc3RhY2sgdmVyc2lvbiAnJHtzdGFjay5sb29rdXBSb2xlLnJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9ufScgaXMgcmVxdWlyZWQsIGZvdW5kIHZlcnNpb24gJyR7dmVyc2lvbn0nLmApO1xuICAgICAgfVxuICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGFzc3VtZWQgdGhlIGxvb2t1cCByb2xlIGJlY2F1c2Ugb25lIHdhcyBub3QgcHJvdmlkZWRcbiAgICAgIC8vIGlmIHRoYXQgaXMgdGhlIGNhc2UgdGhlbiBkb24ndCBwcmludCB0aGUgdXBncmFkZSB3YXJuaW5nXG4gICAgfSBlbHNlIGlmICghc3RhY2tTZGsuZGlkQXNzdW1lUm9sZSAmJiBzdGFjay5sb29rdXBSb2xlPy5yZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbikge1xuICAgICAgd2FybmluZyh1cGdyYWRlTWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnN0YWNrU2RrLCByZXNvbHZlZEVudmlyb25tZW50IH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1ZyhlKTtcbiAgICAvLyBvbmx5IHByaW50IG91dCB0aGUgd2FybmluZ3MgaWYgdGhlIGxvb2t1cFJvbGUgZXhpc3RzIEFORCB0aGVyZSBpcyBhIHJlcXVpcmVkXG4gICAgLy8gYm9vdHN0cmFwIHZlcnNpb24sIG90aGVyd2lzZSB0aGUgd2FybmluZ3Mgd2lsbCBwcmludCBgdW5kZWZpbmVkYFxuICAgIGlmIChzdGFjay5sb29rdXBSb2xlICYmIHN0YWNrLmxvb2t1cFJvbGUucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24pIHtcbiAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgd2FybmluZyh1cGdyYWRlTWVzc2FnZSk7XG4gICAgfVxuICAgIHRocm93IChlKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFjayB0byBkZXBsb3lcbiAgICovXG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiByb2xlIGZvciB0aGUgZGVwbG95bWVudCAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEN1cnJlbnQgcm9sZVxuICAgKi9cbiAgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVG9waWMgQVJOcyB0byBzZW5kIGEgbWVzc2FnZSB3aGVuIGRlcGxveW1lbnQgZmluaXNoZXMgKHBhc3MgdGhyb3VnaCB0byBDbG91ZEZvcm1hdGlvbilcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBub3RpZmljYXRpb25zXG4gICAqL1xuICBub3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG5hbWUgdW5kZXIgd2hpY2ggc3RhY2sgd2lsbCBiZSBkZXBsb3llZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZSBhcnRpZmFjdCBkZWZhdWx0XG4gICAqL1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb24ndCBzaG93IHN0YWNrIGRlcGxveW1lbnQgZXZlbnRzLCBqdXN0IHdhaXRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHF1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdG9vbGtpdCBzdGFjaywgaWYgbm90IHRoZSBkZWZhdWx0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgJ0NES1Rvb2xraXQnXG4gICAqL1xuICB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFzc2V0IElEcyB3aGljaCBzaG91bGQgTk9UIGJlIGJ1aWx0IG9yIHVwbG9hZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnVpbGQgYWxsIGFzc2V0c1xuICAgKi9cbiAgcmV1c2VBc3NldHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3RhY2sgdGFncyAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKi9cbiAgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBTdGFnZSB0aGUgY2hhbmdlIHNldCBidXQgZG9uJ3QgZXhlY3V0ZSBpdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICBleGVjdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgbmFtZSB0byB1c2UgZm9yIHRoZSBDbG91ZEZvcm1hdGlvbiBjaGFuZ2Ugc2V0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgY2hhbmdlU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRm9yY2UgZGVwbG95bWVudCwgZXZlbiBpZiB0aGUgZGVwbG95ZWQgdGVtcGxhdGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIGRlcGxveS5cbiAgICogQGRlZmF1bHQgZmFsc2UgZGVwbG95bWVudCB3aWxsIGJlIHNraXBwZWQgaWYgdGhlIHRlbXBsYXRlIGlzIGlkZW50aWNhbFxuICAgKi9cbiAgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBwYXJhbWV0ZXJzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVtcGxhdGVcbiAgICovXG4gIHBhcmFtZXRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogVXNlIHByZXZpb3VzIHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBJZiBub3Qgc2V0LCBhbGwgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlcnkgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzcGxheSBtb2RlIGZvciBzdGFjayBkZXBsb3ltZW50IHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CYXIgLSBzdGFjayBldmVudHMgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yXG4gICAqICAgdGhlIHJlc291cmNlIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZC5cbiAgICovXG4gIHByb2dyZXNzPzogU3RhY2tBY3Rpdml0eVByb2dyZXNzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHdlIGFyZSBvbiBhIENJIHN5c3RlbVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qXG4gICAqIFdoZXRoZXIgdG8gcGVyZm9ybSBhICdob3Rzd2FwJyBkZXBsb3ltZW50LlxuICAgKiBBICdob3Rzd2FwJyBkZXBsb3ltZW50IHdpbGwgYXR0ZW1wdCB0byBzaG9ydC1jaXJjdWl0IENsb3VkRm9ybWF0aW9uXG4gICAqIGFuZCB1cGRhdGUgdGhlIGFmZmVjdGVkIHJlc291cmNlcyBsaWtlIExhbWJkYSBmdW5jdGlvbnMgZGlyZWN0bHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2UgZm9yIHJlZ3VsYXIgZGVwbG95bWVudHMsIHRydWUgZm9yICd3YXRjaCcgZGVwbG95bWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBwZXJmb3JtaW5nIEFXUyBTREsgY2FsbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90aGluZyBleHRyYSBpcyBhcHBlbmRlZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhVXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lTdGFja09wdGlvbnMge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuICByb2xlQXJuPzogc3RyaW5nO1xuICBxdWlldD86IGJvb2xlYW47XG4gIGZvcmNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0V4aXN0c09wdGlvbnMge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3Zpc2lvbmVyUHJvcHMge1xuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG59XG5cbi8qKlxuICogU0RLIG9idGFpbmVkIGJ5IGFzc3VtaW5nIHRoZSBkZXBsb3kgcm9sZVxuICogZm9yIGEgZ2l2ZW4gZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVwYXJlZFNka0ZvckVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTREsgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZGs6IElTREs7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvbHZlZCBlbnZpcm9ubWVudCBmb3IgdGhlIHN0YWNrXG4gICAqIChubyBtb3JlICd1bmtub3duLWFjY291bnQvdW5rbm93bi1yZWdpb24nKVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRFbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0aW9uIFJvbGUgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4ZWN1dGlvbiByb2xlIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uUm9sZUFybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIENsb3VkRm9ybWF0aW9uIGRlcGxveW1lbnRzXG4gKlxuICogTG9va3MgdXMgdGhlIHJpZ2h0IFNESyBhbmQgQm9vdHN0cmFwIHN0YWNrIHRvIGRlcGxveSBhIGdpdmVuXG4gKiBzdGFjayBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvdmlzaW9uZXJQcm9wcykge1xuICAgIHRoaXMuc2RrUHJvdmlkZXIgPSBwcm9wcy5zZGtQcm92aWRlcjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkQ3VycmVudFRlbXBsYXRlKHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICBkZWJ1ZyhgUmVhZGluZyBleGlzdGluZyB0ZW1wbGF0ZSBmb3Igc3RhY2sgJHtzdGFja0FydGlmYWN0LmRpc3BsYXlOYW1lfS5gKTtcbiAgICBsZXQgc3RhY2tTZGs6IElTREsgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgLy8gdHJ5IHRvIGFzc3VtZSB0aGUgbG9va3VwIHJvbGUgYW5kIGZhbGxiYWNrIHRvIHRoZSBkZXBsb3kgcm9sZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcmVwYXJlU2RrV2l0aExvb2t1cFJvbGVGb3IodGhpcy5zZGtQcm92aWRlciwgc3RhY2tBcnRpZmFjdCk7XG4gICAgICBpZiAocmVzdWx0LmRpZEFzc3VtZVJvbGUpIHtcbiAgICAgICAgc3RhY2tTZGsgPSByZXN1bHQuc2RrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggeyB9XG5cbiAgICBpZiAoIXN0YWNrU2RrKSB7XG4gICAgICBzdGFja1NkayA9IChhd2FpdCB0aGlzLnByZXBhcmVTZGtGb3Ioc3RhY2tBcnRpZmFjdCwgdW5kZWZpbmVkLCBNb2RlLkZvclJlYWRpbmcpKS5zdGFja1NkaztcbiAgICB9XG5cbiAgICBjb25zdCBjZm4gPSBzdGFja1Nkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIHN0YWNrQXJ0aWZhY3Quc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gc3RhY2sudGVtcGxhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXBsb3lTdGFjayhvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgY29uc3QgeyBzdGFja1NkaywgcmVzb2x2ZWRFbnZpcm9ubWVudCwgY2xvdWRGb3JtYXRpb25Sb2xlQXJuIH0gPSBhd2FpdCB0aGlzLnByZXBhcmVTZGtGb3Iob3B0aW9ucy5zdGFjaywgb3B0aW9ucy5yb2xlQXJuKTtcblxuICAgIGNvbnN0IHRvb2xraXRJbmZvID0gYXdhaXQgVG9vbGtpdEluZm8ubG9va3VwKHJlc29sdmVkRW52aXJvbm1lbnQsIHN0YWNrU2RrLCBvcHRpb25zLnRvb2xraXRTdGFja05hbWUpO1xuXG4gICAgLy8gUHVibGlzaCBhbnkgYXNzZXRzIGJlZm9yZSBkb2luZyB0aGUgYWN0dWFsIGRlcGxveVxuICAgIGF3YWl0IHRoaXMucHVibGlzaFN0YWNrQXNzZXRzKG9wdGlvbnMuc3RhY2ssIHRvb2xraXRJbmZvKTtcblxuICAgIC8vIERvIGEgdmVyaWZpY2F0aW9uIG9mIHRoZSBib290c3RyYXAgc3RhY2sgdmVyc2lvblxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgICBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSxcbiAgICAgIG9wdGlvbnMuc3RhY2sucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24sXG4gICAgICBvcHRpb25zLnN0YWNrLmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcixcbiAgICAgIHRvb2xraXRJbmZvKTtcblxuICAgIHJldHVybiBkZXBsb3lTdGFjayh7XG4gICAgICBzdGFjazogb3B0aW9ucy5zdGFjayxcbiAgICAgIHJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgICBkZXBsb3lOYW1lOiBvcHRpb25zLmRlcGxveU5hbWUsXG4gICAgICBub3RpZmljYXRpb25Bcm5zOiBvcHRpb25zLm5vdGlmaWNhdGlvbkFybnMsXG4gICAgICBxdWlldDogb3B0aW9ucy5xdWlldCxcbiAgICAgIHNkazogc3RhY2tTZGssXG4gICAgICBzZGtQcm92aWRlcjogdGhpcy5zZGtQcm92aWRlcixcbiAgICAgIHJvbGVBcm46IGNsb3VkRm9ybWF0aW9uUm9sZUFybixcbiAgICAgIHJldXNlQXNzZXRzOiBvcHRpb25zLnJldXNlQXNzZXRzLFxuICAgICAgdG9vbGtpdEluZm8sXG4gICAgICB0YWdzOiBvcHRpb25zLnRhZ3MsXG4gICAgICBleGVjdXRlOiBvcHRpb25zLmV4ZWN1dGUsXG4gICAgICBjaGFuZ2VTZXROYW1lOiBvcHRpb25zLmNoYW5nZVNldE5hbWUsXG4gICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZSxcbiAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnMucGFyYW1ldGVycyxcbiAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogb3B0aW9ucy51c2VQcmV2aW91c1BhcmFtZXRlcnMsXG4gICAgICBwcm9ncmVzczogb3B0aW9ucy5wcm9ncmVzcyxcbiAgICAgIGNpOiBvcHRpb25zLmNpLFxuICAgICAgcm9sbGJhY2s6IG9wdGlvbnMucm9sbGJhY2ssXG4gICAgICBob3Rzd2FwOiBvcHRpb25zLmhvdHN3YXAsXG4gICAgICBleHRyYVVzZXJBZ2VudDogb3B0aW9ucy5leHRyYVVzZXJBZ2VudCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXN0cm95U3RhY2sob3B0aW9uczogRGVzdHJveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgc3RhY2tTZGssIGNsb3VkRm9ybWF0aW9uUm9sZUFybjogcm9sZUFybiB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlU2RrRm9yKG9wdGlvbnMuc3RhY2ssIG9wdGlvbnMucm9sZUFybik7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0YWNrKHtcbiAgICAgIHNkazogc3RhY2tTZGssXG4gICAgICByb2xlQXJuLFxuICAgICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgICBkZXBsb3lOYW1lOiBvcHRpb25zLmRlcGxveU5hbWUsXG4gICAgICBxdWlldDogb3B0aW9ucy5xdWlldCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFja0V4aXN0cyhvcHRpb25zOiBTdGFja0V4aXN0c09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHN0YWNrU2RrIH0gPSBhd2FpdCB0aGlzLnByZXBhcmVTZGtGb3Iob3B0aW9ucy5zdGFjaywgdW5kZWZpbmVkLCBNb2RlLkZvclJlYWRpbmcpO1xuICAgIGNvbnN0IHN0YWNrID0gYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoc3RhY2tTZGsuY2xvdWRGb3JtYXRpb24oKSwgb3B0aW9ucy5kZXBsb3lOYW1lID8/IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gc3RhY2suZXhpc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZW52aXJvbm1lbnQgbmVjZXNzYXJ5IGZvciB0b3VjaGluZyB0aGUgZ2l2ZW4gc3RhY2tcbiAgICpcbiAgICogUmV0dXJucyB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiAtIFRoZSByZXNvbHZlZCBlbnZpcm9ubWVudCBmb3IgdGhlIHN0YWNrIChubyBtb3JlICd1bmtub3duLWFjY291bnQvdW5rbm93bi1yZWdpb24nKVxuICAgKiAtIFNESyBsb2FkZWQgd2l0aCB0aGUgcmlnaHQgY3JlZGVudGlhbHMgZm9yIGNhbGxpbmcgYENyZWF0ZUNoYW5nZVNldGAuXG4gICAqIC0gVGhlIEV4ZWN1dGlvbiBSb2xlIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVNka0ZvcihcbiAgICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIHJvbGVBcm4/OiBzdHJpbmcsXG4gICAgbW9kZSA9IE1vZGUuRm9yV3JpdGluZyxcbiAgKTogUHJvbWlzZTxQcmVwYXJlZFNka0ZvckVudmlyb25tZW50PiB7XG4gICAgaWYgKCFzdGFjay5lbnZpcm9ubWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3RhY2sgJHtzdGFjay5kaXNwbGF5TmFtZX0gZG9lcyBub3QgaGF2ZSBhbiBlbnZpcm9ubWVudGApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkRW52aXJvbm1lbnQgPSBhd2FpdCB0aGlzLnNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzdGFjay5lbnZpcm9ubWVudCk7XG5cbiAgICAvLyBTdWJzdGl0dXRlIGFueSBwbGFjZWhvbGRlcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBlbnZpcm9ubWVudFxuICAgIGNvbnN0IGFybnMgPSBhd2FpdCByZXBsYWNlRW52UGxhY2Vob2xkZXJzKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46IHN0YWNrLmFzc3VtZVJvbGVBcm4sXG5cbiAgICAgIC8vIFVzZSB0aGUgb3ZlcnJpZGUgaWYgZ2l2ZW4sIG90aGVyd2lzZSB1c2UgdGhlIGZpZWxkIGZyb20gdGhlIHN0YWNrXG4gICAgICBjbG91ZEZvcm1hdGlvblJvbGVBcm46IHJvbGVBcm4gPz8gc3RhY2suY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Sb2xlQXJuLFxuICAgIH0sIHJlc29sdmVkRW52aXJvbm1lbnQsIHRoaXMuc2RrUHJvdmlkZXIpO1xuXG4gICAgY29uc3Qgc3RhY2tTZGsgPSBhd2FpdCB0aGlzLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KHJlc29sdmVkRW52aXJvbm1lbnQsIG1vZGUsIHtcbiAgICAgIGFzc3VtZVJvbGVBcm46IGFybnMuYXNzdW1lUm9sZUFybixcbiAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiBzdGFjay5hc3N1bWVSb2xlRXh0ZXJuYWxJZCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFja1Nkazogc3RhY2tTZGsuc2RrLFxuICAgICAgcmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICAgIGNsb3VkRm9ybWF0aW9uUm9sZUFybjogYXJucy5jbG91ZEZvcm1hdGlvblJvbGVBcm4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIGFsbCBhc3NldCBtYW5pZmVzdHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgZ2l2ZW4gc3RhY2tcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcHVibGlzaFN0YWNrQXNzZXRzKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mbykge1xuICAgIGNvbnN0IHN0YWNrRW52ID0gYXdhaXQgdGhpcy5zZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2suZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IGFzc2V0QXJ0aWZhY3RzID0gc3RhY2suZGVwZW5kZW5jaWVzLmZpbHRlcihpc0Fzc2V0TWFuaWZlc3RBcnRpZmFjdCk7XG5cbiAgICBmb3IgKGNvbnN0IGFzc2V0QXJ0aWZhY3Qgb2YgYXNzZXRBcnRpZmFjdHMpIHtcbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgICAgIHN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgYXNzZXRBcnRpZmFjdC5yZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbixcbiAgICAgICAgYXNzZXRBcnRpZmFjdC5ib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXIsXG4gICAgICAgIHRvb2xraXRJbmZvKTtcblxuICAgICAgY29uc3QgbWFuaWZlc3QgPSBBc3NldE1hbmlmZXN0LmZyb21GaWxlKGFzc2V0QXJ0aWZhY3QuZmlsZSk7XG4gICAgICBhd2FpdCBwdWJsaXNoQXNzZXRzKG1hbmlmZXN0LCB0aGlzLnNka1Byb3ZpZGVyLCBzdGFja0Vudik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIGJvb3RzdHJhcCBzdGFjayBoYXMgdGhlIHJpZ2h0IHZlcnNpb24gZm9yIHRoaXMgc3RhY2tcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgcmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8pIHtcblxuICAgIGlmIChyZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybjsgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRvb2xraXRJbmZvLnZhbGlkYXRlVmVyc2lvbihyZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbiwgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3RhY2tOYW1lfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQXNzZXRNYW5pZmVzdEFydGlmYWN0KGFydDogY3hhcGkuQ2xvdWRBcnRpZmFjdCk6IGFydCBpcyBjeGFwaS5Bc3NldE1hbmlmZXN0QXJ0aWZhY3Qge1xuICByZXR1cm4gYXJ0IGluc3RhbmNlb2YgY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0O1xufVxuIl19
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24tZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi1kZXBsb3ltZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQywrQkFBK0I7QUFFL0Isd0NBQTRDO0FBQzVDLCtEQUF5RDtBQUN6RCx5Q0FBcUQ7QUFDckQsaURBQThFO0FBQzlFLHlGQUFnRztBQUNoRyxpREFBNkM7QUFDN0MsMERBQXNFO0FBR3RFOztHQUVHO0FBQ0ksS0FBSyxVQUFVLHNCQUFzQixDQUFnQixNQUFTLEVBQUUsR0FBc0IsRUFBRSxXQUF3QjtJQUNySCxPQUFPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQ3hELFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDN0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7O1lBQ3BCLDRDQUE0QztZQUM1QyxrREFBa0Q7WUFDbEQsRUFBRTtZQUNGLHlHQUF5RztZQUN6RywrRkFBK0Y7WUFDL0YsYUFBTyxDQUFDLE1BQU0sV0FBVyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxlQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsbUNBQUksS0FBSyxDQUFDO1FBQ3JGLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBYkQsd0RBYUM7QUEyQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBaUJJO0FBQ0csS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxXQUF3QixFQUN4QixLQUF3Qzs7SUFFeEMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLFdBQVcsQ0FBQyxrQkFBa0IsQ0FB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O1FBRXhCLElBQUksNkJBQTZCLEtBQUssU0FBUyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBRTVELElBQUk7WUFDRixNQUFNLFdBQVcsQ0FBQyxlQUFlLENBQUMsNkJBQTZCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztTQUNyRztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7Q0FDRjtBQXpQRCw4REF5UEM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLEdBQXdCO0lBQ3ZELE9BQU8sR0FBRyxZQUFZLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBBc3NldE1hbmlmZXN0IH0gZnJvbSAnY2RrLWFzc2V0cyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBkZWJ1Zywgd2FybmluZyB9IGZyb20gJy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgcHVibGlzaEFzc2V0cyB9IGZyb20gJy4uL3V0aWwvYXNzZXQtcHVibGlzaGluZyc7XG5pbXBvcnQgeyBNb2RlLCBTZGtQcm92aWRlciwgSVNESyB9IGZyb20gJy4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgZGVwbG95U3RhY2ssIERlcGxveVN0YWNrUmVzdWx0LCBkZXN0cm95U3RhY2sgfSBmcm9tICcuL2RlcGxveS1zdGFjayc7XG5pbXBvcnQgeyBMYXp5TGlzdFN0YWNrUmVzb3VyY2VzLCBMaXN0U3RhY2tSZXNvdXJjZXMgfSBmcm9tICcuL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IFRvb2xraXRJbmZvIH0gZnJvbSAnLi90b29sa2l0LWluZm8nO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFjaywgVGVtcGxhdGUgfSBmcm9tICcuL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eVByb2dyZXNzIH0gZnJvbSAnLi91dGlsL2Nsb3VkZm9ybWF0aW9uL3N0YWNrLWFjdGl2aXR5LW1vbml0b3InO1xuXG4vKipcbiAqIFJlcGxhY2UgdGhlIHtBQ0NPVU5UfSBhbmQge1JFR0lPTn0gcGxhY2Vob2xkZXJzIGluIGFsbCBzdHJpbmdzIGZvdW5kIGluIGEgY29tcGxleCBvYmplY3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlRW52UGxhY2Vob2xkZXJzPEEgZXh0ZW5kcyB7IH0+KG9iamVjdDogQSwgZW52OiBjeGFwaS5FbnZpcm9ubWVudCwgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyKTogUHJvbWlzZTxBPiB7XG4gIHJldHVybiBjeGFwaS5FbnZpcm9ubWVudFBsYWNlaG9sZGVycy5yZXBsYWNlQXN5bmMob2JqZWN0LCB7XG4gICAgYWNjb3VudElkOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoZW52LmFjY291bnQpLFxuICAgIHJlZ2lvbjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGVudi5yZWdpb24pLFxuICAgIHBhcnRpdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlcmUncyBubyBnb29kIHdheSB0byBnZXQgdGhlIHBhcnRpdGlvbiFcbiAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGhhZCBpdCBhbHJlYWR5LCBleGNlcHQgd2UgZG9uJ3QuXG4gICAgICAvL1xuICAgICAgLy8gQmVzdCB3ZSBjYW4gZG8gaXMgYXNrIHRoZSBcImJhc2UgY3JlZGVudGlhbHNcIiBmb3IgdGhpcyBlbnZpcm9ubWVudCBmb3IgdGhlaXIgcGFydGl0aW9uLiBDcm9zcy1wYXJ0aXRpb25cbiAgICAgIC8vIEFzc3VtZVJvbGUnaW5nIHdpbGwgbmV2ZXIgd29yayBhbnl3YXksIHNvIHRoaXMgYW5zd2VyIHdvbid0IGJlIHdyb25nIChpdCB3aWxsIGp1c3QgYmUgc2xvdyEpXG4gICAgICByZXR1cm4gKGF3YWl0IHNka1Byb3ZpZGVyLmJhc2VDcmVkZW50aWFsc1BhcnRpdGlvbihlbnYsIE1vZGUuRm9yUmVhZGluZykpID8/ICdhd3MnO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNESyBvYnRhaW5lZCBieSBhc3N1bWluZyB0aGUgbG9va3VwIHJvbGVcbiAqIGZvciBhIGdpdmVuIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZWRTZGtXaXRoTG9va3VwUm9sZUZvckVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTREsgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2RrOiBJU0RLO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb2x2ZWQgZW52aXJvbm1lbnQgZm9yIHRoZSBzdGFja1xuICAgKiAobm8gbW9yZSAndW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJylcbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYXNzdW1lIHJvbGUgd2FzIHN1Y2Nlc3NmdWwuXG4gICAqIElmIHRoZSBhc3N1bWUgcm9sZSB3YXMgbm90IHN1Y2Nlc3NmdWwgKGZhbHNlKVxuICAgKiB0aGVuIHRoYXQgbWVhbnMgdGhhdCB0aGUgJ3NkaycgcmV0dXJuZWQgY29udGFpbnNcbiAgICogdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMgKG5vdCB0aGUgYXNzdW1lIHJvbGUgY3JlZGVudGlhbHMpXG4gICAqL1xuICByZWFkb25seSBkaWRBc3N1bWVSb2xlOiBib29sZWFuO1xufVxuXG4vKipcbiAgKiBUcnkgdG8gdXNlIHRoZSBib290c3RyYXAgbG9va3VwUm9sZS4gVGhlcmUgYXJlIHR3byBzY2VuYXJpb3MgdGhhdCBhcmUgaGFuZGxlZCBoZXJlXG4gICogIDEuIFRoZSBsb29rdXAgcm9sZSBtYXkgbm90IGV4aXN0IChpdCB3YXMgYWRkZWQgaW4gYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gNylcbiAgKiAgMi4gVGhlIGxvb2t1cCByb2xlIG1heSBub3QgaGF2ZSB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyAoUmVhZE9ubHlBY2Nlc3Mgd2FzIGFkZGVkIGluXG4gICogICAgICBib290c3RyYXAgc3RhY2sgdmVyc2lvbiA4KVxuICAqXG4gICogSW4gdGhlIGNhc2Ugb2YgMSAobG9va3VwIHJvbGUgZG9lc24ndCBleGlzdCkgYGZvckVudmlyb25tZW50YCB3aWxsIGVpdGhlcjpcbiAgKiAgIDEuIFJldHVybiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBpZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSBzdGFjayBhY2NvdW50XG4gICogICAyLiBUaHJvdyBhbiBlcnJvciBpZiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgbm90IGZvciB0aGUgc3RhY2sgYWNjb3VudC5cbiAgKlxuICAqIElmIHdlIHN1Y2Nlc3NmdWxseSBhc3N1bWUgdGhlIGxvb2t1cCByb2xlIHdlIHRoZW4gcHJvY2VlZCB0byAyIGFuZCBjaGVjayB3aGV0aGVyIHRoZSBib290c3RyYXBcbiAgKiBzdGFjayB2ZXJzaW9uIGlzIHZhbGlkLiBJZiBpdCBpcyBub3Qgd2UgdGhyb3cgYW4gZXJyb3Igd2hpY2ggc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIGNhbGxpbmdcbiAgKiBmdW5jdGlvbiAoYW5kIGZhbGxiYWNrIHRvIHVzZSBhIGRpZmZlcmVudCByb2xlLCBldGMpXG4gICpcbiAgKiBJZiB3ZSBkbyBub3Qgc3VjY2Vzc2Z1bGx5IGFzc3VtZSB0aGUgbG9va3VwIHJvbGUsIGJ1dCBkbyBnZXQgYmFjayB0aGUgZGVmYXVsdCBjcmVkZW50aWFsc1xuICAqIHRoZW4gcmV0dXJuIHRob3NlIGFuZCBub3RlIHRoYXQgd2UgYXJlIHJldHVybmluZyB0aGUgZGVmYXVsdCBjcmVkZW50aWFscy4gVGhlIGNhbGxpbmdcbiAgKiBmdW5jdGlvbiBjYW4gdGhlbiBkZWNpZGUgdG8gdXNlIHRoZW0gb3IgZmFsbGJhY2sgdG8gYW5vdGhlciByb2xlLlxuICAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVTZGtXaXRoTG9va3VwUm9sZUZvcihcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuKTogUHJvbWlzZTxQcmVwYXJlZFNka1dpdGhMb29rdXBSb2xlRm9yRW52aXJvbm1lbnQ+IHtcbiAgY29uc3QgcmVzb2x2ZWRFbnZpcm9ubWVudCA9IGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzdGFjay5lbnZpcm9ubWVudCk7XG5cbiAgLy8gU3Vic3RpdHV0ZSBhbnkgcGxhY2Vob2xkZXJzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnRcbiAgY29uc3QgYXJucyA9IGF3YWl0IHJlcGxhY2VFbnZQbGFjZWhvbGRlcnMoe1xuICAgIGxvb2t1cFJvbGVBcm46IHN0YWNrLmxvb2t1cFJvbGU/LmFybixcbiAgfSwgcmVzb2x2ZWRFbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIpO1xuXG4gIC8vIHRyeSB0byBhc3N1bWUgdGhlIGxvb2t1cCByb2xlXG4gIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gYENvdWxkIG5vdCBhc3N1bWUgJHthcm5zLmxvb2t1cFJvbGVBcm59LCBwcm9jZWVkaW5nIGFueXdheS5gO1xuICBjb25zdCB1cGdyYWRlTWVzc2FnZSA9IGAoVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsIHBsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49ICR7c3RhY2subG9va3VwUm9sZT8ucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb259KWA7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhY2tTZGsgPSBhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudmlyb25tZW50LCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgIGFzc3VtZVJvbGVBcm46IGFybnMubG9va3VwUm9sZUFybixcbiAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiBzdGFjay5sb29rdXBSb2xlPy5hc3N1bWVSb2xlRXh0ZXJuYWxJZCxcbiAgICB9KTtcblxuICAgIC8vIGlmIHdlIHN1Y2NlZWQgaW4gYXNzdW1pbmcgdGhlIGxvb2t1cCByb2xlLCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBib290c3RyYXAgc3RhY2sgdmVyc2lvblxuICAgIGlmIChzdGFja1Nkay5kaWRBc3N1bWVSb2xlICYmIHN0YWNrLmxvb2t1cFJvbGU/LmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlciAmJiBzdGFjay5sb29rdXBSb2xlLnJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgVG9vbGtpdEluZm8udmVyc2lvbkZyb21Tc21QYXJhbWV0ZXIoc3RhY2tTZGsuc2RrLCBzdGFjay5sb29rdXBSb2xlLmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcik7XG4gICAgICBpZiAodmVyc2lvbiA8IHN0YWNrLmxvb2t1cFJvbGUucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCb290c3RyYXAgc3RhY2sgdmVyc2lvbiAnJHtzdGFjay5sb29rdXBSb2xlLnJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9ufScgaXMgcmVxdWlyZWQsIGZvdW5kIHZlcnNpb24gJyR7dmVyc2lvbn0nLmApO1xuICAgICAgfVxuICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGFzc3VtZWQgdGhlIGxvb2t1cCByb2xlIGJlY2F1c2Ugb25lIHdhcyBub3QgcHJvdmlkZWRcbiAgICAgIC8vIGlmIHRoYXQgaXMgdGhlIGNhc2UgdGhlbiBkb24ndCBwcmludCB0aGUgdXBncmFkZSB3YXJuaW5nXG4gICAgfSBlbHNlIGlmICghc3RhY2tTZGsuZGlkQXNzdW1lUm9sZSAmJiBzdGFjay5sb29rdXBSb2xlPy5yZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbikge1xuICAgICAgd2FybmluZyh1cGdyYWRlTWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnN0YWNrU2RrLCByZXNvbHZlZEVudmlyb25tZW50IH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1ZyhlKTtcbiAgICAvLyBvbmx5IHByaW50IG91dCB0aGUgd2FybmluZ3MgaWYgdGhlIGxvb2t1cFJvbGUgZXhpc3RzIEFORCB0aGVyZSBpcyBhIHJlcXVpcmVkXG4gICAgLy8gYm9vdHN0cmFwIHZlcnNpb24sIG90aGVyd2lzZSB0aGUgd2FybmluZ3Mgd2lsbCBwcmludCBgdW5kZWZpbmVkYFxuICAgIGlmIChzdGFjay5sb29rdXBSb2xlICYmIHN0YWNrLmxvb2t1cFJvbGUucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24pIHtcbiAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgd2FybmluZyh1cGdyYWRlTWVzc2FnZSk7XG4gICAgfVxuICAgIHRocm93IChlKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFjayB0byBkZXBsb3lcbiAgICovXG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiByb2xlIGZvciB0aGUgZGVwbG95bWVudCAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEN1cnJlbnQgcm9sZVxuICAgKi9cbiAgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVG9waWMgQVJOcyB0byBzZW5kIGEgbWVzc2FnZSB3aGVuIGRlcGxveW1lbnQgZmluaXNoZXMgKHBhc3MgdGhyb3VnaCB0byBDbG91ZEZvcm1hdGlvbilcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBub3RpZmljYXRpb25zXG4gICAqL1xuICBub3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG5hbWUgdW5kZXIgd2hpY2ggc3RhY2sgd2lsbCBiZSBkZXBsb3llZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZSBhcnRpZmFjdCBkZWZhdWx0XG4gICAqL1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb24ndCBzaG93IHN0YWNrIGRlcGxveW1lbnQgZXZlbnRzLCBqdXN0IHdhaXRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHF1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdG9vbGtpdCBzdGFjaywgaWYgbm90IHRoZSBkZWZhdWx0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgJ0NES1Rvb2xraXQnXG4gICAqL1xuICB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFzc2V0IElEcyB3aGljaCBzaG91bGQgTk9UIGJlIGJ1aWx0IG9yIHVwbG9hZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnVpbGQgYWxsIGFzc2V0c1xuICAgKi9cbiAgcmV1c2VBc3NldHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3RhY2sgdGFncyAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKi9cbiAgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBTdGFnZSB0aGUgY2hhbmdlIHNldCBidXQgZG9uJ3QgZXhlY3V0ZSBpdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICBleGVjdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgbmFtZSB0byB1c2UgZm9yIHRoZSBDbG91ZEZvcm1hdGlvbiBjaGFuZ2Ugc2V0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgY2hhbmdlU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRm9yY2UgZGVwbG95bWVudCwgZXZlbiBpZiB0aGUgZGVwbG95ZWQgdGVtcGxhdGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIGRlcGxveS5cbiAgICogQGRlZmF1bHQgZmFsc2UgZGVwbG95bWVudCB3aWxsIGJlIHNraXBwZWQgaWYgdGhlIHRlbXBsYXRlIGlzIGlkZW50aWNhbFxuICAgKi9cbiAgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBwYXJhbWV0ZXJzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVtcGxhdGVcbiAgICovXG4gIHBhcmFtZXRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogVXNlIHByZXZpb3VzIHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBJZiBub3Qgc2V0LCBhbGwgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlcnkgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzcGxheSBtb2RlIGZvciBzdGFjayBkZXBsb3ltZW50IHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CYXIgLSBzdGFjayBldmVudHMgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yXG4gICAqICAgdGhlIHJlc291cmNlIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZC5cbiAgICovXG4gIHByb2dyZXNzPzogU3RhY2tBY3Rpdml0eVByb2dyZXNzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHdlIGFyZSBvbiBhIENJIHN5c3RlbVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qXG4gICAqIFdoZXRoZXIgdG8gcGVyZm9ybSBhICdob3Rzd2FwJyBkZXBsb3ltZW50LlxuICAgKiBBICdob3Rzd2FwJyBkZXBsb3ltZW50IHdpbGwgYXR0ZW1wdCB0byBzaG9ydC1jaXJjdWl0IENsb3VkRm9ybWF0aW9uXG4gICAqIGFuZCB1cGRhdGUgdGhlIGFmZmVjdGVkIHJlc291cmNlcyBsaWtlIExhbWJkYSBmdW5jdGlvbnMgZGlyZWN0bHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2UgZm9yIHJlZ3VsYXIgZGVwbG95bWVudHMsIHRydWUgZm9yICd3YXRjaCcgZGVwbG95bWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBwZXJmb3JtaW5nIEFXUyBTREsgY2FsbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90aGluZyBleHRyYSBpcyBhcHBlbmRlZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhVXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lTdGFja09wdGlvbnMge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuICByb2xlQXJuPzogc3RyaW5nO1xuICBxdWlldD86IGJvb2xlYW47XG4gIGZvcmNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0V4aXN0c09wdGlvbnMge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3Zpc2lvbmVyUHJvcHMge1xuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG59XG5cbi8qKlxuICogU0RLIG9idGFpbmVkIGJ5IGFzc3VtaW5nIHRoZSBkZXBsb3kgcm9sZVxuICogZm9yIGEgZ2l2ZW4gZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVwYXJlZFNka0ZvckVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTREsgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZGs6IElTREs7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvbHZlZCBlbnZpcm9ubWVudCBmb3IgdGhlIHN0YWNrXG4gICAqIChubyBtb3JlICd1bmtub3duLWFjY291bnQvdW5rbm93bi1yZWdpb24nKVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRFbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0aW9uIFJvbGUgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4ZWN1dGlvbiByb2xlIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uUm9sZUFybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIENsb3VkRm9ybWF0aW9uIGRlcGxveW1lbnRzXG4gKlxuICogTG9va3MgdXMgdGhlIHJpZ2h0IFNESyBhbmQgQm9vdHN0cmFwIHN0YWNrIHRvIGRlcGxveSBhIGdpdmVuXG4gKiBzdGFjayBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvdmlzaW9uZXJQcm9wcykge1xuICAgIHRoaXMuc2RrUHJvdmlkZXIgPSBwcm9wcy5zZGtQcm92aWRlcjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkQ3VycmVudFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcyhyb290U3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIGNvbnN0IHNkayA9IGF3YWl0IHRoaXMucHJlcGFyZVNka1dpdGhMb29rdXBPckRlcGxveVJvbGUocm9vdFN0YWNrQXJ0aWZhY3QpO1xuICAgIGNvbnN0IGRlcGxveWVkVGVtcGxhdGUgPSBhd2FpdCB0aGlzLnJlYWRDdXJyZW50VGVtcGxhdGUocm9vdFN0YWNrQXJ0aWZhY3QsIHNkayk7XG4gICAgYXdhaXQgdGhpcy5hZGROZXN0ZWRUZW1wbGF0ZXNUb0dlbmVyYXRlZEFuZERlcGxveWVkU3RhY2tzKHJvb3RTdGFja0FydGlmYWN0LCBzZGssIHtcbiAgICAgIGdlbmVyYXRlZFRlbXBsYXRlOiByb290U3RhY2tBcnRpZmFjdC50ZW1wbGF0ZSxcbiAgICAgIGRlcGxveWVkVGVtcGxhdGU6IGRlcGxveWVkVGVtcGxhdGUsXG4gICAgICBkZXBsb3llZFN0YWNrTmFtZTogcm9vdFN0YWNrQXJ0aWZhY3Quc3RhY2tOYW1lLFxuICAgIH0pO1xuICAgIHJldHVybiBkZXBsb3llZFRlbXBsYXRlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlYWRDdXJyZW50VGVtcGxhdGUoc3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LCBzZGs/OiBJU0RLKTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIGRlYnVnKGBSZWFkaW5nIGV4aXN0aW5nIHRlbXBsYXRlIGZvciBzdGFjayAke3N0YWNrQXJ0aWZhY3QuZGlzcGxheU5hbWV9LmApO1xuICAgIGlmICghc2RrKSB7XG4gICAgICBzZGsgPSBhd2FpdCB0aGlzLnByZXBhcmVTZGtXaXRoTG9va3VwT3JEZXBsb3lSb2xlKHN0YWNrQXJ0aWZhY3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZWFkQ3VycmVudFN0YWNrVGVtcGxhdGUoc3RhY2tBcnRpZmFjdC5zdGFja05hbWUsIHNkayk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVwbG95U3RhY2sob3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGNvbnN0IHsgc3RhY2tTZGssIHJlc29sdmVkRW52aXJvbm1lbnQsIGNsb3VkRm9ybWF0aW9uUm9sZUFybiB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlU2RrRm9yKG9wdGlvbnMuc3RhY2ssIG9wdGlvbnMucm9sZUFybik7XG5cbiAgICBjb25zdCB0b29sa2l0SW5mbyA9IGF3YWl0IFRvb2xraXRJbmZvLmxvb2t1cChyZXNvbHZlZEVudmlyb25tZW50LCBzdGFja1Nkaywgb3B0aW9ucy50b29sa2l0U3RhY2tOYW1lKTtcblxuICAgIC8vIFB1Ymxpc2ggYW55IGFzc2V0cyBiZWZvcmUgZG9pbmcgdGhlIGFjdHVhbCBkZXBsb3lcbiAgICBhd2FpdCB0aGlzLnB1Ymxpc2hTdGFja0Fzc2V0cyhvcHRpb25zLnN0YWNrLCB0b29sa2l0SW5mbyk7XG5cbiAgICAvLyBEbyBhIHZlcmlmaWNhdGlvbiBvZiB0aGUgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb25cbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQm9vdHN0cmFwU3RhY2tWZXJzaW9uKFxuICAgICAgb3B0aW9ucy5zdGFjay5zdGFja05hbWUsXG4gICAgICBvcHRpb25zLnN0YWNrLnJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uLFxuICAgICAgb3B0aW9ucy5zdGFjay5ib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXIsXG4gICAgICB0b29sa2l0SW5mbyk7XG5cbiAgICByZXR1cm4gZGVwbG95U3RhY2soe1xuICAgICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgICByZXNvbHZlZEVudmlyb25tZW50LFxuICAgICAgZGVwbG95TmFtZTogb3B0aW9ucy5kZXBsb3lOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uQXJuczogb3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zLFxuICAgICAgcXVpZXQ6IG9wdGlvbnMucXVpZXQsXG4gICAgICBzZGs6IHN0YWNrU2RrLFxuICAgICAgc2RrUHJvdmlkZXI6IHRoaXMuc2RrUHJvdmlkZXIsXG4gICAgICByb2xlQXJuOiBjbG91ZEZvcm1hdGlvblJvbGVBcm4sXG4gICAgICByZXVzZUFzc2V0czogb3B0aW9ucy5yZXVzZUFzc2V0cyxcbiAgICAgIHRvb2xraXRJbmZvLFxuICAgICAgdGFnczogb3B0aW9ucy50YWdzLFxuICAgICAgZXhlY3V0ZTogb3B0aW9ucy5leGVjdXRlLFxuICAgICAgY2hhbmdlU2V0TmFtZTogb3B0aW9ucy5jaGFuZ2VTZXROYW1lLFxuICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2UsXG4gICAgICBwYXJhbWV0ZXJzOiBvcHRpb25zLnBhcmFtZXRlcnMsXG4gICAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IG9wdGlvbnMudXNlUHJldmlvdXNQYXJhbWV0ZXJzLFxuICAgICAgcHJvZ3Jlc3M6IG9wdGlvbnMucHJvZ3Jlc3MsXG4gICAgICBjaTogb3B0aW9ucy5jaSxcbiAgICAgIHJvbGxiYWNrOiBvcHRpb25zLnJvbGxiYWNrLFxuICAgICAgaG90c3dhcDogb3B0aW9ucy5ob3Rzd2FwLFxuICAgICAgZXh0cmFVc2VyQWdlbnQ6IG9wdGlvbnMuZXh0cmFVc2VyQWdlbnQsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveVN0YWNrKG9wdGlvbnM6IERlc3Ryb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHN0YWNrU2RrLCBjbG91ZEZvcm1hdGlvblJvbGVBcm46IHJvbGVBcm4gfSA9IGF3YWl0IHRoaXMucHJlcGFyZVNka0ZvcihvcHRpb25zLnN0YWNrLCBvcHRpb25zLnJvbGVBcm4pO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdGFjayh7XG4gICAgICBzZGs6IHN0YWNrU2RrLFxuICAgICAgcm9sZUFybixcbiAgICAgIHN0YWNrOiBvcHRpb25zLnN0YWNrLFxuICAgICAgZGVwbG95TmFtZTogb3B0aW9ucy5kZXBsb3lOYW1lLFxuICAgICAgcXVpZXQ6IG9wdGlvbnMucXVpZXQsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhY2tFeGlzdHMob3B0aW9uczogU3RhY2tFeGlzdHNPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBzdGFja1NkayB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlU2RrRm9yKG9wdGlvbnMuc3RhY2ssIHVuZGVmaW5lZCwgTW9kZS5Gb3JSZWFkaW5nKTtcbiAgICBjb25zdCBzdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKHN0YWNrU2RrLmNsb3VkRm9ybWF0aW9uKCksIG9wdGlvbnMuZGVwbG95TmFtZSA/PyBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSk7XG4gICAgcmV0dXJuIHN0YWNrLmV4aXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVNka1dpdGhMb29rdXBPckRlcGxveVJvbGUoc3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxJU0RLPiB7XG4gICAgLy8gdHJ5IHRvIGFzc3VtZSB0aGUgbG9va3VwIHJvbGVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJlcGFyZVNka1dpdGhMb29rdXBSb2xlRm9yKHRoaXMuc2RrUHJvdmlkZXIsIHN0YWNrQXJ0aWZhY3QpO1xuICAgICAgaWYgKHJlc3VsdC5kaWRBc3N1bWVSb2xlKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2RrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggeyB9XG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBkZXBsb3kgcm9sZVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5wcmVwYXJlU2RrRm9yKHN0YWNrQXJ0aWZhY3QsIHVuZGVmaW5lZCwgTW9kZS5Gb3JSZWFkaW5nKSkuc3RhY2tTZGs7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRDdXJyZW50U3RhY2tUZW1wbGF0ZShzdGFja05hbWU6IHN0cmluZywgc3RhY2tTZGs6IElTREspIDogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIGNvbnN0IGNmbiA9IHN0YWNrU2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIHN0YWNrTmFtZSk7XG4gICAgcmV0dXJuIHN0YWNrLnRlbXBsYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZE5lc3RlZFRlbXBsYXRlc1RvR2VuZXJhdGVkQW5kRGVwbG95ZWRTdGFja3MoXG4gICAgcm9vdFN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICBzZGs6IElTREssXG4gICAgcGFyZW50VGVtcGxhdGVzOiBTdGFja1RlbXBsYXRlcyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGlzdFN0YWNrUmVzb3VyY2VzID0gcGFyZW50VGVtcGxhdGVzLmRlcGxveWVkU3RhY2tOYW1lID8gbmV3IExhenlMaXN0U3RhY2tSZXNvdXJjZXMoc2RrLCBwYXJlbnRUZW1wbGF0ZXMuZGVwbG95ZWRTdGFja05hbWUpIDogdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgW25lc3RlZFN0YWNrTG9naWNhbElkLCBnZW5lcmF0ZWROZXN0ZWRTdGFja1Jlc291cmNlXSBvZiBPYmplY3QuZW50cmllcyhwYXJlbnRUZW1wbGF0ZXMuZ2VuZXJhdGVkVGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9KSkge1xuICAgICAgaWYgKCF0aGlzLmlzQ2RrTWFuYWdlZE5lc3RlZFN0YWNrKGdlbmVyYXRlZE5lc3RlZFN0YWNrUmVzb3VyY2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhc3NldFBhdGggPSBnZW5lcmF0ZWROZXN0ZWRTdGFja1Jlc291cmNlLk1ldGFkYXRhWydhd3M6YXNzZXQ6cGF0aCddO1xuICAgICAgY29uc3QgbmVzdGVkU3RhY2tUZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmdldE5lc3RlZFN0YWNrVGVtcGxhdGVzKHJvb3RTdGFja0FydGlmYWN0LCBhc3NldFBhdGgsIG5lc3RlZFN0YWNrTG9naWNhbElkLCBsaXN0U3RhY2tSZXNvdXJjZXMsIHNkayk7XG5cbiAgICAgIGdlbmVyYXRlZE5lc3RlZFN0YWNrUmVzb3VyY2UuUHJvcGVydGllcy5OZXN0ZWRUZW1wbGF0ZSA9IG5lc3RlZFN0YWNrVGVtcGxhdGVzLmdlbmVyYXRlZFRlbXBsYXRlO1xuXG4gICAgICBjb25zdCBkZXBsb3llZFBhcmVudFRlbXBsYXRlID0gcGFyZW50VGVtcGxhdGVzLmRlcGxveWVkVGVtcGxhdGU7XG4gICAgICBkZXBsb3llZFBhcmVudFRlbXBsYXRlLlJlc291cmNlcyA9IGRlcGxveWVkUGFyZW50VGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9O1xuICAgICAgY29uc3QgZGVwbG95ZWROZXN0ZWRTdGFja1Jlc291cmNlID0gZGVwbG95ZWRQYXJlbnRUZW1wbGF0ZS5SZXNvdXJjZXNbbmVzdGVkU3RhY2tMb2dpY2FsSWRdID8/IHt9O1xuICAgICAgZGVwbG95ZWRQYXJlbnRUZW1wbGF0ZS5SZXNvdXJjZXNbbmVzdGVkU3RhY2tMb2dpY2FsSWRdID0gZGVwbG95ZWROZXN0ZWRTdGFja1Jlc291cmNlO1xuICAgICAgZGVwbG95ZWROZXN0ZWRTdGFja1Jlc291cmNlLlR5cGUgPSBkZXBsb3llZE5lc3RlZFN0YWNrUmVzb3VyY2UuVHlwZSA/PyAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snO1xuICAgICAgZGVwbG95ZWROZXN0ZWRTdGFja1Jlc291cmNlLlByb3BlcnRpZXMgPSBkZXBsb3llZE5lc3RlZFN0YWNrUmVzb3VyY2UuUHJvcGVydGllcyA/PyB7fTtcbiAgICAgIGRlcGxveWVkTmVzdGVkU3RhY2tSZXNvdXJjZS5Qcm9wZXJ0aWVzLk5lc3RlZFRlbXBsYXRlID0gbmVzdGVkU3RhY2tUZW1wbGF0ZXMuZGVwbG95ZWRUZW1wbGF0ZTtcblxuICAgICAgYXdhaXQgdGhpcy5hZGROZXN0ZWRUZW1wbGF0ZXNUb0dlbmVyYXRlZEFuZERlcGxveWVkU3RhY2tzKFxuICAgICAgICByb290U3RhY2tBcnRpZmFjdCxcbiAgICAgICAgc2RrLFxuICAgICAgICBuZXN0ZWRTdGFja1RlbXBsYXRlcyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXROZXN0ZWRTdGFja1RlbXBsYXRlcyhcbiAgICByb290U3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LCBuZXN0ZWRUZW1wbGF0ZUFzc2V0UGF0aDogc3RyaW5nLCBuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nLFxuICAgIGxpc3RTdGFja1Jlc291cmNlczogTGlzdFN0YWNrUmVzb3VyY2VzIHwgdW5kZWZpbmVkLCBzZGs6IElTREssXG4gICk6IFByb21pc2U8U3RhY2tUZW1wbGF0ZXM+IHtcbiAgICBjb25zdCBuZXN0ZWRUZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4ocm9vdFN0YWNrQXJ0aWZhY3QuYXNzZW1ibHkuZGlyZWN0b3J5LCBuZXN0ZWRUZW1wbGF0ZUFzc2V0UGF0aCk7XG5cbiAgICAvLyBDRk4gZ2VuZXJhdGVzIHRoZSBuZXN0ZWQgc3RhY2sgbmFtZSBpbiB0aGUgZm9ybSBgUGFyZW50U3RhY2tOYW1lLU5lc3RlZFN0YWNrTG9naWNhbElELVNvbWVIYXNoV2VDYW4ndENvbXB1dGUsXG4gICAgLy8gdGhlIGFybiBpcyBvZiB0aGUgZm9ybTogYXJuOmF3czpjbG91ZGZvcm1hdGlvbjpyZWdpb246MTIzNDU2Nzg5MDEyOnN0YWNrL05lc3RlZFN0YWNrTmFtZS9Bbm90aGVySGFzaFdlRG9uJ3ROZWVkXG4gICAgLy8gc28gd2UgZ2V0IHRoZSBBUk4gYW5kIG1hbnVhbGx5IGV4dHJhY3QgdGhlIG5hbWUuXG4gICAgY29uc3QgbmVzdGVkU3RhY2tBcm4gPSBhd2FpdCB0aGlzLmdldE5lc3RlZFN0YWNrQXJuKG5lc3RlZFN0YWNrTG9naWNhbElkLCBsaXN0U3RhY2tSZXNvdXJjZXMpO1xuICAgIGNvbnN0IGRlcGxveWVkU3RhY2tOYW1lID0gbmVzdGVkU3RhY2tBcm4/LnNsaWNlKG5lc3RlZFN0YWNrQXJuLmluZGV4T2YoJy8nKSArIDEsIG5lc3RlZFN0YWNrQXJuLmxhc3RJbmRleE9mKCcvJykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZFRlbXBsYXRlOiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhuZXN0ZWRUZW1wbGF0ZVBhdGgsICd1dGYtOCcpKSxcbiAgICAgIGRlcGxveWVkVGVtcGxhdGU6IGRlcGxveWVkU3RhY2tOYW1lXG4gICAgICAgID8gYXdhaXQgdGhpcy5yZWFkQ3VycmVudFN0YWNrVGVtcGxhdGUoZGVwbG95ZWRTdGFja05hbWUsIHNkaylcbiAgICAgICAgOiB7fSxcbiAgICAgIGRlcGxveWVkU3RhY2tOYW1lLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE5lc3RlZFN0YWNrQXJuKFxuICAgIG5lc3RlZFN0YWNrTG9naWNhbElkOiBzdHJpbmcsIGxpc3RTdGFja1Jlc291cmNlcz86IExpc3RTdGFja1Jlc291cmNlcyxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhY2tSZXNvdXJjZXMgPSBhd2FpdCBsaXN0U3RhY2tSZXNvdXJjZXM/Lmxpc3RTdGFja1Jlc291cmNlcygpO1xuICAgICAgcmV0dXJuIHN0YWNrUmVzb3VyY2VzPy5maW5kKHNyID0+IHNyLkxvZ2ljYWxSZXNvdXJjZUlkID09PSBuZXN0ZWRTdGFja0xvZ2ljYWxJZCk/LlBoeXNpY2FsUmVzb3VyY2VJZDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ1N0YWNrIHdpdGggaWQgJykgJiYgZS5tZXNzYWdlLmVuZHNXaXRoKCcgZG9lcyBub3QgZXhpc3QnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNDZGtNYW5hZ2VkTmVzdGVkU3RhY2soc3RhY2tSZXNvdXJjZTogYW55KTogc3RhY2tSZXNvdXJjZSBpcyBOZXN0ZWRTdGFja1Jlc291cmNlIHtcbiAgICByZXR1cm4gc3RhY2tSZXNvdXJjZS5UeXBlID09PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snICYmIHN0YWNrUmVzb3VyY2UuTWV0YWRhdGEgJiYgc3RhY2tSZXNvdXJjZS5NZXRhZGF0YVsnYXdzOmFzc2V0OnBhdGgnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVudmlyb25tZW50IG5lY2Vzc2FyeSBmb3IgdG91Y2hpbmcgdGhlIGdpdmVuIHN0YWNrXG4gICAqXG4gICAqIFJldHVybnMgdGhlIGZvbGxvd2luZzpcbiAgICpcbiAgICogLSBUaGUgcmVzb2x2ZWQgZW52aXJvbm1lbnQgZm9yIHRoZSBzdGFjayAobm8gbW9yZSAndW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJylcbiAgICogLSBTREsgbG9hZGVkIHdpdGggdGhlIHJpZ2h0IGNyZWRlbnRpYWxzIGZvciBjYWxsaW5nIGBDcmVhdGVDaGFuZ2VTZXRgLlxuICAgKiAtIFRoZSBFeGVjdXRpb24gUm9sZSB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByZXBhcmVTZGtGb3IoXG4gICAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICByb2xlQXJuPzogc3RyaW5nLFxuICAgIG1vZGUgPSBNb2RlLkZvcldyaXRpbmcsXG4gICk6IFByb21pc2U8UHJlcGFyZWRTZGtGb3JFbnZpcm9ubWVudD4ge1xuICAgIGlmICghc3RhY2suZW52aXJvbm1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHN0YWNrICR7c3RhY2suZGlzcGxheU5hbWV9IGRvZXMgbm90IGhhdmUgYW4gZW52aXJvbm1lbnRgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZEVudmlyb25tZW50ID0gYXdhaXQgdGhpcy5zZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2suZW52aXJvbm1lbnQpO1xuXG4gICAgLy8gU3Vic3RpdHV0ZSBhbnkgcGxhY2Vob2xkZXJzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnRcbiAgICBjb25zdCBhcm5zID0gYXdhaXQgcmVwbGFjZUVudlBsYWNlaG9sZGVycyh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiBzdGFjay5hc3N1bWVSb2xlQXJuLFxuXG4gICAgICAvLyBVc2UgdGhlIG92ZXJyaWRlIGlmIGdpdmVuLCBvdGhlcndpc2UgdXNlIHRoZSBmaWVsZCBmcm9tIHRoZSBzdGFja1xuICAgICAgY2xvdWRGb3JtYXRpb25Sb2xlQXJuOiByb2xlQXJuID8/IHN0YWNrLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUm9sZUFybixcbiAgICB9LCByZXNvbHZlZEVudmlyb25tZW50LCB0aGlzLnNka1Byb3ZpZGVyKTtcblxuICAgIGNvbnN0IHN0YWNrU2RrID0gYXdhaXQgdGhpcy5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudmlyb25tZW50LCBtb2RlLCB7XG4gICAgICBhc3N1bWVSb2xlQXJuOiBhcm5zLmFzc3VtZVJvbGVBcm4sXG4gICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogc3RhY2suYXNzdW1lUm9sZUV4dGVybmFsSWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhY2tTZGs6IHN0YWNrU2RrLnNkayxcbiAgICAgIHJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgICBjbG91ZEZvcm1hdGlvblJvbGVBcm46IGFybnMuY2xvdWRGb3JtYXRpb25Sb2xlQXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBhbGwgYXNzZXQgbWFuaWZlc3RzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGdpdmVuIHN0YWNrXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHB1Ymxpc2hTdGFja0Fzc2V0cyhzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LCB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8pIHtcbiAgICBjb25zdCBzdGFja0VudiA9IGF3YWl0IHRoaXMuc2RrUHJvdmlkZXIucmVzb2x2ZUVudmlyb25tZW50KHN0YWNrLmVudmlyb25tZW50KTtcbiAgICBjb25zdCBhc3NldEFydGlmYWN0cyA9IHN0YWNrLmRlcGVuZGVuY2llcy5maWx0ZXIoaXNBc3NldE1hbmlmZXN0QXJ0aWZhY3QpO1xuXG4gICAgZm9yIChjb25zdCBhc3NldEFydGlmYWN0IG9mIGFzc2V0QXJ0aWZhY3RzKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQm9vdHN0cmFwU3RhY2tWZXJzaW9uKFxuICAgICAgICBzdGFjay5zdGFja05hbWUsXG4gICAgICAgIGFzc2V0QXJ0aWZhY3QucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24sXG4gICAgICAgIGFzc2V0QXJ0aWZhY3QuYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyLFxuICAgICAgICB0b29sa2l0SW5mbyk7XG5cbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gQXNzZXRNYW5pZmVzdC5mcm9tRmlsZShhc3NldEFydGlmYWN0LmZpbGUpO1xuICAgICAgYXdhaXQgcHVibGlzaEFzc2V0cyhtYW5pZmVzdCwgdGhpcy5zZGtQcm92aWRlciwgc3RhY2tFbnYpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBib290c3RyYXAgc3RhY2sgaGFzIHRoZSByaWdodCB2ZXJzaW9uIGZvciB0aGlzIHN0YWNrXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlQm9vdHN0cmFwU3RhY2tWZXJzaW9uKFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvKSB7XG5cbiAgICBpZiAocmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24gPT09IHVuZGVmaW5lZCkgeyByZXR1cm47IH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0b29sa2l0SW5mby52YWxpZGF0ZVZlcnNpb24ocmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24sIGJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N0YWNrTmFtZX06ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0Fzc2V0TWFuaWZlc3RBcnRpZmFjdChhcnQ6IGN4YXBpLkNsb3VkQXJ0aWZhY3QpOiBhcnQgaXMgY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0IHtcbiAgcmV0dXJuIGFydCBpbnN0YW5jZW9mIGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdDtcbn1cblxuaW50ZXJmYWNlIFN0YWNrVGVtcGxhdGVzIHtcbiAgcmVhZG9ubHkgZ2VuZXJhdGVkVGVtcGxhdGU6IGFueTtcbiAgcmVhZG9ubHkgZGVwbG95ZWRUZW1wbGF0ZTogYW55O1xuICByZWFkb25seSBkZXBsb3llZFN0YWNrTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgTmVzdGVkU3RhY2tSZXNvdXJjZSB7XG4gIHJlYWRvbmx5IE1ldGFkYXRhOiB7ICdhd3M6YXNzZXQ6cGF0aCc6IHN0cmluZyB9O1xuICByZWFkb25seSBQcm9wZXJ0aWVzOiBhbnk7XG59XG4iXX0=
@@ -204,4 +204,4 @@ async function applyHotswappableChange(sdk, hotswapOperation) {
204
204
  sdk.removeCustomUserAgent(customUserAgent);
205
205
  }
206
206
  }
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAtZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBQXlEO0FBRXpELCtCQUErQjtBQUMvQix3Q0FBbUM7QUFDbkMseUNBQXFEO0FBRXJELHlGQUE0RztBQUM1Ryx1RUFBcUY7QUFDckYsNkNBQWlJO0FBQ2pJLHlEQUF3RTtBQUN4RSxpRUFBZ0Y7QUFDaEYsMkVBQXlGO0FBQ3pGLHlGQUEwRjtBQUcxRjs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFdBQXdCLEVBQUUsV0FBc0MsRUFDaEUsbUJBQXdDLEVBQUUsYUFBZ0Q7SUFFMUYsMkZBQTJGO0lBQzNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRiw4R0FBOEc7SUFDOUcsa0dBQWtHO0lBQ2xHLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxlQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDakYsc0NBQXNDO0lBQ3RDLHNHQUFzRztJQUN0Ryw4R0FBOEc7SUFDOUcsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLHlEQUFzQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGlFQUE4QixDQUFDO1FBQzdELGFBQWE7UUFDYixVQUFVLEVBQUUsV0FBVztRQUN2QixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDNUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLFNBQVMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsU0FBUztRQUNqRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVB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QWdCLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxHQUFTLEVBQUUsZ0JBQWtDO0lBQ2xGLDhFQUE4RTtJQUM5RSxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUUsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTNDLElBQUk7UUFDRixLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNqRCxlQUFLLENBQUMsTUFBTSxhQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFDO1lBQVM7UUFDUixLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNqRCxlQUFLLENBQUMsR0FBRyxhQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN0RTtRQUNELEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUM1QztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZm5fZGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBwcmludCB9IGZyb20gJy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgSVNESywgTW9kZSwgU2RrUHJvdmlkZXIgfSBmcm9tICcuL2F3cy1hdXRoJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLCBMYXp5TGlzdFN0YWNrUmVzb3VyY2VzIH0gZnJvbSAnLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUNvZGVCdWlsZFByb2plY3RDaGFuZ2UgfSBmcm9tICcuL2hvdHN3YXAvY29kZS1idWlsZC1wcm9qZWN0cyc7XG5pbXBvcnQgeyBJQ09OLCBDaGFuZ2VIb3Rzd2FwSW1wYWN0LCBDaGFuZ2VIb3Rzd2FwUmVzdWx0LCBIb3Rzd2FwT3BlcmF0aW9uLCBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUgfSBmcm9tICcuL2hvdHN3YXAvY29tbW9uJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlRWNzU2VydmljZUNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9lY3Mtc2VydmljZXMnO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9sYW1iZGEtZnVuY3Rpb25zJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlIH0gZnJvbSAnLi9ob3Rzd2FwL3MzLWJ1Y2tldC1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9zdGVwZnVuY3Rpb25zLXN0YXRlLW1hY2hpbmVzJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsXG4gKiBzaG9ydC1jaXJjdWl0aW5nIENsb3VkRm9ybWF0aW9uIGlmIHBvc3NpYmxlLlxuICogSWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudFxuICogKGJlY2F1c2UgdGhlIENESyBTdGFjayBjb250YWlucyBjaGFuZ2VzIHRoYXQgY2Fubm90IGJlIGRlcGxveWVkIHdpdGhvdXQgQ2xvdWRGb3JtYXRpb24pLFxuICogcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUhvdHN3YXBEZXBsb3ltZW50KFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGFzc2V0UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLCBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4pOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIC8vIHJlc29sdmUgdGhlIGVudmlyb25tZW50LCBzbyB3ZSBjYW4gc3Vic3RpdHV0ZSB0aGluZ3MgbGlrZSBBV1M6OlJlZ2lvbiBpbiBDRk4gZXhwcmVzc2lvbnNcbiAgY29uc3QgcmVzb2x2ZWRFbnYgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2tBcnRpZmFjdC5lbnZpcm9ubWVudCk7XG4gIC8vIGNyZWF0ZSBhIG5ldyBTREsgdXNpbmcgdGhlIENMSSBjcmVkZW50aWFscywgYmVjYXVzZSB0aGUgZGVmYXVsdCBvbmUgd2lsbCBub3Qgd29yayBmb3IgbmV3LXN0eWxlIHN5bnRoZXNpcyAtXG4gIC8vIGl0IGFzc3VtZXMgdGhlIGJvb3RzdHJhcCBkZXBsb3kgUm9sZSwgd2hpY2ggZG9lc24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBMYW1iZGEgZnVuY3Rpb25zXG4gIGNvbnN0IHNkayA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudiwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuICAvLyBUaGUgY3VycmVudCByZXNvdXJjZXMgb2YgdGhlIFN0YWNrLlxuICAvLyBXZSBuZWVkIHRoZW0gdG8gZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgbmFtZSBvZiBhIHJlc291cmNlIGluIGNhc2UgaXQgd2Fzbid0IHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAgLy8gV2UgZmV0Y2ggaXQgbGF6aWx5LCB0byBzYXZlIGEgc2VydmljZSBjYWxsLCBpbiBjYXNlIGFsbCBob3Rzd2FwcGVkIHJlc291cmNlcyBoYXZlIHRoZWlyIHBoeXNpY2FsIG5hbWVzIHNldC5cbiAgY29uc3QgbGlzdFN0YWNrUmVzb3VyY2VzID0gbmV3IExhenlMaXN0U3RhY2tSZXNvdXJjZXMoc2RrLCBzdGFja0FydGlmYWN0LnN0YWNrTmFtZSk7XG4gIGNvbnN0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUgPSBuZXcgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKHtcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIHBhcmFtZXRlcnM6IGFzc2V0UGFyYW1zLFxuICAgIGFjY291bnQ6IHJlc29sdmVkRW52LmFjY291bnQsXG4gICAgcmVnaW9uOiByZXNvbHZlZEVudi5yZWdpb24sXG4gICAgcGFydGl0aW9uOiAoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLnBhcnRpdGlvbixcbiAgICB1cmxTdWZmaXg6IChyZWdpb24pID0+IHNkay5nZXRFbmRwb2ludFN1ZmZpeChyZWdpb24pLFxuICAgIGxpc3RTdGFja1Jlc291cmNlcyxcbiAgfSk7XG5cbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0gYXdhaXQgY2xvdWRGb3JtYXRpb25TdGFjay50ZW1wbGF0ZSgpO1xuICBjb25zdCBzdGFja0NoYW5nZXMgPSBjZm5fZGlmZi5kaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBzdGFja0FydGlmYWN0LnRlbXBsYXRlKTtcbiAgY29uc3QgaG90c3dhcHBhYmxlQ2hhbmdlcyA9IGF3YWl0IGZpbmRBbGxIb3Rzd2FwcGFibGVDaGFuZ2VzKHN0YWNrQ2hhbmdlcywgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG4gIGlmICghaG90c3dhcHBhYmxlQ2hhbmdlcykge1xuICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZSBjaGFuZ2VzIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IGNhbm5vdCBiZSBzaG9ydC1jaXJjdWl0ZWRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gYXBwbHkgdGhlIHNob3J0LWNpcmN1aXRhYmxlIGNoYW5nZXNcbiAgYXdhaXQgYXBwbHlBbGxIb3Rzd2FwcGFibGVDaGFuZ2VzKHNkaywgaG90c3dhcHBhYmxlQ2hhbmdlcyk7XG5cbiAgcmV0dXJuIHsgbm9PcDogaG90c3dhcHBhYmxlQ2hhbmdlcy5sZW5ndGggPT09IDAsIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kQWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhcbiAgc3RhY2tDaGFuZ2VzOiBjZm5fZGlmZi5UZW1wbGF0ZURpZmYsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8SG90c3dhcE9wZXJhdGlvbltdIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlc291cmNlRGlmZmVyZW5jZXMgPSBnZXRTdGFja1Jlc291cmNlRGlmZmVyZW5jZXMoc3RhY2tDaGFuZ2VzKTtcblxuICBsZXQgZm91bmROb25Ib3Rzd2FwcGFibGVDaGFuZ2UgPSBmYWxzZTtcbiAgY29uc3QgcHJvbWlzZXM6IEFycmF5PEFycmF5PFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4+PiA9IFtdO1xuICAvLyBnYXRoZXIgdGhlIHJlc3VsdHMgb2YgdGhlIGRldGVjdG9yIGZ1bmN0aW9uc1xuICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzb3VyY2VEaWZmZXJlbmNlcykpIHtcbiAgICBjb25zdCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uID0gaXNDYW5kaWRhdGVGb3JIb3Rzd2FwcGluZyhjaGFuZ2UpO1xuXG4gICAgaWYgKHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24gPT09IENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UKSB7XG4gICAgICBmb3VuZE5vbkhvdHN3YXBwYWJsZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQpIHtcbiAgICAgIC8vIGVtcHR5ICdpZicganVzdCBmb3IgZmxvdy1hd2FyZSB0eXBpbmcgdG8ga2ljayBpbi4uLlxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlcy5wdXNoKFtcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShsb2dpY2FsSWQsIHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24sIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpLFxuICAgICAgICBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZShsb2dpY2FsSWQsIHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24sIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpLFxuICAgICAgICBpc0hvdHN3YXBwYWJsZUVjc1NlcnZpY2VDaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVTM0J1Y2tldERlcGxveW1lbnRDaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVDb2RlQnVpbGRQcm9qZWN0Q2hhbmdlKGxvZ2ljYWxJZCwgcmVzb3VyY2VIb3Rzd2FwRXZhbHVhdGlvbiwgZXZhbHVhdGVDZm5UZW1wbGF0ZSksXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXNvbHZlIGFsbCBkZXRlY3RvciByZXN1bHRzXG4gIGNvbnN0IGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzOiBBcnJheTxBcnJheTxDaGFuZ2VIb3Rzd2FwUmVzdWx0Pj4gPSBbXTtcbiAgZm9yIChjb25zdCBkZXRlY3RvclJlc3VsdFByb21pc2VzIG9mIHByb21pc2VzKSB7XG4gICAgY29uc3QgaG90c3dhcERldGVjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChkZXRlY3RvclJlc3VsdFByb21pc2VzKTtcbiAgICBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0cy5wdXNoKGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzKTtcbiAgfVxuXG4gIGNvbnN0IGhvdHN3YXBwYWJsZVJlc291cmNlcyA9IG5ldyBBcnJheTxIb3Rzd2FwT3BlcmF0aW9uPigpO1xuICBmb3IgKGNvbnN0IGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzIG9mIGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzKSB7XG4gICAgY29uc3QgcGVyQ2hhbmdlSG90c3dhcHBhYmxlUmVzb3VyY2VzID0gbmV3IEFycmF5PEhvdHN3YXBPcGVyYXRpb24+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBob3Rzd2FwRGV0ZWN0aW9uUmVzdWx0cykge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBlckNoYW5nZUhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZm91bmQgYW55IGhvdHN3YXBwYWJsZSBjaGFuZ2VzLCByZXR1cm4gbm93XG4gICAgaWYgKHBlckNoYW5nZUhvdHN3YXBwYWJsZVJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBob3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaCguLi5wZXJDaGFuZ2VIb3Rzd2FwcGFibGVSZXNvdXJjZXMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbm8gaG90c3dhcHBhYmxlIGNoYW5nZXMgZm91bmQsIHNvIGF0IGxlYXN0IG9uZSBJUlJFTEVWQU5UIG1lYW5zIHdlIGNhbiBpZ25vcmUgdGhpcyBjaGFuZ2U7XG4gICAgLy8gb3RoZXJ3aXNlLCBhbGwgYW5zd2VycyBhcmUgUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5ULCBzbyB0aGlzIG1lYW5zIHdlIGNhbid0IGhvdHN3YXAgdGhpcyBjaGFuZ2UsXG4gICAgLy8gYW5kIGhhdmUgdG8gZG8gYSBmdWxsIGRlcGxveW1lbnQgaW5zdGVhZFxuICAgIGlmICghaG90c3dhcERldGVjdGlvblJlc3VsdHMuc29tZShoZHIgPT4gaGRyID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQpKSB7XG4gICAgICBmb3VuZE5vbkhvdHN3YXBwYWJsZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvdW5kTm9uSG90c3dhcHBhYmxlQ2hhbmdlID8gdW5kZWZpbmVkIDogaG90c3dhcHBhYmxlUmVzb3VyY2VzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNoYW5nZXMgdG8gcmVzb3VyY2VzIGluIHRoZSBnaXZlbiBTdGFjay5cbiAqXG4gKiBAcGFyYW0gc3RhY2tDaGFuZ2VzIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCBjaGFuZ2VzIHRvIGEgZ2l2ZW4gU3RhY2tcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhY2tSZXNvdXJjZURpZmZlcmVuY2VzKHN0YWNrQ2hhbmdlczogY2ZuX2RpZmYuVGVtcGxhdGVEaWZmKTogeyBbbG9naWNhbElkOiBzdHJpbmddOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UgfSB7XG4gIC8vIHdlIG5lZWQgdG8gY29sbGFwc2UgbG9naWNhbCBJRCByZW5hbWUgY2hhbmdlcyBpbnRvIG9uZSBjaGFuZ2UsXG4gIC8vIGFzIHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIHN0YWNrQ2hhbmdlcyBhcyBhIHBhaXIgb2YgdHdvIGNoYW5nZXM6IG9uZSBhZGRpdGlvbiBhbmQgb25lIHJlbW92YWxcbiAgY29uc3QgYWxsUmVzb3VyY2VDaGFuZ2VzOiB7IFtsb2dJZDogc3RyaW5nXTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlIH0gPSBzdGFja0NoYW5nZXMucmVzb3VyY2VzLmNoYW5nZXM7XG4gIGNvbnN0IGFsbFJlbW92YWxDaGFuZ2VzID0gZmlsdGVyRGljdChhbGxSZXNvdXJjZUNoYW5nZXMsIHJlc0NoYW5nZSA9PiByZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgY29uc3QgYWxsTm9uUmVtb3ZhbENoYW5nZXMgPSBmaWx0ZXJEaWN0KGFsbFJlc291cmNlQ2hhbmdlcywgcmVzQ2hhbmdlID0+ICFyZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgZm9yIChjb25zdCBbbG9nSWQsIG5vblJlbW92YWxDaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGFsbE5vblJlbW92YWxDaGFuZ2VzKSkge1xuICAgIGlmIChub25SZW1vdmFsQ2hhbmdlLmlzQWRkaXRpb24pIHtcbiAgICAgIGNvbnN0IGFkZENoYW5nZSA9IG5vblJlbW92YWxDaGFuZ2U7XG4gICAgICAvLyBzZWFyY2ggZm9yIGFuIGlkZW50aWNhbCByZW1vdmFsIGNoYW5nZVxuICAgICAgY29uc3QgaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSA9IE9iamVjdC5lbnRyaWVzKGFsbFJlbW92YWxDaGFuZ2VzKS5maW5kKChbXywgcmVtQ2hhbmdlXSkgPT4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlc0FyZUZvclNhbWVSZXNvdXJjZShyZW1DaGFuZ2UsIGFkZENoYW5nZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHdlIGZvdW5kIG9uZSwgdGhlbiB0aGlzIG1lYW5zIHRoaXMgaXMgYSByZW5hbWUgY2hhbmdlXG4gICAgICBpZiAoaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSkge1xuICAgICAgICBjb25zdCBbcmVtb3ZlZExvZ0lkLCByZW1vdmVkUmVzb3VyY2VDaGFuZ2VdID0gaWRlbnRpY2FsUmVtb3ZhbENoYW5nZTtcbiAgICAgICAgYWxsTm9uUmVtb3ZhbENoYW5nZXNbbG9nSWRdID0gbWFrZVJlbmFtZURpZmZlcmVuY2UocmVtb3ZlZFJlc291cmNlQ2hhbmdlLCBhZGRDaGFuZ2UpO1xuICAgICAgICAvLyBkZWxldGUgdGhlIHJlbW92YWwgY2hhbmdlIHRoYXQgZm9ybXMgdGhlIHJlbmFtZSBwYWlyXG4gICAgICAgIGRlbGV0ZSBhbGxSZW1vdmFsQ2hhbmdlc1tyZW1vdmVkTG9nSWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyB0aGUgZmluYWwgcmVzdWx0IGFyZSBhbGwgb2YgdGhlIHJlbWFpbmluZyByZW1vdmFsIGNoYW5nZXMsXG4gIC8vIHBsdXMgYWxsIG9mIHRoZSBub24tcmVtb3ZhbCBjaGFuZ2VzXG4gIC8vICh3ZSBzYXZlZCB0aGUgcmVuYW1lIGNoYW5nZXMgaW4gdGhhdCBvYmplY3QgYWxyZWFkeSlcbiAgcmV0dXJuIHtcbiAgICAuLi5hbGxSZW1vdmFsQ2hhbmdlcyxcbiAgICAuLi5hbGxOb25SZW1vdmFsQ2hhbmdlcyxcbiAgfTtcbn1cblxuLyoqIEZpbHRlcnMgYW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMgYmFzZWQgb24gd2hldGhlciB0aGUgY2FsbGJhY2sgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBnaXZlbiB2YWx1ZSBpbiB0aGUgb2JqZWN0LiAqL1xuZnVuY3Rpb24gZmlsdGVyRGljdDxUPihkaWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgZnVuYzogKHQ6IFQpID0+IGJvb2xlYW4pOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkaWN0KS5yZWR1Y2UoKGFjYywgW2tleSwgdF0pID0+IHtcbiAgICBpZiAoZnVuYyh0KSkge1xuICAgICAgYWNjW2tleV0gPSB0O1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyB7IFtrZXk6IHN0cmluZ106IFQgfSk7XG59XG5cbi8qKiBSZXR1cm5zICd0cnVlJyBpZiBhIHBhaXIgb2YgY2hhbmdlcyBpcyBmb3IgdGhlIHNhbWUgcmVzb3VyY2UuICovXG5mdW5jdGlvbiBjaGFuZ2VzQXJlRm9yU2FtZVJlc291cmNlKG9sZENoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlLCBuZXdDaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2xkQ2hhbmdlLm9sZFJlc291cmNlVHlwZSA9PT0gbmV3Q2hhbmdlLm5ld1Jlc291cmNlVHlwZSAmJlxuICAgICAgLy8gdGhpcyBpc24ndCBncmVhdCwgYnV0IEkgZG9uJ3Qgd2FudCB0byBicmluZyBpbiBzb21ldGhpbmcgbGlrZSB1bmRlcnNjb3JlIGp1c3QgZm9yIHRoaXMgY29tcGFyaXNvblxuICAgICAgSlNPTi5zdHJpbmdpZnkob2xkQ2hhbmdlLm9sZFByb3BlcnRpZXMpID09PSBKU09OLnN0cmluZ2lmeShuZXdDaGFuZ2UubmV3UHJvcGVydGllcyk7XG59XG5cbmZ1bmN0aW9uIG1ha2VSZW5hbWVEaWZmZXJlbmNlKFxuICByZW1DaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSxcbiAgYWRkQ2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4pOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2Uge1xuICByZXR1cm4gbmV3IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZShcbiAgICAvLyB3ZSBoYXZlIHRvIGZpbGwgaW4gdGhlIG9sZCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhpcyB3aWxsIGJlIGNsYXNzaWZpZWQgYXMgYSBub24taG90c3dhcHBhYmxlIGNoYW5nZVxuICAgIHJlbUNoYW5nZS5vbGRWYWx1ZSxcbiAgICBhZGRDaGFuZ2UubmV3VmFsdWUsXG4gICAge1xuICAgICAgcmVzb3VyY2VUeXBlOiB7XG4gICAgICAgIG9sZFR5cGU6IHJlbUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUsXG4gICAgICAgIG5ld1R5cGU6IGFkZENoYW5nZS5uZXdSZXNvdXJjZVR5cGUsXG4gICAgICB9LFxuICAgICAgcHJvcGVydHlEaWZmczogKGFkZENoYW5nZSBhcyBhbnkpLnByb3BlcnR5RGlmZnMsXG4gICAgICBvdGhlckRpZmZzOiAoYWRkQ2hhbmdlIGFzIGFueSkub3RoZXJEaWZmcyxcbiAgICB9LFxuICApO1xufVxuXG4vKipcbiAqIHJldHVybnMgYENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UYCBpZiBhIHJlc291cmNlIHdhcyBkZWxldGVkLCBvciBhIGNoYW5nZSB0aGF0IHdlIGNhbm5vdCBzaG9ydC1jaXJjdWl0IG9jY3VyZWQuXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlRgIGlmIGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW1wYWN0IHNob3J0Y2lyY3VpdGluZyBvY2N1cmVkLCBzdWNoIGFzIGEgbWV0YWRhdGEgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBpc0NhbmRpZGF0ZUZvckhvdHN3YXBwaW5nKGNoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlKTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlIHwgQ2hhbmdlSG90c3dhcEltcGFjdCB7XG4gIC8vIGEgcmVzb3VyY2UgaGFzIGJlZW4gcmVtb3ZlZCBPUiBhIHJlc291cmNlIGhhcyBiZWVuIGFkZGVkOyB3ZSBjYW4ndCBzaG9ydC1jaXJjdWl0IHRoYXQgY2hhbmdlXG4gIGlmICghY2hhbmdlLm5ld1ZhbHVlIHx8ICFjaGFuZ2Uub2xkVmFsdWUpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICAvLyBJZ25vcmUgTWV0YWRhdGEgY2hhbmdlc1xuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkNESzo6TWV0YWRhdGEnKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmV3VmFsdWU6IGNoYW5nZS5uZXdWYWx1ZSxcbiAgICBwcm9wZXJ0eVVwZGF0ZXM6IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5QWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhzZGs6IElTREssIGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBPcGVyYXRpb25bXSk6IFByb21pc2U8dm9pZFtdPiB7XG4gIHByaW50KGBcXG4ke0lDT059IGhvdHN3YXBwaW5nIHJlc291cmNlczpgKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKGhvdHN3YXBwYWJsZUNoYW5nZXMubWFwKGhvdHN3YXBPcGVyYXRpb24gPT4ge1xuICAgIHJldHVybiBhcHBseUhvdHN3YXBwYWJsZUNoYW5nZShzZGssIGhvdHN3YXBPcGVyYXRpb24pO1xuICB9KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5SG90c3dhcHBhYmxlQ2hhbmdlKHNkazogSVNESywgaG90c3dhcE9wZXJhdGlvbjogSG90c3dhcE9wZXJhdGlvbik6IFByb21pc2U8YW55PiB7XG4gIC8vIG5vdGUgdGhlIHR5cGUgb2Ygc2VydmljZSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgaG90c3dhcHBlZCBpbiB0aGUgVXNlci1BZ2VudFxuICBjb25zdCBjdXN0b21Vc2VyQWdlbnQgPSBgY2RrLWhvdHN3YXAvc3VjY2Vzcy0ke2hvdHN3YXBPcGVyYXRpb24uc2VydmljZX1gO1xuICBzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgaG90c3dhcE9wZXJhdGlvbi5yZXNvdXJjZU5hbWVzKSB7XG4gICAgICBwcmludChgICAgJHtJQ09OfSAlc2AsIGNoYWxrLmJvbGQobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaG90c3dhcE9wZXJhdGlvbi5hcHBseShzZGspO1xuICB9IGZpbmFsbHkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBob3Rzd2FwT3BlcmF0aW9uLnJlc291cmNlTmFtZXMpIHtcbiAgICAgIHByaW50KGAke0lDT059ICVzICVzYCwgY2hhbGsuYm9sZChuYW1lKSwgY2hhbGsuZ3JlZW4oJ2hvdHN3YXBwZWQhJykpO1xuICAgIH1cbiAgICBzZGsucmVtb3ZlQ3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7XG4gIH1cbn1cblxuIl19
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAtZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBQXlEO0FBRXpELCtCQUErQjtBQUMvQix3Q0FBbUM7QUFDbkMseUNBQXFEO0FBRXJELHlGQUE0RztBQUM1Ryx1RUFBcUY7QUFDckYsNkNBQWlJO0FBQ2pJLHlEQUF3RTtBQUN4RSxpRUFBZ0Y7QUFDaEYsMkVBQXlGO0FBQ3pGLHlGQUEwRjtBQUcxRjs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFdBQXdCLEVBQUUsV0FBc0MsRUFDaEUsbUJBQXdDLEVBQUUsYUFBZ0Q7SUFFMUYsMkZBQTJGO0lBQzNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRiw4R0FBOEc7SUFDOUcsa0dBQWtHO0lBQ2xHLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxlQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDakYsc0NBQXNDO0lBQ3RDLHNHQUFzRztJQUN0Ryw4R0FBOEc7SUFDOUcsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLHlEQUFzQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGlFQUE4QixDQUFDO1FBQzdELGFBQWE7UUFDYixVQUFVLEVBQUUsV0FBVztRQUN2QixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDNUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLFNBQVMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsU0FBUztRQUNqRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVB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QWdCLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxHQUFTLEVBQUUsZ0JBQWtDO0lBQ2xGLDhFQUE4RTtJQUM5RSxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUUsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTNDLElBQUk7UUFDRixLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNqRCxlQUFLLENBQUMsTUFBTSxhQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFDO1lBQVM7UUFDUixLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNqRCxlQUFLLENBQUMsR0FBRyxhQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN0RTtRQUNELEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUM1QztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZm5fZGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBwcmludCB9IGZyb20gJy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgSVNESywgTW9kZSwgU2RrUHJvdmlkZXIgfSBmcm9tICcuL2F3cy1hdXRoJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLCBMYXp5TGlzdFN0YWNrUmVzb3VyY2VzIH0gZnJvbSAnLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUNvZGVCdWlsZFByb2plY3RDaGFuZ2UgfSBmcm9tICcuL2hvdHN3YXAvY29kZS1idWlsZC1wcm9qZWN0cyc7XG5pbXBvcnQgeyBJQ09OLCBDaGFuZ2VIb3Rzd2FwSW1wYWN0LCBDaGFuZ2VIb3Rzd2FwUmVzdWx0LCBIb3Rzd2FwT3BlcmF0aW9uLCBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUgfSBmcm9tICcuL2hvdHN3YXAvY29tbW9uJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlRWNzU2VydmljZUNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9lY3Mtc2VydmljZXMnO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9sYW1iZGEtZnVuY3Rpb25zJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlIH0gZnJvbSAnLi9ob3Rzd2FwL3MzLWJ1Y2tldC1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9zdGVwZnVuY3Rpb25zLXN0YXRlLW1hY2hpbmVzJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsXG4gKiBzaG9ydC1jaXJjdWl0aW5nIENsb3VkRm9ybWF0aW9uIGlmIHBvc3NpYmxlLlxuICogSWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudFxuICogKGJlY2F1c2UgdGhlIENESyBTdGFjayBjb250YWlucyBjaGFuZ2VzIHRoYXQgY2Fubm90IGJlIGRlcGxveWVkIHdpdGhvdXQgQ2xvdWRGb3JtYXRpb24pLFxuICogcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUhvdHN3YXBEZXBsb3ltZW50KFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGFzc2V0UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLCBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4pOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIC8vIHJlc29sdmUgdGhlIGVudmlyb25tZW50LCBzbyB3ZSBjYW4gc3Vic3RpdHV0ZSB0aGluZ3MgbGlrZSBBV1M6OlJlZ2lvbiBpbiBDRk4gZXhwcmVzc2lvbnNcbiAgY29uc3QgcmVzb2x2ZWRFbnYgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2tBcnRpZmFjdC5lbnZpcm9ubWVudCk7XG4gIC8vIGNyZWF0ZSBhIG5ldyBTREsgdXNpbmcgdGhlIENMSSBjcmVkZW50aWFscywgYmVjYXVzZSB0aGUgZGVmYXVsdCBvbmUgd2lsbCBub3Qgd29yayBmb3IgbmV3LXN0eWxlIHN5bnRoZXNpcyAtXG4gIC8vIGl0IGFzc3VtZXMgdGhlIGJvb3RzdHJhcCBkZXBsb3kgUm9sZSwgd2hpY2ggZG9lc24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBMYW1iZGEgZnVuY3Rpb25zXG4gIGNvbnN0IHNkayA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudiwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuICAvLyBUaGUgY3VycmVudCByZXNvdXJjZXMgb2YgdGhlIFN0YWNrLlxuICAvLyBXZSBuZWVkIHRoZW0gdG8gZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgbmFtZSBvZiBhIHJlc291cmNlIGluIGNhc2UgaXQgd2Fzbid0IHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAgLy8gV2UgZmV0Y2ggaXQgbGF6aWx5LCB0byBzYXZlIGEgc2VydmljZSBjYWxsLCBpbiBjYXNlIGFsbCBob3Rzd2FwcGVkIHJlc291cmNlcyBoYXZlIHRoZWlyIHBoeXNpY2FsIG5hbWVzIHNldC5cbiAgY29uc3QgbGlzdFN0YWNrUmVzb3VyY2VzID0gbmV3IExhenlMaXN0U3RhY2tSZXNvdXJjZXMoc2RrLCBzdGFja0FydGlmYWN0LnN0YWNrTmFtZSk7XG4gIGNvbnN0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUgPSBuZXcgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKHtcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIHBhcmFtZXRlcnM6IGFzc2V0UGFyYW1zLFxuICAgIGFjY291bnQ6IHJlc29sdmVkRW52LmFjY291bnQsXG4gICAgcmVnaW9uOiByZXNvbHZlZEVudi5yZWdpb24sXG4gICAgcGFydGl0aW9uOiAoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLnBhcnRpdGlvbixcbiAgICB1cmxTdWZmaXg6IChyZWdpb24pID0+IHNkay5nZXRFbmRwb2ludFN1ZmZpeChyZWdpb24pLFxuICAgIGxpc3RTdGFja1Jlc291cmNlcyxcbiAgfSk7XG5cbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0gYXdhaXQgY2xvdWRGb3JtYXRpb25TdGFjay50ZW1wbGF0ZSgpO1xuICBjb25zdCBzdGFja0NoYW5nZXMgPSBjZm5fZGlmZi5kaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBzdGFja0FydGlmYWN0LnRlbXBsYXRlKTtcbiAgY29uc3QgaG90c3dhcHBhYmxlQ2hhbmdlcyA9IGF3YWl0IGZpbmRBbGxIb3Rzd2FwcGFibGVDaGFuZ2VzKHN0YWNrQ2hhbmdlcywgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG4gIGlmICghaG90c3dhcHBhYmxlQ2hhbmdlcykge1xuICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZSBjaGFuZ2VzIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IGNhbm5vdCBiZSBzaG9ydC1jaXJjdWl0ZWRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gYXBwbHkgdGhlIHNob3J0LWNpcmN1aXRhYmxlIGNoYW5nZXNcbiAgYXdhaXQgYXBwbHlBbGxIb3Rzd2FwcGFibGVDaGFuZ2VzKHNkaywgaG90c3dhcHBhYmxlQ2hhbmdlcyk7XG5cbiAgcmV0dXJuIHsgbm9PcDogaG90c3dhcHBhYmxlQ2hhbmdlcy5sZW5ndGggPT09IDAsIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kQWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhcbiAgc3RhY2tDaGFuZ2VzOiBjZm5fZGlmZi5UZW1wbGF0ZURpZmYsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8SG90c3dhcE9wZXJhdGlvbltdIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlc291cmNlRGlmZmVyZW5jZXMgPSBnZXRTdGFja1Jlc291cmNlRGlmZmVyZW5jZXMoc3RhY2tDaGFuZ2VzKTtcblxuICBsZXQgZm91bmROb25Ib3Rzd2FwcGFibGVDaGFuZ2UgPSBmYWxzZTtcbiAgY29uc3QgcHJvbWlzZXM6IEFycmF5PEFycmF5PFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4+PiA9IFtdO1xuICAvLyBnYXRoZXIgdGhlIHJlc3VsdHMgb2YgdGhlIGRldGVjdG9yIGZ1bmN0aW9uc1xuICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzb3VyY2VEaWZmZXJlbmNlcykpIHtcbiAgICBjb25zdCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uID0gaXNDYW5kaWRhdGVGb3JIb3Rzd2FwcGluZyhjaGFuZ2UpO1xuXG4gICAgaWYgKHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24gPT09IENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UKSB7XG4gICAgICBmb3VuZE5vbkhvdHN3YXBwYWJsZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQpIHtcbiAgICAgIC8vIGVtcHR5ICdpZicganVzdCBmb3IgZmxvdy1hd2FyZSB0eXBpbmcgdG8ga2ljayBpbi4uLlxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlcy5wdXNoKFtcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShsb2dpY2FsSWQsIHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24sIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpLFxuICAgICAgICBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZShsb2dpY2FsSWQsIHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24sIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpLFxuICAgICAgICBpc0hvdHN3YXBwYWJsZUVjc1NlcnZpY2VDaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVTM0J1Y2tldERlcGxveW1lbnRDaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVDb2RlQnVpbGRQcm9qZWN0Q2hhbmdlKGxvZ2ljYWxJZCwgcmVzb3VyY2VIb3Rzd2FwRXZhbHVhdGlvbiwgZXZhbHVhdGVDZm5UZW1wbGF0ZSksXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXNvbHZlIGFsbCBkZXRlY3RvciByZXN1bHRzXG4gIGNvbnN0IGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzOiBBcnJheTxBcnJheTxDaGFuZ2VIb3Rzd2FwUmVzdWx0Pj4gPSBbXTtcbiAgZm9yIChjb25zdCBkZXRlY3RvclJlc3VsdFByb21pc2VzIG9mIHByb21pc2VzKSB7XG4gICAgY29uc3QgaG90c3dhcERldGVjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChkZXRlY3RvclJlc3VsdFByb21pc2VzKTtcbiAgICBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0cy5wdXNoKGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzKTtcbiAgfVxuXG4gIGNvbnN0IGhvdHN3YXBwYWJsZVJlc291cmNlcyA9IG5ldyBBcnJheTxIb3Rzd2FwT3BlcmF0aW9uPigpO1xuICBmb3IgKGNvbnN0IGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzIG9mIGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzKSB7XG4gICAgY29uc3QgcGVyQ2hhbmdlSG90c3dhcHBhYmxlUmVzb3VyY2VzID0gbmV3IEFycmF5PEhvdHN3YXBPcGVyYXRpb24+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBob3Rzd2FwRGV0ZWN0aW9uUmVzdWx0cykge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBlckNoYW5nZUhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZm91bmQgYW55IGhvdHN3YXBwYWJsZSBjaGFuZ2VzLCByZXR1cm4gbm93XG4gICAgaWYgKHBlckNoYW5nZUhvdHN3YXBwYWJsZVJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBob3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaCguLi5wZXJDaGFuZ2VIb3Rzd2FwcGFibGVSZXNvdXJjZXMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbm8gaG90c3dhcHBhYmxlIGNoYW5nZXMgZm91bmQsIHNvIGF0IGxlYXN0IG9uZSBJUlJFTEVWQU5UIG1lYW5zIHdlIGNhbiBpZ25vcmUgdGhpcyBjaGFuZ2U7XG4gICAgLy8gb3RoZXJ3aXNlLCBhbGwgYW5zd2VycyBhcmUgUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5ULCBzbyB0aGlzIG1lYW5zIHdlIGNhbid0IGhvdHN3YXAgdGhpcyBjaGFuZ2UsXG4gICAgLy8gYW5kIGhhdmUgdG8gZG8gYSBmdWxsIGRlcGxveW1lbnQgaW5zdGVhZFxuICAgIGlmICghaG90c3dhcERldGVjdGlvblJlc3VsdHMuc29tZShoZHIgPT4gaGRyID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQpKSB7XG4gICAgICBmb3VuZE5vbkhvdHN3YXBwYWJsZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvdW5kTm9uSG90c3dhcHBhYmxlQ2hhbmdlID8gdW5kZWZpbmVkIDogaG90c3dhcHBhYmxlUmVzb3VyY2VzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNoYW5nZXMgdG8gcmVzb3VyY2VzIGluIHRoZSBnaXZlbiBTdGFjay5cbiAqXG4gKiBAcGFyYW0gc3RhY2tDaGFuZ2VzIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCBjaGFuZ2VzIHRvIGEgZ2l2ZW4gU3RhY2tcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhY2tSZXNvdXJjZURpZmZlcmVuY2VzKHN0YWNrQ2hhbmdlczogY2ZuX2RpZmYuVGVtcGxhdGVEaWZmKTogeyBbbG9naWNhbElkOiBzdHJpbmddOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UgfSB7XG4gIC8vIHdlIG5lZWQgdG8gY29sbGFwc2UgbG9naWNhbCBJRCByZW5hbWUgY2hhbmdlcyBpbnRvIG9uZSBjaGFuZ2UsXG4gIC8vIGFzIHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIHN0YWNrQ2hhbmdlcyBhcyBhIHBhaXIgb2YgdHdvIGNoYW5nZXM6IG9uZSBhZGRpdGlvbiBhbmQgb25lIHJlbW92YWxcbiAgY29uc3QgYWxsUmVzb3VyY2VDaGFuZ2VzOiB7IFtsb2dJZDogc3RyaW5nXTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlIH0gPSBzdGFja0NoYW5nZXMucmVzb3VyY2VzLmNoYW5nZXM7XG4gIGNvbnN0IGFsbFJlbW92YWxDaGFuZ2VzID0gZmlsdGVyRGljdChhbGxSZXNvdXJjZUNoYW5nZXMsIHJlc0NoYW5nZSA9PiByZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgY29uc3QgYWxsTm9uUmVtb3ZhbENoYW5nZXMgPSBmaWx0ZXJEaWN0KGFsbFJlc291cmNlQ2hhbmdlcywgcmVzQ2hhbmdlID0+ICFyZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgZm9yIChjb25zdCBbbG9nSWQsIG5vblJlbW92YWxDaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGFsbE5vblJlbW92YWxDaGFuZ2VzKSkge1xuICAgIGlmIChub25SZW1vdmFsQ2hhbmdlLmlzQWRkaXRpb24pIHtcbiAgICAgIGNvbnN0IGFkZENoYW5nZSA9IG5vblJlbW92YWxDaGFuZ2U7XG4gICAgICAvLyBzZWFyY2ggZm9yIGFuIGlkZW50aWNhbCByZW1vdmFsIGNoYW5nZVxuICAgICAgY29uc3QgaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSA9IE9iamVjdC5lbnRyaWVzKGFsbFJlbW92YWxDaGFuZ2VzKS5maW5kKChbXywgcmVtQ2hhbmdlXSkgPT4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlc0FyZUZvclNhbWVSZXNvdXJjZShyZW1DaGFuZ2UsIGFkZENoYW5nZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHdlIGZvdW5kIG9uZSwgdGhlbiB0aGlzIG1lYW5zIHRoaXMgaXMgYSByZW5hbWUgY2hhbmdlXG4gICAgICBpZiAoaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSkge1xuICAgICAgICBjb25zdCBbcmVtb3ZlZExvZ0lkLCByZW1vdmVkUmVzb3VyY2VDaGFuZ2VdID0gaWRlbnRpY2FsUmVtb3ZhbENoYW5nZTtcbiAgICAgICAgYWxsTm9uUmVtb3ZhbENoYW5nZXNbbG9nSWRdID0gbWFrZVJlbmFtZURpZmZlcmVuY2UocmVtb3ZlZFJlc291cmNlQ2hhbmdlLCBhZGRDaGFuZ2UpO1xuICAgICAgICAvLyBkZWxldGUgdGhlIHJlbW92YWwgY2hhbmdlIHRoYXQgZm9ybXMgdGhlIHJlbmFtZSBwYWlyXG4gICAgICAgIGRlbGV0ZSBhbGxSZW1vdmFsQ2hhbmdlc1tyZW1vdmVkTG9nSWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyB0aGUgZmluYWwgcmVzdWx0IGFyZSBhbGwgb2YgdGhlIHJlbWFpbmluZyByZW1vdmFsIGNoYW5nZXMsXG4gIC8vIHBsdXMgYWxsIG9mIHRoZSBub24tcmVtb3ZhbCBjaGFuZ2VzXG4gIC8vICh3ZSBzYXZlZCB0aGUgcmVuYW1lIGNoYW5nZXMgaW4gdGhhdCBvYmplY3QgYWxyZWFkeSlcbiAgcmV0dXJuIHtcbiAgICAuLi5hbGxSZW1vdmFsQ2hhbmdlcyxcbiAgICAuLi5hbGxOb25SZW1vdmFsQ2hhbmdlcyxcbiAgfTtcbn1cblxuLyoqIEZpbHRlcnMgYW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMgYmFzZWQgb24gd2hldGhlciB0aGUgY2FsbGJhY2sgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBnaXZlbiB2YWx1ZSBpbiB0aGUgb2JqZWN0LiAqL1xuZnVuY3Rpb24gZmlsdGVyRGljdDxUPihkaWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgZnVuYzogKHQ6IFQpID0+IGJvb2xlYW4pOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkaWN0KS5yZWR1Y2UoKGFjYywgW2tleSwgdF0pID0+IHtcbiAgICBpZiAoZnVuYyh0KSkge1xuICAgICAgYWNjW2tleV0gPSB0O1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyB7IFtrZXk6IHN0cmluZ106IFQgfSk7XG59XG5cbi8qKiBSZXR1cm5zICd0cnVlJyBpZiBhIHBhaXIgb2YgY2hhbmdlcyBpcyBmb3IgdGhlIHNhbWUgcmVzb3VyY2UuICovXG5mdW5jdGlvbiBjaGFuZ2VzQXJlRm9yU2FtZVJlc291cmNlKG9sZENoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlLCBuZXdDaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2xkQ2hhbmdlLm9sZFJlc291cmNlVHlwZSA9PT0gbmV3Q2hhbmdlLm5ld1Jlc291cmNlVHlwZSAmJlxuICAgICAgLy8gdGhpcyBpc24ndCBncmVhdCwgYnV0IEkgZG9uJ3Qgd2FudCB0byBicmluZyBpbiBzb21ldGhpbmcgbGlrZSB1bmRlcnNjb3JlIGp1c3QgZm9yIHRoaXMgY29tcGFyaXNvblxuICAgICAgSlNPTi5zdHJpbmdpZnkob2xkQ2hhbmdlLm9sZFByb3BlcnRpZXMpID09PSBKU09OLnN0cmluZ2lmeShuZXdDaGFuZ2UubmV3UHJvcGVydGllcyk7XG59XG5cbmZ1bmN0aW9uIG1ha2VSZW5hbWVEaWZmZXJlbmNlKFxuICByZW1DaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSxcbiAgYWRkQ2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4pOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2Uge1xuICByZXR1cm4gbmV3IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZShcbiAgICAvLyB3ZSBoYXZlIHRvIGZpbGwgaW4gdGhlIG9sZCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhpcyB3aWxsIGJlIGNsYXNzaWZpZWQgYXMgYSBub24taG90c3dhcHBhYmxlIGNoYW5nZVxuICAgIHJlbUNoYW5nZS5vbGRWYWx1ZSxcbiAgICBhZGRDaGFuZ2UubmV3VmFsdWUsXG4gICAge1xuICAgICAgcmVzb3VyY2VUeXBlOiB7XG4gICAgICAgIG9sZFR5cGU6IHJlbUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUsXG4gICAgICAgIG5ld1R5cGU6IGFkZENoYW5nZS5uZXdSZXNvdXJjZVR5cGUsXG4gICAgICB9LFxuICAgICAgcHJvcGVydHlEaWZmczogKGFkZENoYW5nZSBhcyBhbnkpLnByb3BlcnR5RGlmZnMsXG4gICAgICBvdGhlckRpZmZzOiAoYWRkQ2hhbmdlIGFzIGFueSkub3RoZXJEaWZmcyxcbiAgICB9LFxuICApO1xufVxuXG4vKipcbiAqIHJldHVybnMgYENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UYCBpZiBhIHJlc291cmNlIHdhcyBkZWxldGVkLCBvciBhIGNoYW5nZSB0aGF0IHdlIGNhbm5vdCBzaG9ydC1jaXJjdWl0IG9jY3VyZWQuXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlRgIGlmIGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW1wYWN0IHNob3J0Y2lyY3VpdGluZyBvY2N1cmVkLCBzdWNoIGFzIGEgbWV0YWRhdGEgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBpc0NhbmRpZGF0ZUZvckhvdHN3YXBwaW5nKGNoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlKTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlIHwgQ2hhbmdlSG90c3dhcEltcGFjdCB7XG4gIC8vIGEgcmVzb3VyY2UgaGFzIGJlZW4gcmVtb3ZlZCBPUiBhIHJlc291cmNlIGhhcyBiZWVuIGFkZGVkOyB3ZSBjYW4ndCBzaG9ydC1jaXJjdWl0IHRoYXQgY2hhbmdlXG4gIGlmICghY2hhbmdlLm5ld1ZhbHVlIHx8ICFjaGFuZ2Uub2xkVmFsdWUpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICAvLyBJZ25vcmUgTWV0YWRhdGEgY2hhbmdlc1xuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkNESzo6TWV0YWRhdGEnKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmV3VmFsdWU6IGNoYW5nZS5uZXdWYWx1ZSxcbiAgICBwcm9wZXJ0eVVwZGF0ZXM6IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5QWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhzZGs6IElTREssIGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBPcGVyYXRpb25bXSk6IFByb21pc2U8dm9pZFtdPiB7XG4gIHByaW50KGBcXG4ke0lDT059IGhvdHN3YXBwaW5nIHJlc291cmNlczpgKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKGhvdHN3YXBwYWJsZUNoYW5nZXMubWFwKGhvdHN3YXBPcGVyYXRpb24gPT4ge1xuICAgIHJldHVybiBhcHBseUhvdHN3YXBwYWJsZUNoYW5nZShzZGssIGhvdHN3YXBPcGVyYXRpb24pO1xuICB9KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5SG90c3dhcHBhYmxlQ2hhbmdlKHNkazogSVNESywgaG90c3dhcE9wZXJhdGlvbjogSG90c3dhcE9wZXJhdGlvbik6IFByb21pc2U8YW55PiB7XG4gIC8vIG5vdGUgdGhlIHR5cGUgb2Ygc2VydmljZSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgaG90c3dhcHBlZCBpbiB0aGUgVXNlci1BZ2VudFxuICBjb25zdCBjdXN0b21Vc2VyQWdlbnQgPSBgY2RrLWhvdHN3YXAvc3VjY2Vzcy0ke2hvdHN3YXBPcGVyYXRpb24uc2VydmljZX1gO1xuICBzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgaG90c3dhcE9wZXJhdGlvbi5yZXNvdXJjZU5hbWVzKSB7XG4gICAgICBwcmludChgICAgJHtJQ09OfSAlc2AsIGNoYWxrLmJvbGQobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaG90c3dhcE9wZXJhdGlvbi5hcHBseShzZGspO1xuICB9IGZpbmFsbHkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBob3Rzd2FwT3BlcmF0aW9uLnJlc291cmNlTmFtZXMpIHtcbiAgICAgIHByaW50KGAke0lDT059ICVzICVzYCwgY2hhbGsuYm9sZChuYW1lKSwgY2hhbGsuZ3JlZW4oJ2hvdHN3YXBwZWQhJykpO1xuICAgIH1cbiAgICBzZGsucmVtb3ZlQ3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7XG4gIH1cbn1cbiJdfQ==
package/lib/assets.js CHANGED
@@ -94,6 +94,7 @@ async function prepareDockerImageAsset(asset, assetManifest, toolkitInfo) {
94
94
  dockerBuildArgs: asset.buildArgs,
95
95
  dockerBuildTarget: asset.target,
96
96
  dockerFile: asset.file,
97
+ networkMode: asset.networkMode,
97
98
  }, {
98
99
  repositoryName,
99
100
  imageTag,
@@ -103,4 +104,4 @@ async function prepareDockerImageAsset(asset, assetManifest, toolkitInfo) {
103
104
  }
104
105
  return { [asset.imageNameParameter]: `${repositoryUri}:${imageTag}` };
105
106
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXNzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyw2QkFBNkI7QUFDN0IsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywrQkFBK0I7QUFFL0IsdUNBQWtDO0FBR2xDOzs7OztHQUtHO0FBQ0gsbUNBQW1DO0FBQzVCLEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxLQUF3QyxFQUFFLGFBQW1DLEVBQUUsV0FBd0IsRUFBRSxLQUFnQjtJQUN6SyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTVCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1FBQ3RCLG1DQUFtQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDBGQUEwRixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxXQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3ZLO0lBRUQsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUUxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQiwrRkFBK0Y7UUFDL0YsZ0ZBQWdGO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksVUFBVSxFQUFFO1lBQ2QsZUFBSyxDQUFDLGlCQUFpQixLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdELFNBQVM7U0FDVjtRQUVELGVBQUssQ0FBQyxtQkFBbUIsS0FB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LHFGQUFxRjtJQUNyRixrR0FBa0c7SUFDbEcsd0ZBQXdGO0lBQ3hGLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw4SEFBOEgsQ0FBQyxDQUFDO0tBQ2pKO0lBRUQsTUFBTSxjQUFjLFNBQUcsS0FBSyxDQUFDLGNBQWMsbUNBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUVyRywwRkFBMEY7SUFDMUYsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sV0FBVyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sUUFBUSxTQUFHLEtBQUssQ0FBQyxRQUFRLG1DQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFFcEQsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7UUFDbEQsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ3JCLGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUztRQUNoQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsTUFBTTtRQUMvQixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUk7S0FDdkIsRUFBRTtRQUNELGNBQWM7UUFDZCxRQUFRO0tBQ1QsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtRQUFFLE9BQU8sRUFBRSxDQUFDO0tBQUU7SUFDN0MsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxhQUFhLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IFRvb2xraXRJbmZvIH0gZnJvbSAnLi9hcGkvdG9vbGtpdC1pbmZvJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi9sb2dnaW5nJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi91dGlsL2Fzc2V0LW1hbmlmZXN0LWJ1aWxkZXInO1xuXG4vKipcbiAqIFRha2UgdGhlIG1ldGFkYXRhIGFzc2V0cyBmcm9tIHRoZSBnaXZlbiBzdGFjayBhbmQgYWRkIHRoZW0gdG8gdGhlIGdpdmVuIGFzc2V0IG1hbmlmZXN0XG4gKlxuICogUmV0dXJucyB0aGUgQ2xvdWRGb3JtYXRpb24gcGFyYW1ldGVycyB0aGF0IG5lZWQgdG8gYmUgc2VudCB0byB0aGUgdGVtcGxhdGUgdG9cbiAqIHBhc3MgQXNzZXQgY29vcmRpbmF0ZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkTWV0YWRhdGFBc3NldHNUb01hbmlmZXN0KHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIGFzc2V0TWFuaWZlc3Q6IEFzc2V0TWFuaWZlc3RCdWlsZGVyLCB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8sIHJldXNlPzogc3RyaW5nW10pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgcmV1c2UgPSByZXVzZSB8fCBbXTtcbiAgY29uc3QgYXNzZXRzID0gc3RhY2suYXNzZXRzO1xuXG4gIGlmIChhc3NldHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaWYgKCF0b29sa2l0SW5mby5mb3VuZCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIHN0YWNrIHVzZXMgYXNzZXRzLCBzbyB0aGUgdG9vbGtpdCBzdGFjayBtdXN0IGJlIGRlcGxveWVkIHRvIHRoZSBlbnZpcm9ubWVudCAoUnVuIFwiJHtjaGFsay5ibHVlKCdjZGsgYm9vdHN0cmFwICcgKyBzdGFjay5lbnZpcm9ubWVudCEubmFtZSl9XCIpYCk7XG4gIH1cblxuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0cykge1xuICAgIC8vIEZJWE1FOiBTaG91bGQgaGF2ZSBleGNsdWRlZCBieSBjb25zdHJ1Y3QgcGF0aCBoZXJlIGluc3RlYWQgb2YgYnkgdW5pcXVlIElELCBwcmVmZXJhYmx5IHVzaW5nXG4gICAgLy8gbWluaW1hdGNoIHNvIHdlIGNhbiBzdXBwb3J0IGdsb2JzLiBNYXliZSB0YWtlIHVwIGR1cmluZyBhcnRpZmFjdCByZWZhY3RvcmluZy5cbiAgICBjb25zdCByZXVzZUFzc2V0ID0gcmV1c2UuaW5kZXhPZihhc3NldC5pZCkgPiAtMTtcblxuICAgIGlmIChyZXVzZUFzc2V0KSB7XG4gICAgICBkZWJ1ZyhgUmV1c2luZyBhc3NldCAke2Fzc2V0LmlkfTogJHtKU09OLnN0cmluZ2lmeShhc3NldCl9YCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBkZWJ1ZyhgUHJlcGFyaW5nIGFzc2V0ICR7YXNzZXQuaWR9OiAke0pTT04uc3RyaW5naWZ5KGFzc2V0KX1gKTtcbiAgICBpZiAoIXN0YWNrLmFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQ6IHN0YWNrIGFzc2VtYmx5IGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGZpbmQgYXNzZXRzIGluIGFzc2VtbHkgZGlyZWN0b3J5Jyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIGF3YWl0IHByZXBhcmVBc3NldChhc3NldCwgYXNzZXRNYW5pZmVzdCwgdG9vbGtpdEluZm8pKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQXNzZXQoYXNzZXQ6IGN4c2NoZW1hLkFzc2V0TWV0YWRhdGFFbnRyeSwgYXNzZXRNYW5pZmVzdDogQXNzZXRNYW5pZmVzdEJ1aWxkZXIsIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mbyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBzd2l0Y2ggKGFzc2V0LnBhY2thZ2luZykge1xuICAgIGNhc2UgJ3ppcCc6XG4gICAgY2FzZSAnZmlsZSc6XG4gICAgICByZXR1cm4gcHJlcGFyZUZpbGVBc3NldChcbiAgICAgICAgYXNzZXQsXG4gICAgICAgIGFzc2V0TWFuaWZlc3QsXG4gICAgICAgIHRvb2xraXRJbmZvLFxuICAgICAgICBhc3NldC5wYWNrYWdpbmcgPT09ICd6aXAnID8gY3hzY2hlbWEuRmlsZUFzc2V0UGFja2FnaW5nLlpJUF9ESVJFQ1RPUlkgOiBjeHNjaGVtYS5GaWxlQXNzZXRQYWNrYWdpbmcuRklMRSk7XG4gICAgY2FzZSAnY29udGFpbmVyLWltYWdlJzpcbiAgICAgIHJldHVybiBwcmVwYXJlRG9ja2VySW1hZ2VBc3NldChhc3NldCwgYXNzZXRNYW5pZmVzdCwgdG9vbGtpdEluZm8pO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwYWNrYWdpbmcgdHlwZTogJHsoYXNzZXQgYXMgYW55KS5wYWNrYWdpbmd9LiBZb3UgbWlnaHQgbmVlZCB0byB1cGdyYWRlIHlvdXIgYXdzLWNkayB0b29sa2l0IHRvIHN1cHBvcnQgdGhpcyBhc3NldCB0eXBlLmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVGaWxlQXNzZXQoXG4gIGFzc2V0OiBjeHNjaGVtYS5GaWxlQXNzZXRNZXRhZGF0YUVudHJ5LFxuICBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0QnVpbGRlcixcbiAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvLFxuICBwYWNrYWdpbmc6IGN4c2NoZW1hLkZpbGVBc3NldFBhY2thZ2luZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuXG4gIGNvbnN0IGV4dGVuc2lvbiA9IHBhY2thZ2luZyA9PT0gY3hzY2hlbWEuRmlsZUFzc2V0UGFja2FnaW5nLlpJUF9ESVJFQ1RPUlkgPyAnLnppcCcgOiBwYXRoLmV4dG5hbWUoYXNzZXQucGF0aCk7XG4gIGNvbnN0IGJhc2VOYW1lID0gYCR7YXNzZXQuc291cmNlSGFzaH0ke2V4dGVuc2lvbn1gO1xuICAvLyBTaW1wbGlmeSBrZXk6IGFzc2V0cy9hYmNkZWYvYWJjZGVmLnppcCBpcyBraW5kYSBzaWxseSBhbmQgdW5uZWNlc3NhcnksIHNvIGlmIHRoZXkncmUgdGhlIHNhbWUganVzdCBwaWNrIG9uZSBjb21wb25lbnQuXG4gIGNvbnN0IHMzUHJlZml4ID0gYXNzZXQuaWQgPT09IGFzc2V0LnNvdXJjZUhhc2ggPyAnYXNzZXRzLycgOiBgYXNzZXRzLyR7YXNzZXQuaWR9L2A7XG4gIGNvbnN0IGtleSA9IGAke3MzUHJlZml4fSR7YmFzZU5hbWV9YDtcbiAgY29uc3QgczN1cmwgPSBgczM6Ly8ke3Rvb2xraXRJbmZvLmJ1Y2tldE5hbWV9LyR7a2V5fWA7XG5cbiAgZGVidWcoYFN0b3JpbmcgYXNzZXQgJHthc3NldC5wYXRofSBhdCAke3MzdXJsfWApO1xuXG4gIGFzc2V0TWFuaWZlc3QuYWRkRmlsZUFzc2V0KGFzc2V0LnNvdXJjZUhhc2gsIHtcbiAgICBwYXRoOiBhc3NldC5wYXRoLFxuICAgIHBhY2thZ2luZyxcbiAgfSwge1xuICAgIGJ1Y2tldE5hbWU6IHRvb2xraXRJbmZvLmJ1Y2tldE5hbWUsXG4gICAgb2JqZWN0S2V5OiBrZXksXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgW2Fzc2V0LnMzQnVja2V0UGFyYW1ldGVyXTogdG9vbGtpdEluZm8uYnVja2V0TmFtZSxcbiAgICBbYXNzZXQuczNLZXlQYXJhbWV0ZXJdOiBgJHtzM1ByZWZpeH0ke2N4YXBpLkFTU0VUX1BSRUZJWF9TRVBBUkFUT1J9JHtiYXNlTmFtZX1gLFxuICAgIFthc3NldC5hcnRpZmFjdEhhc2hQYXJhbWV0ZXJdOiBhc3NldC5zb3VyY2VIYXNoLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlRG9ja2VySW1hZ2VBc3NldChcbiAgYXNzZXQ6IGN4c2NoZW1hLkNvbnRhaW5lckltYWdlQXNzZXRNZXRhZGF0YUVudHJ5LFxuICBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0QnVpbGRlcixcbiAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG5cbiAgLy8gUHJlLTEuMjEuMCwgcmVwb3NpdG9yeU5hbWUgY2FuIGJlIHNwZWNpZmllZCBieSB0aGUgdXNlciBvciBjYW4gYmUgbGVmdCBvdXQsIGluIHdoaWNoIGNhc2Ugd2UgbWFrZVxuICAvLyBhIHBlci1hc3NldCByZXBvc2l0b3J5IHdoaWNoIHdpbGwgZ2V0IGFkb3B0ZWQgYW5kIGNsZWFuZWQgdXAgYWxvbmcgd2l0aCB0aGUgc3RhY2suXG4gIC8vIFBvc3QtMS4yMS4wLCByZXBvc2l0b3J5TmFtZSB3aWxsIGFsd2F5cyBiZSBzcGVjaWZpZWQgYW5kIGl0IHdpbGwgYmUgYSBzaGFyZWQgcmVwb3NpdG9yeSBiZXR3ZWVuXG4gIC8vIGFsbCBhc3NldHMsIGFuZCBhc3NldCB3aWxsIGhhdmUgaW1hZ2VUYWcgc3BlY2lmaWVkIGFzIHdlbGwuIFZhbGlkYXRlIHRoZSBjb21iaW5hdGlvbi5cbiAgaWYgKCFhc3NldC5pbWFnZU5hbWVQYXJhbWV0ZXIgJiYgKCFhc3NldC5yZXBvc2l0b3J5TmFtZSB8fCAhYXNzZXQuaW1hZ2VUYWcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIERvY2tlciBpbWFnZSBhc3NldCBjb25maWd1cmF0aW9uOiBcInJlcG9zaXRvcnlOYW1lXCIgYW5kIFwiaW1hZ2VUYWdcIiBhcmUgcmVxdWlyZWQgd2hlbiBcImltYWdlTmFtZVBhcmFtZXRlclwiIGlzIGxlZnQgb3V0Jyk7XG4gIH1cblxuICBjb25zdCByZXBvc2l0b3J5TmFtZSA9IGFzc2V0LnJlcG9zaXRvcnlOYW1lID8/ICdjZGsvJyArIGFzc2V0LmlkLnJlcGxhY2UoL1s6L10vZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGUgcmVwb3NpdG9yeSBleGlzdHMsIHNpbmNlIHRoZSAnY2RrLWFzc2V0cycgdG9vbCB3aWxsIG5vdCBjcmVhdGUgaXQgZm9yIHVzLlxuICBjb25zdCB7IHJlcG9zaXRvcnlVcmkgfSA9IGF3YWl0IHRvb2xraXRJbmZvLnByZXBhcmVFY3JSZXBvc2l0b3J5KHJlcG9zaXRvcnlOYW1lKTtcbiAgY29uc3QgaW1hZ2VUYWcgPSBhc3NldC5pbWFnZVRhZyA/PyBhc3NldC5zb3VyY2VIYXNoO1xuXG4gIGFzc2V0TWFuaWZlc3QuYWRkRG9ja2VySW1hZ2VBc3NldChhc3NldC5zb3VyY2VIYXNoLCB7XG4gICAgZGlyZWN0b3J5OiBhc3NldC5wYXRoLFxuICAgIGRvY2tlckJ1aWxkQXJnczogYXNzZXQuYnVpbGRBcmdzLFxuICAgIGRvY2tlckJ1aWxkVGFyZ2V0OiBhc3NldC50YXJnZXQsXG4gICAgZG9ja2VyRmlsZTogYXNzZXQuZmlsZSxcbiAgfSwge1xuICAgIHJlcG9zaXRvcnlOYW1lLFxuICAgIGltYWdlVGFnLFxuICB9KTtcblxuICBpZiAoIWFzc2V0LmltYWdlTmFtZVBhcmFtZXRlcikgeyByZXR1cm4ge307IH1cbiAgcmV0dXJuIHsgW2Fzc2V0LmltYWdlTmFtZVBhcmFtZXRlcl06IGAke3JlcG9zaXRvcnlVcml9OiR7aW1hZ2VUYWd9YCB9O1xufVxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXNzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyw2QkFBNkI7QUFDN0IsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywrQkFBK0I7QUFFL0IsdUNBQWtDO0FBR2xDOzs7OztHQUtHO0FBQ0gsbUNBQW1DO0FBQzVCLEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxLQUF3QyxFQUFFLGFBQW1DLEVBQUUsV0FBd0IsRUFBRSxLQUFnQjtJQUN6SyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTVCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1FBQ3RCLG1DQUFtQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDBGQUEwRixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxXQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3ZLO0lBRUQsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUUxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQiwrRkFBK0Y7UUFDL0YsZ0ZBQWdGO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksVUFBVSxFQUFFO1lBQ2QsZUFBSyxDQUFDLGlCQUFpQixLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdELFNBQVM7U0FDVjtRQUVELGVBQUssQ0FBQyxtQkFBbUIsS0FB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bGluZSBtYXgtbGVuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBUb29sa2l0SW5mbyB9IGZyb20gJy4vYXBpL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vbG9nZ2luZyc7XG5pbXBvcnQgeyBBc3NldE1hbmlmZXN0QnVpbGRlciB9IGZyb20gJy4vdXRpbC9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcblxuLyoqXG4gKiBUYWtlIHRoZSBtZXRhZGF0YSBhc3NldHMgZnJvbSB0aGUgZ2l2ZW4gc3RhY2sgYW5kIGFkZCB0aGVtIHRvIHRoZSBnaXZlbiBhc3NldCBtYW5pZmVzdFxuICpcbiAqIFJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlcnMgdGhhdCBuZWVkIHRvIGJlIHNlbnQgdG8gdGhlIHRlbXBsYXRlIHRvXG4gKiBwYXNzIEFzc2V0IGNvb3JkaW5hdGVzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZE1ldGFkYXRhQXNzZXRzVG9NYW5pZmVzdChzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LCBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0QnVpbGRlciwgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvLCByZXVzZT86IHN0cmluZ1tdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIHJldXNlID0gcmV1c2UgfHwgW107XG4gIGNvbnN0IGFzc2V0cyA9IHN0YWNrLmFzc2V0cztcblxuICBpZiAoYXNzZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlmICghdG9vbGtpdEluZm8uZm91bmQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBzdGFjayB1c2VzIGFzc2V0cywgc28gdGhlIHRvb2xraXQgc3RhY2sgbXVzdCBiZSBkZXBsb3llZCB0byB0aGUgZW52aXJvbm1lbnQgKFJ1biBcIiR7Y2hhbGsuYmx1ZSgnY2RrIGJvb3RzdHJhcCAnICsgc3RhY2suZW52aXJvbm1lbnQhLm5hbWUpfVwiKWApO1xuICB9XG5cbiAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBhc3NldHMpIHtcbiAgICAvLyBGSVhNRTogU2hvdWxkIGhhdmUgZXhjbHVkZWQgYnkgY29uc3RydWN0IHBhdGggaGVyZSBpbnN0ZWFkIG9mIGJ5IHVuaXF1ZSBJRCwgcHJlZmVyYWJseSB1c2luZ1xuICAgIC8vIG1pbmltYXRjaCBzbyB3ZSBjYW4gc3VwcG9ydCBnbG9icy4gTWF5YmUgdGFrZSB1cCBkdXJpbmcgYXJ0aWZhY3QgcmVmYWN0b3JpbmcuXG4gICAgY29uc3QgcmV1c2VBc3NldCA9IHJldXNlLmluZGV4T2YoYXNzZXQuaWQpID4gLTE7XG5cbiAgICBpZiAocmV1c2VBc3NldCkge1xuICAgICAgZGVidWcoYFJldXNpbmcgYXNzZXQgJHthc3NldC5pZH06ICR7SlNPTi5zdHJpbmdpZnkoYXNzZXQpfWApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZGVidWcoYFByZXBhcmluZyBhc3NldCAke2Fzc2V0LmlkfTogJHtKU09OLnN0cmluZ2lmeShhc3NldCl9YCk7XG4gICAgaWYgKCFzdGFjay5hc3NlbWJseSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkOiBzdGFjayBhc3NlbWJseSBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBmaW5kIGFzc2V0cyBpbiBhc3NlbWx5IGRpcmVjdG9yeScpO1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCBhd2FpdCBwcmVwYXJlQXNzZXQoYXNzZXQsIGFzc2V0TWFuaWZlc3QsIHRvb2xraXRJbmZvKSk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUFzc2V0KGFzc2V0OiBjeHNjaGVtYS5Bc3NldE1ldGFkYXRhRW50cnksIGFzc2V0TWFuaWZlc3Q6IEFzc2V0TWFuaWZlc3RCdWlsZGVyLCB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgc3dpdGNoIChhc3NldC5wYWNrYWdpbmcpIHtcbiAgICBjYXNlICd6aXAnOlxuICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgcmV0dXJuIHByZXBhcmVGaWxlQXNzZXQoXG4gICAgICAgIGFzc2V0LFxuICAgICAgICBhc3NldE1hbmlmZXN0LFxuICAgICAgICB0b29sa2l0SW5mbyxcbiAgICAgICAgYXNzZXQucGFja2FnaW5nID09PSAnemlwJyA/IGN4c2NoZW1hLkZpbGVBc3NldFBhY2thZ2luZy5aSVBfRElSRUNUT1JZIDogY3hzY2hlbWEuRmlsZUFzc2V0UGFja2FnaW5nLkZJTEUpO1xuICAgIGNhc2UgJ2NvbnRhaW5lci1pbWFnZSc6XG4gICAgICByZXR1cm4gcHJlcGFyZURvY2tlckltYWdlQXNzZXQoYXNzZXQsIGFzc2V0TWFuaWZlc3QsIHRvb2xraXRJbmZvKTtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGFja2FnaW5nIHR5cGU6ICR7KGFzc2V0IGFzIGFueSkucGFja2FnaW5nfS4gWW91IG1pZ2h0IG5lZWQgdG8gdXBncmFkZSB5b3VyIGF3cy1jZGsgdG9vbGtpdCB0byBzdXBwb3J0IHRoaXMgYXNzZXQgdHlwZS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRmlsZUFzc2V0KFxuICBhc3NldDogY3hzY2hlbWEuRmlsZUFzc2V0TWV0YWRhdGFFbnRyeSxcbiAgYXNzZXRNYW5pZmVzdDogQXNzZXRNYW5pZmVzdEJ1aWxkZXIsXG4gIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mbyxcbiAgcGFja2FnaW5nOiBjeHNjaGVtYS5GaWxlQXNzZXRQYWNrYWdpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcblxuICBjb25zdCBleHRlbnNpb24gPSBwYWNrYWdpbmcgPT09IGN4c2NoZW1hLkZpbGVBc3NldFBhY2thZ2luZy5aSVBfRElSRUNUT1JZID8gJy56aXAnIDogcGF0aC5leHRuYW1lKGFzc2V0LnBhdGgpO1xuICBjb25zdCBiYXNlTmFtZSA9IGAke2Fzc2V0LnNvdXJjZUhhc2h9JHtleHRlbnNpb259YDtcbiAgLy8gU2ltcGxpZnkga2V5OiBhc3NldHMvYWJjZGVmL2FiY2RlZi56aXAgaXMga2luZGEgc2lsbHkgYW5kIHVubmVjZXNzYXJ5LCBzbyBpZiB0aGV5J3JlIHRoZSBzYW1lIGp1c3QgcGljayBvbmUgY29tcG9uZW50LlxuICBjb25zdCBzM1ByZWZpeCA9IGFzc2V0LmlkID09PSBhc3NldC5zb3VyY2VIYXNoID8gJ2Fzc2V0cy8nIDogYGFzc2V0cy8ke2Fzc2V0LmlkfS9gO1xuICBjb25zdCBrZXkgPSBgJHtzM1ByZWZpeH0ke2Jhc2VOYW1lfWA7XG4gIGNvbnN0IHMzdXJsID0gYHMzOi8vJHt0b29sa2l0SW5mby5idWNrZXROYW1lfS8ke2tleX1gO1xuXG4gIGRlYnVnKGBTdG9yaW5nIGFzc2V0ICR7YXNzZXQucGF0aH0gYXQgJHtzM3VybH1gKTtcblxuICBhc3NldE1hbmlmZXN0LmFkZEZpbGVBc3NldChhc3NldC5zb3VyY2VIYXNoLCB7XG4gICAgcGF0aDogYXNzZXQucGF0aCxcbiAgICBwYWNrYWdpbmcsXG4gIH0sIHtcbiAgICBidWNrZXROYW1lOiB0b29sa2l0SW5mby5idWNrZXROYW1lLFxuICAgIG9iamVjdEtleToga2V5LFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIFthc3NldC5zM0J1Y2tldFBhcmFtZXRlcl06IHRvb2xraXRJbmZvLmJ1Y2tldE5hbWUsXG4gICAgW2Fzc2V0LnMzS2V5UGFyYW1ldGVyXTogYCR7czNQcmVmaXh9JHtjeGFwaS5BU1NFVF9QUkVGSVhfU0VQQVJBVE9SfSR7YmFzZU5hbWV9YCxcbiAgICBbYXNzZXQuYXJ0aWZhY3RIYXNoUGFyYW1ldGVyXTogYXNzZXQuc291cmNlSGFzaCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZURvY2tlckltYWdlQXNzZXQoXG4gIGFzc2V0OiBjeHNjaGVtYS5Db250YWluZXJJbWFnZUFzc2V0TWV0YWRhdGFFbnRyeSxcbiAgYXNzZXRNYW5pZmVzdDogQXNzZXRNYW5pZmVzdEJ1aWxkZXIsXG4gIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mbyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuXG4gIC8vIFByZS0xLjIxLjAsIHJlcG9zaXRvcnlOYW1lIGNhbiBiZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgb3IgY2FuIGJlIGxlZnQgb3V0LCBpbiB3aGljaCBjYXNlIHdlIG1ha2VcbiAgLy8gYSBwZXItYXNzZXQgcmVwb3NpdG9yeSB3aGljaCB3aWxsIGdldCBhZG9wdGVkIGFuZCBjbGVhbmVkIHVwIGFsb25nIHdpdGggdGhlIHN0YWNrLlxuICAvLyBQb3N0LTEuMjEuMCwgcmVwb3NpdG9yeU5hbWUgd2lsbCBhbHdheXMgYmUgc3BlY2lmaWVkIGFuZCBpdCB3aWxsIGJlIGEgc2hhcmVkIHJlcG9zaXRvcnkgYmV0d2VlblxuICAvLyBhbGwgYXNzZXRzLCBhbmQgYXNzZXQgd2lsbCBoYXZlIGltYWdlVGFnIHNwZWNpZmllZCBhcyB3ZWxsLiBWYWxpZGF0ZSB0aGUgY29tYmluYXRpb24uXG4gIGlmICghYXNzZXQuaW1hZ2VOYW1lUGFyYW1ldGVyICYmICghYXNzZXQucmVwb3NpdG9yeU5hbWUgfHwgIWFzc2V0LmltYWdlVGFnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBEb2NrZXIgaW1hZ2UgYXNzZXQgY29uZmlndXJhdGlvbjogXCJyZXBvc2l0b3J5TmFtZVwiIGFuZCBcImltYWdlVGFnXCIgYXJlIHJlcXVpcmVkIHdoZW4gXCJpbWFnZU5hbWVQYXJhbWV0ZXJcIiBpcyBsZWZ0IG91dCcpO1xuICB9XG5cbiAgY29uc3QgcmVwb3NpdG9yeU5hbWUgPSBhc3NldC5yZXBvc2l0b3J5TmFtZSA/PyAnY2RrLycgKyBhc3NldC5pZC5yZXBsYWNlKC9bOi9dL2csICctJykudG9Mb3dlckNhc2UoKTtcblxuICAvLyBNYWtlIHN1cmUgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLCBzaW5jZSB0aGUgJ2Nkay1hc3NldHMnIHRvb2wgd2lsbCBub3QgY3JlYXRlIGl0IGZvciB1cy5cbiAgY29uc3QgeyByZXBvc2l0b3J5VXJpIH0gPSBhd2FpdCB0b29sa2l0SW5mby5wcmVwYXJlRWNyUmVwb3NpdG9yeShyZXBvc2l0b3J5TmFtZSk7XG4gIGNvbnN0IGltYWdlVGFnID0gYXNzZXQuaW1hZ2VUYWcgPz8gYXNzZXQuc291cmNlSGFzaDtcblxuICBhc3NldE1hbmlmZXN0LmFkZERvY2tlckltYWdlQXNzZXQoYXNzZXQuc291cmNlSGFzaCwge1xuICAgIGRpcmVjdG9yeTogYXNzZXQucGF0aCxcbiAgICBkb2NrZXJCdWlsZEFyZ3M6IGFzc2V0LmJ1aWxkQXJncyxcbiAgICBkb2NrZXJCdWlsZFRhcmdldDogYXNzZXQudGFyZ2V0LFxuICAgIGRvY2tlckZpbGU6IGFzc2V0LmZpbGUsXG4gICAgbmV0d29ya01vZGU6IGFzc2V0Lm5ldHdvcmtNb2RlLFxuICB9LCB7XG4gICAgcmVwb3NpdG9yeU5hbWUsXG4gICAgaW1hZ2VUYWcsXG4gIH0pO1xuXG4gIGlmICghYXNzZXQuaW1hZ2VOYW1lUGFyYW1ldGVyKSB7IHJldHVybiB7fTsgfVxuICByZXR1cm4geyBbYXNzZXQuaW1hZ2VOYW1lUGFyYW1ldGVyXTogYCR7cmVwb3NpdG9yeVVyaX06JHtpbWFnZVRhZ31gIH07XG59XG4iXX0=