@aws-cdk/toolkit-lib 1.22.1 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +2 -2
- package/lib/api/deployments/cfn-api.d.ts +1 -0
- package/lib/api/deployments/cfn-api.js +23 -1
- package/lib/api/deployments/deploy-stack.js +4 -2
- package/lib/api/deployments/early-validation.d.ts +3 -1
- package/lib/api/deployments/early-validation.js +10 -7
- package/lib/api/garbage-collection/stack-refresh.d.ts +1 -0
- package/lib/api/garbage-collection/stack-refresh.js +9 -1
- package/lib/api/notices/filter.d.ts +1 -1
- package/lib/api/notices/filter.js +5 -5
- package/lib/api/notices/types.d.ts +20 -0
- package/lib/api/notices/types.js +1 -1
- package/lib/api/resource-import/importer.d.ts +3 -0
- package/lib/api/resource-import/importer.js +11 -10
- package/lib/toolkit/toolkit.js +34 -29
- package/package.json +2 -2
|
@@ -256,7 +256,7 @@ class FullCloudFormationDeployment {
|
|
|
256
256
|
// Fetching all pages if we'll execute, so we can have the correct change count when monitoring.
|
|
257
257
|
const environmentResourcesRegistry = new environment_1.EnvironmentResourcesRegistry();
|
|
258
258
|
const envResources = environmentResourcesRegistry.for(this.options.resolvedEnvironment, this.options.sdk, this.ioHelper);
|
|
259
|
-
const validationReporter = new early_validation_1.EarlyValidationReporter(this.options.sdk, envResources);
|
|
259
|
+
const validationReporter = new early_validation_1.EarlyValidationReporter(this.options.sdk, envResources, this.ioHelper);
|
|
260
260
|
try {
|
|
261
261
|
return await (0, cfn_api_1.waitForChangeSet)(this.cfn, this.ioHelper, this.stackName, changeSetName, {
|
|
262
262
|
fetchAll: willExecute,
|
|
@@ -323,6 +323,8 @@ class FullCloudFormationDeployment {
|
|
|
323
323
|
StackName: this.stackName,
|
|
324
324
|
ChangeSetName: changeSetName,
|
|
325
325
|
});
|
|
326
|
+
// Deleting may take a bit, especially if it involves nested stack change sets. Wait until it is gone.
|
|
327
|
+
await (0, cfn_api_1.waitForChangeSetGone)(this.cfn, this.ioHelper, this.stackName, changeSetName);
|
|
326
328
|
}
|
|
327
329
|
}
|
|
328
330
|
async updateTerminationProtection() {
|
|
@@ -574,4 +576,4 @@ function hasReplacement(cs) {
|
|
|
574
576
|
return a === 'ReplaceAndDelete' || a === 'ReplaceAndRetain' || a === 'ReplaceAndSnapshot';
|
|
575
577
|
});
|
|
576
578
|
}
|
|
577
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ01BLGtDQXFKQztBQTJaRCxvQ0ErQkM7QUEvd0JELCtCQUE4QjtBQVU5QiwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLHFFQUFnRTtBQUNoRSx5REFBbUQ7QUFDbkQscUNBQXVEO0FBS3ZELHVDQU1tQjtBQUNuQixxQ0FBcUU7QUFHckUsc0ZBQWdHO0FBQ2hHLCtEQUFrRztBQUNsRyxxQ0FBZ0Q7QUFHaEQsc0RBQW1HO0FBRW5HLGdEQUE4RDtBQUM5RCw4Q0FBbUc7QUFDbkcsd0VBQXNFO0FBR3RFLGtEQUF1RDtBQUN2RCx5REFBNkQ7QUFzSnRELEtBQUssVUFBVSxXQUFXLENBQUMsT0FBMkIsRUFBRSxRQUFrQjtJQUMvRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztJQUU3QyxJQUFJLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUM1RSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNqRSxJQUFJLG1CQUFtQixHQUFHLE1BQU0sb0NBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUU1RSxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFL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Q0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztRQUN6QyxPQUFPLENBQUMsS0FBSyxrQkFBa0IsSUFBSSxDQUFDLEtBQUssa0JBQWtCLElBQUksQ0FBQyxLQUFLLG9CQUFvQixDQUFDO0lBQzVGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUge1xuICBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIENyZWF0ZVN0YWNrQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQsXG4gIEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0LFxuICBUYWcsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgQXNzZXRNYW5pZmVzdEJ1aWxkZXIgfSBmcm9tICcuL2Fzc2V0LW1hbmlmZXN0LWJ1aWxkZXInO1xuaW1wb3J0IHsgcHVibGlzaEFzc2V0cyB9IGZyb20gJy4vYXNzZXQtcHVibGlzaGluZyc7XG5pbXBvcnQgeyBhZGRNZXRhZGF0YUFzc2V0c1RvTWFuaWZlc3QgfSBmcm9tICcuL2Fzc2V0cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhcmFtZXRlclZhbHVlcyxcbiAgUGFyYW1ldGVyQ2hhbmdlcyxcbn0gZnJvbSAnLi9jZm4tYXBpJztcbmltcG9ydCB7XG4gIGNoYW5nZVNldEhhc05vQ2hhbmdlcyxcbiAgVGVtcGxhdGVQYXJhbWV0ZXJzLFxuICB3YWl0Rm9yQ2hhbmdlU2V0LFxuICB3YWl0Rm9yU3RhY2tEZXBsb3ksXG4gIHdhaXRGb3JTdGFja0RlbGV0ZSxcbn0gZnJvbSAnLi9jZm4tYXBpJztcbmltcG9ydCB7IGRldGVybWluZUFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nIH0gZnJvbSAnLi9jaGVja3MnO1xuaW1wb3J0IHR5cGUgeyBEZXBsb3lTdGFja1Jlc3VsdCwgU3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi9kZXBsb3ltZW50LXJlc3VsdCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZVNldERlcGxveW1lbnQsIERlcGxveW1lbnRNZXRob2QsIERpcmVjdERlcGxveW1lbnQgfSBmcm9tICcuLi8uLi9hY3Rpb25zL2RlcGxveSc7XG5pbXBvcnQgeyBERUZBVUxUX0RFUExPWV9DSEFOR0VfU0VUX05BTUUgfSBmcm9tICcuLi8uLi9hY3Rpb25zL2RlcGxveS9wcml2YXRlL2RlcGxveW1lbnQtbWV0aG9kJztcbmltcG9ydCB7IERlcGxveW1lbnRFcnJvciwgRGVwbG95bWVudEVycm9yQ29kZXMsIFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU0RLLCBTZGtQcm92aWRlciwgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlQm9keVBhcmFtZXRlciB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IG1ha2VCb2R5UGFyYW1ldGVyLCBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uLCBDbG91ZEZvcm1hdGlvblN0YWNrIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudFJlc291cmNlcywgU3RyaW5nV2l0aG91dFBsYWNlaG9sZGVycyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsIElDT04sIGNyZWF0ZUhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyB9IGZyb20gJy4uL2hvdHN3YXAvY29tbW9uJztcbmltcG9ydCB7IHRyeUhvdHN3YXBEZXBsb3ltZW50IH0gZnJvbSAnLi4vaG90c3dhcC9ob3Rzd2FwLWRlcGxveW1lbnRzJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VzVG9JbXBvcnQgfSBmcm9tICcuLi9yZXNvdXJjZS1pbXBvcnQnO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eU1vbml0b3IgfSBmcm9tICcuLi9zdGFjay1ldmVudHMnO1xuaW1wb3J0IHsgRWFybHlWYWxpZGF0aW9uUmVwb3J0ZXIgfSBmcm9tICcuL2Vhcmx5LXZhbGlkYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRlQ2hhbmdlU2V0RGVwbG95bWVudCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZGVwbG95L3ByaXZhdGUvZGVwbG95bWVudC1tZXRob2QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gYmUgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB0byBkZXBsb3kgdGhpcyBzdGFjayBpblxuICAgKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgb24gdGhlIHN0YWNrIGFydGlmYWN0IG1heSBiZSB1bnJlc29sdmVkLCB0aGlzIG9uZVxuICAgKiBtdXN0IGJlIHJlc29sdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRFbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBTREsgdG8gdXNlIGZvciBkZXBsb3lpbmcgdGhlIHN0YWNrXG4gICAqXG4gICAqIFNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29ycmVjdCByb2xlIHdpdGggd2hpY2hcbiAgICogc3RhY2sgb3BlcmF0aW9ucyBzaG91bGQgYmUgcGVyZm9ybWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2RrOiBTREs7XG5cbiAgLyoqXG4gICAqIFNESyBwcm92aWRlciAoc2VlZGVkIHdpdGggZGVmYXVsdCBjcmVkZW50aWFscylcbiAgICpcbiAgICogV2lsbCBiZSB1c2VkIHRvOlxuICAgKlxuICAgKiAtIFB1Ymxpc2ggYXNzZXRzLCBlaXRoZXIgbGVnYWN5IGFzc2V0cyBvciBsYXJnZSBDRk4gdGVtcGxhdGVzXG4gICAqICAgdGhhdCBhcmVuJ3QgdGhlbXNlbHZlcyBhc3NldHMgZnJvbSBhIG1hbmlmZXN0LiAoTmVlZHMgYW4gU0RLXG4gICAqICAgUHJvdmlkZXIgYmVjYXVzZSB0aGUgZmlsZSBwdWJsaXNoaW5nIHJvbGUgaXMgZGVjbGFyZWQgYXMgcGFydFxuICAgKiAgIG9mIHRoZSBhc3NldCkuXG4gICAqIC0gSG90c3dhcFxuICAgKi9cbiAgcmVhZG9ubHkgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYm9vdHN0cmFwIHN0YWNrIGZvdW5kIGluIHRoZSB0YXJnZXQgZW52aXJvbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGVudlJlc291cmNlczogRW52aXJvbm1lbnRSZXNvdXJjZXM7XG5cbiAgLyoqXG4gICAqIFJvbGUgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiB0byBleGVjdXRlIHRoZSBjaGFuZ2Ugc2V0XG4gICAqXG4gICAqIFRvIG9idGFpbiBhIGBTdHJpbmdXaXRob3V0UGxhY2Vob2xkZXJzYCwgcnVuIGEgcmVndWxhclxuICAgKiBzdHJpbmcgdGhvdWdoIGBUYXJnZXRFbnZpcm9ubWVudC5yZXBsYWNlUGxhY2Vob2xkZXJzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBleGVjdXRpb24gcm9sZTsgQ2xvdWRGb3JtYXRpb24gZWl0aGVyIHVzZXMgdGhlIHJvbGUgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aFxuICAgKiB0aGUgc3RhY2ssIG9yIG90aGVyd2lzZSB1c2VzIGN1cnJlbnQgQVdTIGNyZWRlbnRpYWxzXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogU3RyaW5nV2l0aG91dFBsYWNlaG9sZGVycztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIEFSTnMgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiB0byBub3RpZnkgd2hlbiB0aGUgY2hhbmdlIHNldCBoYXMgY29tcGxldGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYW1lIHRvIGRlcGxveSB0aGUgc3RhY2sgdW5kZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOYW1lIGZyb20gYXNzZW1ibHlcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYXNzZXQgSURzIHdoaWNoIHNob3VsZG4ndCBiZSBidWlsdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEJ1aWxkIGFsbCBhc3NldHNcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlQXNzZXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhZ3MgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiB0byBhZGQgdG8gc3RhY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogVGFnW107XG5cbiAgLyoqXG4gICAqIFdoYXQgZGVwbG95bWVudCBtZXRob2QgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ2hhbmdlIHNldCB3aXRoIGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50TWV0aG9kPzogRGVwbG95bWVudE1ldGhvZCB8IEV4ZWN1dGVDaGFuZ2VTZXREZXBsb3ltZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBleHRyYSBwYXJhbWV0ZXJzXG4gICAqIChpbiBhZGRpdGlvbiB0byB0aG9zZSB1c2VkIGZvciBhc3NldHMpXG4gICAqIHRvIHBhc3MgdG8gdGhlIGRlcGxveWVkIHRlbXBsYXRlLlxuICAgKiBOb3RlIHRoYXQgcGFyYW1ldGVycyB3aXRoIGB1bmRlZmluZWRgIG9yIGVtcHR5IHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQsXG4gICAqIGFuZCBub3QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbiAgLyoqXG4gICAqIFVzZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICpcbiAgICogSWYgbm90IHNldCwgYWxsIHBhcmFtZXRlcnMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGV2ZXJ5IGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB1c2VQcmV2aW91c1BhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXBsb3kgZXZlbiBpZiB0aGUgZGVwbG95ZWQgdGVtcGxhdGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIGRlcGxveS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJvbGxiYWNrIGZhaWxlZCBkZXBsb3ltZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByb2xsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBleHRyYSBzdHJpbmcgdG8gYXBwZW5kIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHBlcmZvcm1pbmcgQVdTIFNESyBjYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3RoaW5nIGV4dHJhIGlzIGFwcGVuZGVkIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlclxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFVc2VyQWdlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgY2hhbmdlIHNldCBvZiB0eXBlIElNUE9SVCB3aWxsIGJlIGNyZWF0ZWQsIGFuZCByZXNvdXJjZXNUb0ltcG9ydFxuICAgKiBwYXNzZWQgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlc1RvSW1wb3J0O1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB1c2UgdGhpcyBnaXZlbiB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHRoZSBzdG9yZWQgb25lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIHRoZSBzdG9yZWQgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlVGVtcGxhdGU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYnVpbGQvcHVibGlzaCBhc3NldHMgaW4gcGFyYWxsZWxcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSBUbyByZW1haW4gYmFja3dhcmQgY29tcGF0aWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0UGFyYWxsZWxpc20/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVwbG95U3RhY2sob3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zLCBpb0hlbHBlcjogSW9IZWxwZXIpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gIGNvbnN0IHN0YWNrQXJ0aWZhY3QgPSBvcHRpb25zLnN0YWNrO1xuICBjb25zdCBzdGFja0VudiA9IG9wdGlvbnMucmVzb2x2ZWRFbnZpcm9ubWVudDtcblxuICBsZXQgZGVwbG95bWVudE1ldGhvZCA9IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZCA/PyB7IG1ldGhvZDogJ2NoYW5nZS1zZXQnIH07XG4gIG9wdGlvbnMuc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudChvcHRpb25zLmV4dHJhVXNlckFnZW50KTtcbiAgY29uc3QgY2ZuID0gb3B0aW9ucy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgY29uc3QgZGVwbG95TmFtZSA9IG9wdGlvbnMuZGVwbG95TmFtZSB8fCBzdGFja0FydGlmYWN0LnN0YWNrTmFtZTtcbiAgbGV0IGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIGRlcGxveU5hbWUpO1xuXG4gIGlmIChjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLmlzQ3JlYXRpb25GYWlsdXJlKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoXG4gICAgICBgRm91bmQgZXhpc3Rpbmcgc3RhY2sgJHtkZXBsb3lOYW1lfSB0aGF0IGhhZCBwcmV2aW91c2x5IGZhaWxlZCBjcmVhdGlvbi4gRGVsZXRpbmcgaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmUtY3JlYXRlIGl0LmAsXG4gICAgKTtcbiAgICBhd2FpdCBjZm4uZGVsZXRlU3RhY2soeyBTdGFja05hbWU6IGRlcGxveU5hbWUgfSk7XG4gICAgY29uc3QgZGVsZXRlZFN0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVsZXRlKGNmbiwgaW9IZWxwZXIsIGRlcGxveU5hbWUpO1xuICAgIGlmIChkZWxldGVkU3RhY2sgJiYgZGVsZXRlZFN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdERUxFVEVfQ09NUExFVEUnKSB7XG4gICAgICB0aHJvdyBuZXcgRGVwbG95bWVudEVycm9yKFxuICAgICAgICBgRmFpbGVkIGRlbGV0aW5nIHN0YWNrICR7ZGVwbG95TmFtZX0gdGhhdCBoYWQgcHJldmlvdXNseSBmYWlsZWQgY3JlYXRpb24gKGN1cnJlbnQgc3RhdGU6ICR7ZGVsZXRlZFN0YWNrLnN0YWNrU3RhdHVzfSlgLFxuICAgICAgICAnRmFpbGVkU3RhY2tDbGVhbnVwRmFpbGVkJyxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIFVwZGF0ZSB2YXJpYWJsZSB0byBtYXJrIHRoYXQgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIGJ1dCBhdm9pZFxuICAgIC8vIGRvaW5nIGFuIGFjdHVhbCBsb29rdXAgaW4gQ2xvdWRGb3JtYXRpb24gKHdoaWNoIHdvdWxkIGJlIHNpbGx5IHRvIGRvIGlmXG4gICAgLy8gd2UganVzdCBkZWxldGVkIGl0KS5cbiAgICBjbG91ZEZvcm1hdGlvblN0YWNrID0gQ2xvdWRGb3JtYXRpb25TdGFjay5kb2VzTm90RXhpc3QoY2ZuLCBkZXBsb3lOYW1lKTtcbiAgfVxuXG4gIC8vIERldGVjdCBcImxlZ2FjeVwiIGFzc2V0cyAod2hpY2ggcmVtYWluIGluIHRoZSBtZXRhZGF0YSkgYW5kIHB1Ymxpc2ggdGhlbSB2aWFcbiAgLy8gYW4gYWQtaG9jIGFzc2V0IG1hbmlmZXN0LCB3aGlsZSBwYXNzaW5nIHRoZWlyIGxvY2F0aW9ucyB2aWEgdGVtcGxhdGVcbiAgLy8gcGFyYW1ldGVycy5cbiAgY29uc3QgbGVnYWN5QXNzZXRzID0gbmV3IEFzc2V0TWFuaWZlc3RCdWlsZGVyKCk7XG4gIGNvbnN0IGFzc2V0UGFyYW1zID0gYXdhaXQgYWRkTWV0YWRhdGFBc3NldHNUb01hbmlmZXN0KFxuICAgIGlvSGVscGVyLFxuICAgIHN0YWNrQXJ0aWZhY3QsXG4gICAgbGVnYWN5QXNzZXRzLFxuICAgIG9wdGlvbnMuZW52UmVzb3VyY2VzLFxuICAgIG9wdGlvbnMucmV1c2VBc3NldHMsXG4gICk7XG5cbiAgY29uc3QgZmluYWxQYXJhbWV0ZXJWYWx1ZXMgPSB7IC4uLm9wdGlvbnMucGFyYW1ldGVycywgLi4uYXNzZXRQYXJhbXMgfTtcblxuICBjb25zdCB0ZW1wbGF0ZVBhcmFtcyA9IFRlbXBsYXRlUGFyYW1ldGVycy5mcm9tVGVtcGxhdGUoc3RhY2tBcnRpZmFjdC50ZW1wbGF0ZSk7XG4gIGNvbnN0IHN0YWNrUGFyYW1zID0gb3B0aW9ucy51c2VQcmV2aW91c1BhcmFtZXRlcnNcbiAgICA/IHRlbXBsYXRlUGFyYW1zLnVwZGF0ZUV4aXN0aW5nKGZpbmFsUGFyYW1ldGVyVmFsdWVzLCBjbG91ZEZvcm1hdGlvblN0YWNrLnBhcmFtZXRlcnMpXG4gICAgOiB0ZW1wbGF0ZVBhcmFtcy5zdXBwbHlBbGwoZmluYWxQYXJhbWV0ZXJWYWx1ZXMpO1xuXG4gIGlmIChhd2FpdCBjYW5Ta2lwRGVwbG95KG9wdGlvbnMsIGNsb3VkRm9ybWF0aW9uU3RhY2ssIHN0YWNrUGFyYW1zLmhhc0NoYW5nZXMoY2xvdWRGb3JtYXRpb25TdGFjay5wYXJhbWV0ZXJzKSwgaW9IZWxwZXIpKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHNraXBwaW5nIGRlcGxveW1lbnQgKHVzZSAtLWZvcmNlIHRvIG92ZXJyaWRlKWApO1xuICAgIC8vIGlmIHdlIGNhbiBza2lwIGRlcGxveW1lbnQgYW5kIHdlIGFyZSBwZXJmb3JtaW5nIGEgaG90c3dhcCwgbGV0IHRoZSB1c2VyIGtub3dcbiAgICAvLyB0aGF0IG5vIGhvdHN3YXAgZGVwbG95bWVudCBoYXBwZW5lZFxuICAgIGlmIChkZXBsb3ltZW50TWV0aG9kPy5tZXRob2QgPT09ICdob3Rzd2FwJykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhcbiAgICAgICAgZm9ybWF0KFxuICAgICAgICAgIGBcXG4gJHtJQ09OfSAlc1xcbmAsXG4gICAgICAgICAgY2hhbGsuYm9sZCgnaG90c3dhcCBkZXBsb3ltZW50IHNraXBwZWQgLSBubyBjaGFuZ2VzIHdlcmUgZGV0ZWN0ZWQgKHVzZSAtLWZvcmNlIHRvIG92ZXJyaWRlKScpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgIG5vT3A6IHRydWUsXG4gICAgICBvdXRwdXRzOiBjbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICBzdGFja0FybjogY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IGRlcGxveWluZy4uLmApO1xuICB9XG5cbiAgY29uc3QgYm9keVBhcmFtZXRlciA9IGF3YWl0IG1ha2VCb2R5UGFyYW1ldGVyKFxuICAgIGlvSGVscGVyLFxuICAgIHN0YWNrQXJ0aWZhY3QsXG4gICAgb3B0aW9ucy5yZXNvbHZlZEVudmlyb25tZW50LFxuICAgIGxlZ2FjeUFzc2V0cyxcbiAgICBvcHRpb25zLmVudlJlc291cmNlcyxcbiAgICBvcHRpb25zLm92ZXJyaWRlVGVtcGxhdGUsXG4gICk7XG4gIGxldCBib290c3RyYXBTdGFja05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBib290c3RyYXBTdGFja05hbWUgPSAoYXdhaXQgb3B0aW9ucy5lbnZSZXNvdXJjZXMubG9va3VwVG9vbGtpdCgpKS5zdGFja05hbWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgQ291bGQgbm90IGRldGVybWluZSB0aGUgYm9vdHN0cmFwIHN0YWNrIG5hbWU6ICR7ZX1gKTtcbiAgfVxuICBhd2FpdCBwdWJsaXNoQXNzZXRzKGxlZ2FjeUFzc2V0cy50b01hbmlmZXN0KHN0YWNrQXJ0aWZhY3QuYXNzZW1ibHkuZGlyZWN0b3J5KSwgb3B0aW9ucy5zZGtQcm92aWRlciwgc3RhY2tFbnYsIHtcbiAgICBwYXJhbGxlbDogb3B0aW9ucy5hc3NldFBhcmFsbGVsaXNtLFxuICAgIGFsbG93Q3Jvc3NBY2NvdW50OiBhd2FpdCBkZXRlcm1pbmVBbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZyhvcHRpb25zLnNkaywgaW9IZWxwZXIsIGJvb3RzdHJhcFN0YWNrTmFtZSksXG4gIH0sIGlvSGVscGVyKTtcblxuICAvLyBhdHRlbXB0IHRvIHNob3J0LWNpcmN1aXQgdGhlIGRlcGxveW1lbnQgaWYgcG9zc2libGVcbiAgaWYgKGRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2hvdHN3YXAnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvdHN3YXBNb2RlTmV3ID0gZGVwbG95bWVudE1ldGhvZD8uZmFsbGJhY2sgPyAnZmFsbC1iYWNrJyA6ICdob3Rzd2FwLW9ubHknO1xuICAgICAgY29uc3QgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzID0gZGVwbG95bWVudE1ldGhvZC5wcm9wZXJ0aWVzXG4gICAgICAgID8gY3JlYXRlSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzKGRlcGxveW1lbnRNZXRob2QucHJvcGVydGllcylcbiAgICAgICAgOiBuZXcgSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzKCk7XG5cbiAgICAgIGNvbnN0IGhvdHN3YXBEZXBsb3ltZW50UmVzdWx0ID0gYXdhaXQgdHJ5SG90c3dhcERlcGxveW1lbnQoXG4gICAgICAgIG9wdGlvbnMuc2RrUHJvdmlkZXIsXG4gICAgICAgIGlvSGVscGVyLFxuICAgICAgICBzdGFja1BhcmFtcy52YWx1ZXMsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uU3RhY2ssXG4gICAgICAgIHN0YWNrQXJ0aWZhY3QsXG4gICAgICAgIGhvdHN3YXBNb2RlTmV3LFxuICAgICAgICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4gICAgICApO1xuXG4gICAgICBpZiAoaG90c3dhcERlcGxveW1lbnRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGhvdHN3YXBEZXBsb3ltZW50UmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKGZvcm1hdChcbiAgICAgICAgJ0NvdWxkIG5vdCBwZXJmb3JtIGEgaG90c3dhcCBkZXBsb3ltZW50LCBhcyB0aGUgc3RhY2sgJXMgY29udGFpbnMgbm9uLUFzc2V0IGNoYW5nZXMnLFxuICAgICAgICBzdGFja0FydGlmYWN0LmRpc3BsYXlOYW1lLFxuICAgICAgKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIENmbkV2YWx1YXRpb25FeGNlcHRpb24pKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKGZvcm1hdChcbiAgICAgICAgJ0NvdWxkIG5vdCBwZXJmb3JtIGEgaG90c3dhcCBkZXBsb3ltZW50LCBiZWNhdXNlIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQ6ICVzJyxcbiAgICAgICAgZm9ybWF0RXJyb3JNZXNzYWdlKGUpLFxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKGRlcGxveW1lbnRNZXRob2QuZmFsbGJhY2spIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ0ZhbGxpbmcgYmFjayB0byBkb2luZyBhIGZ1bGwgZGVwbG95bWVudCcpO1xuICAgICAgb3B0aW9ucy5zZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KCdjZGstaG90c3dhcC9mYWxsYmFjaycpO1xuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IGRlcGxveW1lbnRNZXRob2QuZmFsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgICAgbm9PcDogdHJ1ZSxcbiAgICAgICAgc3RhY2tBcm46IGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tJZCxcbiAgICAgICAgb3V0cHV0czogY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjb3VsZCBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudCwgcGVyZm9ybSBhIGZ1bGwgQ0ZOIGRlcGxveSBpbnN0ZWFkXG4gIGNvbnN0IGZ1bGxEZXBsb3ltZW50ID0gbmV3IEZ1bGxDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnQoXG4gICAgZGVwbG95bWVudE1ldGhvZCxcbiAgICBvcHRpb25zLFxuICAgIGNsb3VkRm9ybWF0aW9uU3RhY2ssXG4gICAgc3RhY2tBcnRpZmFjdCxcbiAgICBzdGFja1BhcmFtcyxcbiAgICBib2R5UGFyYW1ldGVyLFxuICAgIGlvSGVscGVyLFxuICApO1xuICByZXR1cm4gZnVsbERlcGxveW1lbnQucGVyZm9ybURlcGxveW1lbnQoKTtcbn1cblxudHlwZSBDb21tb25QcmVwYXJlT3B0aW9ucyA9IGtleW9mIENyZWF0ZVN0YWNrQ29tbWFuZElucHV0ICZcbmtleW9mIFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0ICZcbmtleW9mIENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dDtcbnR5cGUgQ29tbW9uRXhlY3V0ZU9wdGlvbnMgPSBrZXlvZiBDcmVhdGVTdGFja0NvbW1hbmRJbnB1dCAmXG5rZXlvZiBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCAmXG5rZXlvZiBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0O1xuXG4vKipcbiAqIFRoaXMgY2xhc3Mgc2hhcmVzIHN0YXRlIGFuZCBmdW5jdGlvbmFsaXR5IGJldHdlZW4gdGhlIGRpZmZlcmVudCBmdWxsIGRlcGxveW1lbnQgbW9kZXNcbiAqL1xuY2xhc3MgRnVsbENsb3VkRm9ybWF0aW9uRGVwbG95bWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcmI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB1dWlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3ltZW50TWV0aG9kOiBEaXJlY3REZXBsb3ltZW50IHwgQ2hhbmdlU2V0RGVwbG95bWVudCB8IEV4ZWN1dGVDaGFuZ2VTZXREZXBsb3ltZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb25TdGFjazogQ2xvdWRGb3JtYXRpb25TdGFjayxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrUGFyYW1zOiBQYXJhbWV0ZXJWYWx1ZXMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBib2R5UGFyYW1ldGVyOiBUZW1wbGF0ZUJvZHlQYXJhbWV0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICkge1xuICAgIHRoaXMuY2ZuID0gb3B0aW9ucy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICB0aGlzLnN0YWNrTmFtZSA9IG9wdGlvbnMuZGVwbG95TmFtZSA/PyBzdGFja0FydGlmYWN0LnN0YWNrTmFtZTtcblxuICAgIHRoaXMudXBkYXRlID0gY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMgJiYgY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5uYW1lICE9PSAnUkVWSUVXX0lOX1BST0dSRVNTJztcbiAgICB0aGlzLnZlcmIgPSB0aGlzLnVwZGF0ZSA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XG4gICAgdGhpcy51dWlkID0gdXVpZC52NCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBlcmZvcm1EZXBsb3ltZW50KCk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBkZXBsb3ltZW50TWV0aG9kID0gdGhpcy5kZXBsb3ltZW50TWV0aG9kID8/IHsgbWV0aG9kOiAnY2hhbmdlLXNldCcgfTtcblxuICAgIGlmIChkZXBsb3ltZW50TWV0aG9kLm1ldGhvZCA9PT0gJ2RpcmVjdCcgJiYgdGhpcy5vcHRpb25zLnJlc291cmNlc1RvSW1wb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbXBvcnRSZXF1aXJlc0NoYW5nZVNldCcsICdJbXBvcnRpbmcgcmVzb3VyY2VzIHJlcXVpcmVzIGEgY2hhbmdlc2V0IGRlcGxveW1lbnQnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRlcGxveW1lbnRNZXRob2QubWV0aG9kKSB7XG4gICAgICBjYXNlICdjaGFuZ2Utc2V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlU2V0RGVwbG95bWVudChkZXBsb3ltZW50TWV0aG9kKTtcblxuICAgICAgY2FzZSAnZXhlY3V0ZS1jaGFuZ2Utc2V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUV4aXN0aW5nQ2hhbmdlU2V0KGRlcGxveW1lbnRNZXRob2QpO1xuXG4gICAgICBjYXNlICdkaXJlY3QnOlxuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3REZXBsb3ltZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2VTZXREZXBsb3ltZW50KGRlcGxveW1lbnRNZXRob2Q6IENoYW5nZVNldERlcGxveW1lbnQpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgY29uc3QgY2hhbmdlU2V0TmFtZSA9IGRlcGxveW1lbnRNZXRob2QuY2hhbmdlU2V0TmFtZSA/PyBERUZBVUxUX0RFUExPWV9DSEFOR0VfU0VUX05BTUU7XG4gICAgY29uc3QgZXhlY3V0ZSA9IGRlcGxveW1lbnRNZXRob2QuZXhlY3V0ZSA/PyB0cnVlO1xuICAgIGNvbnN0IGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzID0gZGVwbG95bWVudE1ldGhvZC5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyA/PyBmYWxzZTtcbiAgICBjb25zdCByZXZlcnREcmlmdCA9IGRlcGxveW1lbnRNZXRob2QucmV2ZXJ0RHJpZnQgPz8gZmFsc2U7XG4gICAgY29uc3QgY2hhbmdlU2V0RGVzY3JpcHRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYW5nZVNldChjaGFuZ2VTZXROYW1lLCBleGVjdXRlLCBpbXBvcnRFeGlzdGluZ1Jlc291cmNlcywgcmV2ZXJ0RHJpZnQpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKCk7XG5cbiAgICBpZiAoY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGNoYW5nZVNldERlc2NyaXB0aW9uKSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ05vIGNoYW5nZXMgYXJlIHRvIGJlIHBlcmZvcm1lZCBvbiAlcy4nLCB0aGlzLnN0YWNrTmFtZSkpO1xuICAgICAgaWYgKGV4ZWN1dGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ0RlbGV0aW5nIGVtcHR5IGNoYW5nZSBzZXQgJXMnLCBjaGFuZ2VTZXREZXNjcmlwdGlvbi5DaGFuZ2VTZXRJZCkpO1xuICAgICAgICBhd2FpdCB0aGlzLmNmbi5kZWxldGVDaGFuZ2VTZXQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VEZXBsb3ltZW50KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnWW91IHVzZWQgdGhlIC0tZm9yY2UgZmxhZywgYnV0IENsb3VkRm9ybWF0aW9uIHJlcG9ydGVkIHRoYXQgdGhlIGRlcGxveW1lbnQgd291bGQgbm90IG1ha2UgYW55IGNoYW5nZXMuJyxcbiAgICAgICAgICAgICdBY2NvcmRpbmcgdG8gQ2xvdWRGb3JtYXRpb24sIGFsbCByZXNvdXJjZXMgYXJlIGFscmVhZHkgdXAtdG8tZGF0ZSB3aXRoIHRoZSBzdGF0ZSBpbiB5b3VyIENESyBhcHAuJyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgJ1lvdSBjYW5ub3QgdXNlIHRoZSAtLWZvcmNlIGZsYWcgdG8gZ2V0IHJpZCBvZiBjaGFuZ2VzIHlvdSBtYWRlIGluIHRoZSBjb25zb2xlLiBUcnkgdXNpbmcnLFxuICAgICAgICAgICAgJ0Nsb3VkRm9ybWF0aW9uIGRyaWZ0IGRldGVjdGlvbiBpbnN0ZWFkOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jZm4tc3RhY2stZHJpZnQuaHRtbCcsXG4gICAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICBub09wOiB0cnVlLFxuICAgICAgICBvdXRwdXRzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgICAgc3RhY2tBcm46IGNoYW5nZVNldERlc2NyaXB0aW9uLlN0YWNrSWQhLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWV4ZWN1dGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoXG4gICAgICAgICdDaGFuZ2VzZXQgJXMgY3JlYXRlZCBhbmQgd2FpdGluZyBpbiByZXZpZXcgZm9yIG1hbnVhbCBleGVjdXRpb24gKC0tbm8tZXhlY3V0ZSknLFxuICAgICAgICBjaGFuZ2VTZXREZXNjcmlwdGlvbi5DaGFuZ2VTZXRJZCxcbiAgICAgICkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICBub09wOiBmYWxzZSxcbiAgICAgICAgb3V0cHV0czogdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICAgIHN0YWNrQXJuOiBjaGFuZ2VTZXREZXNjcmlwdGlvbi5TdGFja0lkISxcbiAgICAgICAgY2hhbmdlU2V0OiBjaGFuZ2VTZXREZXNjcmlwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIHJlcGxhY2VtZW50cyBpbiB0aGUgY2hhbmdlc2V0LCBjaGVjayB0aGUgcm9sbGJhY2sgZmxhZyBhbmQgc3RhY2sgc3RhdHVzXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tBbmRFeGVjdXRlQ2hhbmdlU2V0KGNoYW5nZVNldERlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUV4aXN0aW5nQ2hhbmdlU2V0KGRlcGxveW1lbnRNZXRob2Q6IEV4ZWN1dGVDaGFuZ2VTZXREZXBsb3ltZW50KTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKCk7XG5cbiAgICAvLyBUaGUgY2hhbmdlIHNldCB3YXMgYWxyZWFkeSBjcmVhdGVkIGFuZCB2YWxpZGF0ZWQgZHVyaW5nIHRoZSBwcmVwYXJlIHBoYXNlLFxuICAgIC8vIGp1c3QgZGVzY3JpYmUgaXQgdG8gZ2V0IHRoZSBpbmZvIG5lZWRlZCBmb3IgZXhlY3V0aW9uLlxuICAgIGNvbnN0IGNoYW5nZVNldERlc2NyaXB0aW9uID0gYXdhaXQgdGhpcy5jZm4uZGVzY3JpYmVDaGFuZ2VTZXQoe1xuICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIENoYW5nZVNldE5hbWU6IGRlcGxveW1lbnRNZXRob2QuY2hhbmdlU2V0TmFtZSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmNoZWNrQW5kRXhlY3V0ZUNoYW5nZVNldChjaGFuZ2VTZXREZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgcm9sbGJhY2svcmVwbGFjZW1lbnQgY29uc3RyYWludHMgYW5kIGV4ZWN1dGUgdGhlIGNoYW5nZSBzZXQgaWYgYWxsIGNoZWNrcyBwYXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0FuZEV4ZWN1dGVDaGFuZ2VTZXQoY2hhbmdlU2V0RGVzY3JpcHRpb246IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBpZiAoY2hhbmdlU2V0RGVzY3JpcHRpb24uU3RhdHVzICE9PSAnQ1JFQVRFX0NPTVBMRVRFJykge1xuICAgICAgY29uc3Qgc3RhdHVzID0gY2hhbmdlU2V0RGVzY3JpcHRpb24uU3RhdHVzID8/ICdVTktOT1dOJztcbiAgICAgIGNvbnN0IHJlYXNvbiA9IGNoYW5nZVNldERlc2NyaXB0aW9uLlN0YXR1c1JlYXNvbiA/IGA6ICR7Y2hhbmdlU2V0RGVzY3JpcHRpb24uU3RhdHVzUmVhc29ufWAgOiAnJztcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICdDaGFuZ2VTZXROb3RSZWFkeScsXG4gICAgICAgIGBDaGFuZ2Ugc2V0ICcke2NoYW5nZVNldERlc2NyaXB0aW9uLkNoYW5nZVNldE5hbWV9JyBvbiBzdGFjayAnJHt0aGlzLnN0YWNrTmFtZX0nIGlzIG5vdCByZWFkeSBmb3IgZXhlY3V0aW9uIChzdGF0dXM6ICR7c3RhdHVzfSR7cmVhc29ufSlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXBsYWNlbWVudCA9IGhhc1JlcGxhY2VtZW50KGNoYW5nZVNldERlc2NyaXB0aW9uKTtcbiAgICBjb25zdCBpc1BhdXNlZEZhaWxTdGF0ZSA9IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5pc1JvbGxiYWNrYWJsZTtcbiAgICBjb25zdCByb2xsYmFjayA9IHRoaXMub3B0aW9ucy5yb2xsYmFjayA/PyB0cnVlO1xuICAgIGlmIChpc1BhdXNlZEZhaWxTdGF0ZSAmJiByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcsIHJlYXNvbjogJ3JlcGxhY2VtZW50Jywgc3RhdHVzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMubmFtZSB9O1xuICAgIH1cbiAgICBpZiAoaXNQYXVzZWRGYWlsU3RhdGUgJiYgcm9sbGJhY2spIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnLCByZWFzb246ICdub3Qtbm9yb2xsYmFjaycsIHN0YXR1czogdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgfTtcbiAgICB9XG4gICAgaWYgKCFyb2xsYmFjayAmJiByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ3JlcGxhY2VtZW50LXJlcXVpcmVzLXJvbGxiYWNrJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVDaGFuZ2VTZXQoY2hhbmdlU2V0RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDaGFuZ2VTZXQoY2hhbmdlU2V0TmFtZTogc3RyaW5nLCB3aWxsRXhlY3V0ZTogYm9vbGVhbiwgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGJvb2xlYW4sIHJldmVydERyaWZ0OiBib29sZWFuKSB7XG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwT2xkQ2hhbmdlc2V0KGNoYW5nZVNldE5hbWUpO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byBjcmVhdGUgQ2hhbmdlU2V0IHdpdGggbmFtZSAke2NoYW5nZVNldE5hbWV9IHRvICR7dGhpcy52ZXJifSBzdGFjayAke3RoaXMuc3RhY2tOYW1lfWApO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoJyVzOiBjcmVhdGluZyBDbG91ZEZvcm1hdGlvbiBjaGFuZ2VzZXQuLi4nLCBjaGFsay5ib2xkKHRoaXMuc3RhY2tOYW1lKSkpO1xuICAgIGNvbnN0IGNoYW5nZVNldCA9IGF3YWl0IHRoaXMuY2ZuLmNyZWF0ZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgICAgIENoYW5nZVNldFR5cGU6IHRoaXMub3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCA/ICdJTVBPUlQnIDogdGhpcy51cGRhdGUgPyAnVVBEQVRFJyA6ICdDUkVBVEUnLFxuICAgICAgUmVzb3VyY2VzVG9JbXBvcnQ6IHRoaXMub3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCxcbiAgICAgIERlc2NyaXB0aW9uOiBgQ0RLIENoYW5nZXNldCBmb3IgZXhlY3V0aW9uICR7dGhpcy51dWlkfWAsXG4gICAgICBDbGllbnRUb2tlbjogYGNyZWF0ZSR7dGhpcy51dWlkfWAsXG4gICAgICBJbXBvcnRFeGlzdGluZ1Jlc291cmNlczogaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICBEZXBsb3ltZW50TW9kZTogcmV2ZXJ0RHJpZnQgPyAnUkVWRVJUX0RSSUZUJyA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMuY29tbW9uUHJlcGFyZU9wdGlvbnMoKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdJbml0aWF0ZWQgY3JlYXRpb24gb2YgY2hhbmdlc2V0OiAlczsgd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0LklkKSk7XG4gICAgLy8gRmV0Y2hpbmcgYWxsIHBhZ2VzIGlmIHdlJ2xsIGV4ZWN1dGUsIHNvIHdlIGNhbiBoYXZlIHRoZSBjb3JyZWN0IGNoYW5nZSBjb3VudCB3aGVuIG1vbml0b3JpbmcuXG4gICAgY29uc3QgZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSA9IG5ldyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5KCk7XG4gICAgY29uc3QgZW52UmVzb3VyY2VzID0gZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeS5mb3IodGhpcy5vcHRpb25zLnJlc29sdmVkRW52aXJvbm1lbnQsIHRoaXMub3B0aW9ucy5zZGssIHRoaXMuaW9IZWxwZXIpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXBvcnRlciA9IG5ldyBFYXJseVZhbGlkYXRpb25SZXBvcnRlcih0aGlzLm9wdGlvbnMuc2RrLCBlbnZSZXNvdXJjZXMpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckNoYW5nZVNldCh0aGlzLmNmbiwgdGhpcy5pb0hlbHBlciwgdGhpcy5zdGFja05hbWUsIGNoYW5nZVNldE5hbWUsIHtcbiAgICAgICAgZmV0Y2hBbGw6IHdpbGxFeGVjdXRlLFxuICAgICAgICB2YWxpZGF0aW9uUmVwb3J0ZXIsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChpbXBvcnRFeGlzdGluZ1Jlc291cmNlcyAmJiBUb29sa2l0RXJyb3IuaXNEZXBsb3ltZW50RXJyb3IoZSkgJiYgZS5kZXBsb3ltZW50RXJyb3JDb2RlID09PSAnQ2hhbmdlU2V0Q3JlYXRpb25GYWlsZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50RXJyb3IodGhpcy5lbmhhbmNlSW1wb3J0RXJyb3JNZXNzYWdlKGUubWVzc2FnZSksICdDaGFuZ2VTZXRDcmVhdGlvbkZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZSBhbiBpbXBvcnQtcmVsYXRlZCBjaGFuZ2VzZXQgZXJyb3IgbWVzc2FnZSBieSBtYXBwaW5nIENGTiBsb2dpY2FsIElEcyB0byBDREsgY29uc3RydWN0IHBhdGhzLlxuICAgKi9cbiAgcHJpdmF0ZSBlbmhhbmNlSW1wb3J0RXJyb3JNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gT25seSBlbmhhbmNlIHRoZSBzcGVjaWZpYyBDRk4gZXJyb3IgYWJvdXQgaW1wb3J0aW5nIGV4aXN0aW5nIHJlc291cmNlc1xuICAgIGlmICghbWVzc2FnZS5pbmNsdWRlcygnQ2xvdWRGb3JtYXRpb24gaXMgYXR0ZW1wdGluZyB0byBpbXBvcnQgc29tZSByZXNvdXJjZXMgYmVjYXVzZSB0aGV5IGFscmVhZHkgZXhpc3QgaW4geW91ciBhY2NvdW50JykpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtlciA9ICdUaGUgYWZmZWN0ZWQgcmVzb3VyY2VzIGFyZSAnO1xuICAgIGNvbnN0IG1hcmtlckluZGV4ID0gbWVzc2FnZS5pbmRleE9mKG1hcmtlcik7XG4gICAgaWYgKG1hcmtlckluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gT25seSBleHRyYWN0IGxvZ2ljYWwgSURzIGZyb20gdGhlIFwiVGhlIGFmZmVjdGVkIHJlc291cmNlcyBhcmUgLi4uXCIgc3VmZml4XG4gICAgY29uc3QgcmVzb3VyY2VMaXN0ID0gbWVzc2FnZS5zdWJzdHJpbmcobWFya2VySW5kZXggKyBtYXJrZXIubGVuZ3RoKTtcbiAgICBjb25zdCBsb2dpY2FsSWRQYXR0ZXJuID0gL1xcYihbQS1aYS16XVtBLVphLXowLTldKylcXHMrXFwoXFx7L2c7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5zdGFja0FydGlmYWN0LnRlbXBsYXRlPy5SZXNvdXJjZXMgPz8ge307XG5cbiAgICBjb25zdCBhZmZlY3RlZDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHJlc291cmNlTGlzdC5tYXRjaEFsbChsb2dpY2FsSWRQYXR0ZXJuKSkge1xuICAgICAgY29uc3QgbG9naWNhbElkID0gbWF0Y2hbMV07XG4gICAgICBjb25zdCBwYXRoID0gcmVzb3VyY2VzW2xvZ2ljYWxJZF0/Lk1ldGFkYXRhPy5bJ2F3czpjZGs6cGF0aCddO1xuICAgICAgYWZmZWN0ZWQucHVzaChwYXRoID8gYCAgLSAke3BhdGh9ICgke2xvZ2ljYWxJZH0pYCA6IGAgIC0gJHtsb2dpY2FsSWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIGBJbXBvcnQgb2YgZXhpc3RpbmcgcmVzb3VyY2VzIGZhaWxlZCBmb3Igc3RhY2sgJyR7dGhpcy5zdGFja05hbWV9JyBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIG5lZWQgYSBEZWxldGlvblBvbGljeSBvZiAnUmV0YWluJyBvciAnUmV0YWluRXhjZXB0T25DcmVhdGUnOmAsXG4gICAgICAuLi5hZmZlY3RlZCxcbiAgICAgICcnLFxuICAgICAgXCJTZXQgdGhlIHJlbW92YWwgcG9saWN5IHRvICdSZW1vdmFsUG9saWN5LlJFVEFJTicgb3IgJ1JlbW92YWxQb2xpY3kuUkVUQUlOX09OX1VQREFURV9PUl9ERUxFVEUnIG9uIHRoZXNlIHJlc291cmNlcy5cIixcbiAgICAgICdTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay92Mi9ndWlkZS9yZXNvdXJjZXMuaHRtbCNyZXNvdXJjZXMtcmVtb3ZhbCcsXG4gICAgXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNoYW5nZVNldChjaGFuZ2VTZXQ6IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ0luaXRpYXRpbmcgZXhlY3V0aW9uIG9mIGNoYW5nZXNldCAlcyBvbiBzdGFjayAlcycsIGNoYW5nZVNldC5DaGFuZ2VTZXRJZCwgdGhpcy5zdGFja05hbWUpKTtcblxuICAgIGF3YWl0IHRoaXMuY2ZuLmV4ZWN1dGVDaGFuZ2VTZXQoe1xuICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldC5DaGFuZ2VTZXROYW1lISxcbiAgICAgIENsaWVudFJlcXVlc3RUb2tlbjogYGV4ZWMke3RoaXMudXVpZH1gLFxuICAgICAgLi4udGhpcy5jb21tb25FeGVjdXRlT3B0aW9ucygpLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhcbiAgICAgIGZvcm1hdChcbiAgICAgICAgJ0V4ZWN1dGlvbiBvZiBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMgaGFzIHN0YXJ0ZWQ7IHdhaXRpbmcgZm9yIHRoZSB1cGRhdGUgdG8gY29tcGxldGUuLi4nLFxuICAgICAgICBjaGFuZ2VTZXQuQ2hhbmdlU2V0SWQsXG4gICAgICAgIHRoaXMuc3RhY2tOYW1lLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gKzEgZm9yIHRoZSBleHRyYSBldmVudCBlbWl0dGVkIGZyb20gdXBkYXRlcy5cbiAgICBjb25zdCBjaGFuZ2VTZXRMZW5ndGg6IG51bWJlciA9IChjaGFuZ2VTZXQuQ2hhbmdlcyA/PyBbXSkubGVuZ3RoICsgKHRoaXMudXBkYXRlID8gMSA6IDApO1xuICAgIHJldHVybiB0aGlzLm1vbml0b3JEZXBsb3ltZW50KGNoYW5nZVNldC5DcmVhdGlvblRpbWUhLCBjaGFuZ2VTZXRMZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwT2xkQ2hhbmdlc2V0KGNoYW5nZVNldE5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2suZXhpc3RzKSB7XG4gICAgICAvLyBEZWxldGUgYW55IGV4aXN0aW5nIGNoYW5nZSBzZXRzIGdlbmVyYXRlZCBieSBDREsgc2luY2UgY2hhbmdlIHNldCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cbiAgICAgIC8vIFRoZSBkZWxldGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsIGFzIGxvbmcgYXMgdGhlIHN0YWNrIGV4aXN0cyAoZXZlbiBpZiB0aGUgY2hhbmdlIHNldCBkb2VzIG5vdCBleGlzdCkuXG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBSZW1vdmluZyBleGlzdGluZyBjaGFuZ2Ugc2V0IHdpdGggbmFtZSAke2NoYW5nZVNldE5hbWV9IGlmIGl0IGV4aXN0c2ApO1xuICAgICAgYXdhaXQgdGhpcy5jZm4uZGVsZXRlQ2hhbmdlU2V0KHtcbiAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKCkge1xuICAgIC8vIFVwZGF0ZSB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIG9ubHkgaWYgaXQgaGFzIGNoYW5nZWQuXG4gICAgY29uc3QgdGVybWluYXRpb25Qcm90ZWN0aW9uID0gdGhpcy5zdGFja0FydGlmYWN0LnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/PyBmYWxzZTtcbiAgICBpZiAoISF0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2sudGVybWluYXRpb25Qcm90ZWN0aW9uICE9PSB0ZXJtaW5hdGlvblByb3RlY3Rpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoXG4gICAgICAgIGZvcm1hdCAoXG4gICAgICAgICAgJ1VwZGF0aW5nIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZnJvbSAlcyB0byAlcyBmb3Igc3RhY2sgJXMnLFxuICAgICAgICAgIHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICAgIHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuY2ZuLnVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbih7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogdGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnVGVybWluYXRpb24gcHJvdGVjdGlvbiB1cGRhdGVkIHRvICVzIGZvciBzdGFjayAlcycsIHRlcm1pbmF0aW9uUHJvdGVjdGlvbiwgdGhpcy5zdGFja05hbWUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRpcmVjdERlcGxveW1lbnQoKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KCclczogJXMgc3RhY2suLi4nLCBjaGFsay5ib2xkKHRoaXMuc3RhY2tOYW1lKSwgdGhpcy51cGRhdGUgPyAndXBkYXRpbmcnIDogJ2NyZWF0aW5nJykpO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcblxuICAgIGlmICh0aGlzLnVwZGF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jZm4udXBkYXRlU3RhY2soe1xuICAgICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiBgdXBkYXRlJHt0aGlzLnV1aWR9YCxcbiAgICAgICAgICAuLi50aGlzLmNvbW1vblByZXBhcmVPcHRpb25zKCksXG4gICAgICAgICAgLi4udGhpcy5jb21tb25FeGVjdXRlT3B0aW9ucygpLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubWVzc2FnZSA9PT0gJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZC4nKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZCBmb3Igc3RhY2sgJXMnLCB0aGlzLnN0YWNrTmFtZSkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgICAgICBub09wOiB0cnVlLFxuICAgICAgICAgICAgb3V0cHV0czogdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICAgICAgICBzdGFja0FybjogdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm1vbml0b3JEZXBsb3ltZW50KHN0YXJ0VGltZSwgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjYW4gc2V0IHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZHVyaW5nIGNyZWF0ZVxuICAgICAgY29uc3QgdGVybWluYXRpb25Qcm90ZWN0aW9uID0gdGhpcy5zdGFja0FydGlmYWN0LnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/PyBmYWxzZTtcblxuICAgICAgYXdhaXQgdGhpcy5jZm4uY3JlYXRlU3RhY2soe1xuICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICBDbGllbnRSZXF1ZXN0VG9rZW46IGBjcmVhdGUke3RoaXMudXVpZH1gLFxuICAgICAgICAuLi4odGVybWluYXRpb25Qcm90ZWN0aW9uID8geyBFbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb246IHRydWUgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLnRoaXMuY29tbW9uUHJlcGFyZU9wdGlvbnMoKSxcbiAgICAgICAgLi4udGhpcy5jb21tb25FeGVjdXRlT3B0aW9ucygpLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLm1vbml0b3JEZXBsb3ltZW50KHN0YXJ0VGltZSwgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1vbml0b3JEZXBsb3ltZW50KHN0YXJ0VGltZTogRGF0ZSwgZXhwZWN0ZWRDaGFuZ2VzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBQcm9taXNlPFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGNvbnN0IG1vbml0b3IgPSBuZXcgU3RhY2tBY3Rpdml0eU1vbml0b3Ioe1xuICAgICAgY2ZuOiB0aGlzLmNmbixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrQXJ0aWZhY3QsXG4gICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgcmVzb3VyY2VzVG90YWw6IGV4cGVjdGVkQ2hhbmdlcyxcbiAgICAgIGlvSGVscGVyOiB0aGlzLmlvSGVscGVyLFxuICAgICAgY2hhbmdlU2V0Q3JlYXRpb25UaW1lOiBzdGFydFRpbWUsXG4gICAgICBlbnZSZXNvdXJjZXM6IHRoaXMub3B0aW9ucy5lbnZSZXNvdXJjZXMsXG4gICAgfSk7XG4gICAgYXdhaXQgbW9uaXRvci5zdGFydCgpO1xuXG4gICAgbGV0IGZpbmFsU3RhdGUgPSB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2s7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3NTdGFjayA9IGF3YWl0IHdhaXRGb3JTdGFja0RlcGxveSh0aGlzLmNmbiwgdGhpcy5pb0hlbHBlciwgdGhpcy5zdGFja05hbWUpO1xuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCByZWFsbHkgaGFwcGVuLCBidXQgY2F0Y2ggaXQgYW55d2F5LiBZb3UgbmV2ZXIga25vdy5cbiAgICAgIGlmICghc3VjY2Vzc1N0YWNrKSB7XG4gICAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50RXJyb3IoJ1N0YWNrIGRlcGxveSBmYWlsZWQgKHRoZSBzdGFjayBkaXNhcHBlYXJlZCB3aGlsZSB3ZSB3ZXJlIGRlcGxveWluZyBpdCknLCBEZXBsb3ltZW50RXJyb3JDb2Rlcy5TVEFDS19ESVNBUFBFQVJFRF9FUlJPUl9DT0RFKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsU3RhdGUgPSBzdWNjZXNzU3RhY2s7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRGVwbG95bWVudEVycm9yKHN1ZmZpeFdpdGhFcnJvcnMoZm9ybWF0RXJyb3JNZXNzYWdlKGUpLCBtb25pdG9yLmFsbEVycm9yTWVzc2FnZXMpLCBtb25pdG9yLnJvb3RDYXVzZUVycm9yQ29kZSA/PyAnU3RhY2tEZXBsb3lGYWlsZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgbW9uaXRvci5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdTdGFjayAlcyBoYXMgY29tcGxldGVkIHVwZGF0aW5nJywgdGhpcy5zdGFja05hbWUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgbm9PcDogZmFsc2UsXG4gICAgICBvdXRwdXRzOiBmaW5hbFN0YXRlLm91dHB1dHMsXG4gICAgICBzdGFja0FybjogZmluYWxTdGF0ZS5zdGFja0lkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvcHRpb25zIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIENyZWF0ZVN0YWNrLCBVcGRhdGVTdGFjayBhbmQgQ3JlYXRlQ2hhbmdlU2V0XG4gICAqL1xuICBwcml2YXRlIGNvbW1vblByZXBhcmVPcHRpb25zKCk6IFBhcnRpYWw8UGljazxVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCwgQ29tbW9uUHJlcGFyZU9wdGlvbnM+PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENhcGFiaWxpdGllczogWydDQVBBQklMSVRZX0lBTScsICdDQVBBQklMSVRZX05BTUVEX0lBTScsICdDQVBBQklMSVRZX0FVVE9fRVhQQU5EJ10sXG4gICAgICBOb3RpZmljYXRpb25BUk5zOiB0aGlzLm9wdGlvbnMubm90aWZpY2F0aW9uQXJucyxcbiAgICAgIFBhcmFtZXRlcnM6IHRoaXMuc3RhY2tQYXJhbXMuYXBpUGFyYW1ldGVycyxcbiAgICAgIFJvbGVBUk46IHRoaXMub3B0aW9ucy5yb2xlQXJuLFxuICAgICAgVGVtcGxhdGVCb2R5OiB0aGlzLmJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVCb2R5LFxuICAgICAgVGVtcGxhdGVVUkw6IHRoaXMuYm9keVBhcmFtZXRlci5UZW1wbGF0ZVVSTCxcbiAgICAgIFRhZ3M6IHRoaXMub3B0aW9ucy50YWdzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvcHRpb25zIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIFVwZGF0ZVN0YWNrIGFuZCBDcmVhdGVDaGFuZ2VTZXRcbiAgICpcbiAgICogQmUgY2FyZWZ1bCBub3QgdG8gYWRkIGluIGtleXMgZm9yIG9wdGlvbnMgdGhhdCBhcmVuJ3QgdXNlZCwgYXMgdGhlIGZlYXR1cmVzIG1heSBub3QgaGF2ZSBiZWVuXG4gICAqIGRlcGxveWVkIGV2ZXJ5d2hlcmUgeWV0LlxuICAgKi9cbiAgcHJpdmF0ZSBjb21tb25FeGVjdXRlT3B0aW9ucygpOiBQYXJ0aWFsPFBpY2s8VXBkYXRlU3RhY2tDb21tYW5kSW5wdXQsIENvbW1vbkV4ZWN1dGVPcHRpb25zPj4ge1xuICAgIGNvbnN0IHNob3VsZERpc2FibGVSb2xsYmFjayA9IHRoaXMub3B0aW9ucy5yb2xsYmFjayA9PT0gZmFsc2U7XG5cbiAgICByZXR1cm4ge1xuICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIC4uLihzaG91bGREaXNhYmxlUm9sbGJhY2sgPyB7IERpc2FibGVSb2xsYmFjazogdHJ1ZSB9IDogdW5kZWZpbmVkKSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gYmUgZGVzdHJveWVkXG4gICAqL1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIHNkazogU0RLO1xuICByb2xlQXJuPzogc3RyaW5nO1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lTdGFja1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzdGFjayB0aGF0IHdhcyBkZXN0cm95ZWQsIGlmIGFueS5cbiAgICpcbiAgICogSWYgdGhlIHN0YWNrIGRpZG4ndCBleGlzdCB0byBiZWdpbiB3aXRoLCB0aGUgb3BlcmF0aW9uIHdpbGwgc3VjY2VlZFxuICAgKiBidXQgdGhpcyB2YWx1ZSB3aWxsIGJlIHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQXJuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzdHJveVN0YWNrKG9wdGlvbnM6IERlc3Ryb3lTdGFja09wdGlvbnMsIGlvSGVscGVyOiBJb0hlbHBlcik6IFByb21pc2U8RGVzdHJveVN0YWNrUmVzdWx0PiB7XG4gIGNvbnN0IGRlcGxveU5hbWUgPSBvcHRpb25zLmRlcGxveU5hbWUgfHwgb3B0aW9ucy5zdGFjay5zdGFja05hbWU7XG4gIGNvbnN0IGNmbiA9IG9wdGlvbnMuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG5cbiAgY29uc3QgY3VycmVudFN0YWNrID0gYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoY2ZuLCBkZXBsb3lOYW1lKTtcbiAgaWYgKCFjdXJyZW50U3RhY2suZXhpc3RzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IG1vbml0b3IgPSBuZXcgU3RhY2tBY3Rpdml0eU1vbml0b3Ioe1xuICAgIGNmbixcbiAgICBzdGFjazogb3B0aW9ucy5zdGFjayxcbiAgICBzdGFja05hbWU6IGRlcGxveU5hbWUsXG4gICAgaW9IZWxwZXI6IGlvSGVscGVyLFxuICB9KTtcbiAgYXdhaXQgbW9uaXRvci5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2ZuLmRlbGV0ZVN0YWNrKHsgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLCBSb2xlQVJOOiBvcHRpb25zLnJvbGVBcm4gfSk7XG4gICAgY29uc3QgZGVzdHJveWVkU3RhY2sgPSBhd2FpdCB3YWl0Rm9yU3RhY2tEZWxldGUoY2ZuLCBpb0hlbHBlciwgZGVwbG95TmFtZSk7XG4gICAgaWYgKGRlc3Ryb3llZFN0YWNrICYmIGRlc3Ryb3llZFN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdERUxFVEVfQ09NUExFVEUnKSB7XG4gICAgICB0aHJvdyBuZXcgRGVwbG95bWVudEVycm9yKGBGYWlsZWQgdG8gZGVzdHJveSAke2RlcGxveU5hbWV9OiAke2Rlc3Ryb3llZFN0YWNrLnN0YWNrU3RhdHVzfWAsICdTdGFja0Rlc3Ryb3lGYWlsZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFja0FybjogY3VycmVudFN0YWNrLnN0YWNrSWQgfTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IERlcGxveW1lbnRFcnJvcihzdWZmaXhXaXRoRXJyb3JzKGZvcm1hdEVycm9yTWVzc2FnZShlKSwgbW9uaXRvci5hbGxFcnJvck1lc3NhZ2VzKSwgbW9uaXRvci5yb290Q2F1c2VFcnJvckNvZGUgPz8gJ1N0YWNrRGVzdHJveUZhaWxlZCcpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChtb25pdG9yKSB7XG4gICAgICBhd2FpdCBtb25pdG9yLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB3ZSBjYW4gc2tpcCBkZXBsb3ltZW50XG4gKlxuICogV2UgZG8gdGhpcyBpbiBhIGNvbXBsaWNhdGVkIHdheSBieSBwcmVwcm9jZXNzaW5nIChpbnN0ZWFkIG9mIGp1c3RcbiAqIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXNldCksIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5lc3RlZCBzdGFja3MgaW52b2x2ZWRcbiAqIHRoZSBjaGFuZ2VzZXQgd2lsbCBhbHdheXMgc2hvdyB0aGUgbmVzdGVkIHN0YWNrcyBhcyBuZWVkaW5nIHRvIGJlXG4gKiB1cGRhdGVkLCBhbmQgdGhlIGRlcGxveW1lbnQgd2lsbCB0YWtlIGEgbG9uZyB0aW1lIHRvIGluIGVmZmVjdCBub3RcbiAqIGRvIGFueXRoaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBjYW5Ta2lwRGVwbG95KFxuICBkZXBsb3lTdGFja09wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyxcbiAgY2xvdWRGb3JtYXRpb25TdGFjazogQ2xvdWRGb3JtYXRpb25TdGFjayxcbiAgcGFyYW1ldGVyQ2hhbmdlczogUGFyYW1ldGVyQ2hhbmdlcyxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGRlcGxveU5hbWUgPSBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95TmFtZSB8fCBkZXBsb3lTdGFja09wdGlvbnMuc3RhY2suc3RhY2tOYW1lO1xuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogY2hlY2tpbmcgaWYgd2UgY2FuIHNraXAgZGVwbG95YCk7XG5cbiAgLy8gRm9yY2VkIGRlcGxveVxuICBpZiAoZGVwbG95U3RhY2tPcHRpb25zLmZvcmNlRGVwbG95bWVudCkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBmb3JjZWQgZGVwbG95bWVudGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENyZWF0aW5nIGNoYW5nZXNldCBvbmx5IChkZWZhdWx0IHRydWUpLCBuZXZlciBza2lwXG4gIGlmIChcbiAgICBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kID09PSAnY2hhbmdlLXNldCcgJiZcbiAgICBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95bWVudE1ldGhvZC5leGVjdXRlID09PSBmYWxzZVxuICApIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogLS1uby1leGVjdXRlLCBhbHdheXMgY3JlYXRpbmcgY2hhbmdlIHNldGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEV4ZWN1dGluZyBhbiBleGlzdGluZyBjaGFuZ2Ugc2V0LCBuZXZlciBza2lwXG4gIGlmIChkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kID09PSAnZXhlY3V0ZS1jaGFuZ2Utc2V0Jykge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBleGVjdXRpbmcgZXhpc3RpbmcgY2hhbmdlIHNldCwgbmV2ZXIgc2tpcGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIERyaWZ0LWF3YXJlXG4gIGlmIChcbiAgICBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kID09PSAnY2hhbmdlLXNldCcgJiZcbiAgICBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95bWVudE1ldGhvZC5yZXZlcnREcmlmdFxuICApIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogLS1yZXZlcnQtZHJpZnQsIGFsd2F5cyBjcmVhdGluZyBjaGFuZ2Ugc2V0YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTm8gZXhpc3Rpbmcgc3RhY2tcbiAgaWYgKCFjbG91ZEZvcm1hdGlvblN0YWNrLmV4aXN0cykge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBubyBleGlzdGluZyBzdGFja2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlbXBsYXRlIGhhcyBjaGFuZ2VkIChhc3NldHMgdGFrZW4gaW50byBhY2NvdW50IGhlcmUpXG4gIGlmIChKU09OLnN0cmluZ2lmeShkZXBsb3lTdGFja09wdGlvbnMuc3RhY2sudGVtcGxhdGUpICE9PSBKU09OLnN0cmluZ2lmeShhd2FpdCBjbG91ZEZvcm1hdGlvblN0YWNrLnRlbXBsYXRlKCkpKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHRlbXBsYXRlIGhhcyBjaGFuZ2VkYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGFncyBoYXZlIGNoYW5nZWRcbiAgaWYgKCFjb21wYXJlVGFncyhjbG91ZEZvcm1hdGlvblN0YWNrLnRhZ3MsIGRlcGxveVN0YWNrT3B0aW9ucy50YWdzID8/IFtdKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiB0YWdzIGhhdmUgY2hhbmdlZGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE5vdGlmaWNhdGlvbiBhcm5zIGhhdmUgY2hhbmdlZFxuICBpZiAoIWFycmF5RXF1YWxzKGNsb3VkRm9ybWF0aW9uU3RhY2subm90aWZpY2F0aW9uQXJucywgZGVwbG95U3RhY2tPcHRpb25zLm5vdGlmaWNhdGlvbkFybnMgPz8gW10pKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IG5vdGlmaWNhdGlvbiBhcm5zIGhhdmUgY2hhbmdlZGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlcm1pbmF0aW9uIHByb3RlY3Rpb24gaGFzIGJlZW4gdXBkYXRlZFxuICBpZiAoISFkZXBsb3lTdGFja09wdGlvbnMuc3RhY2sudGVybWluYXRpb25Qcm90ZWN0aW9uICE9PSAhIWNsb3VkRm9ybWF0aW9uU3RhY2sudGVybWluYXRpb25Qcm90ZWN0aW9uKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gaGFzIGJlZW4gdXBkYXRlZGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VkXG4gIGlmIChwYXJhbWV0ZXJDaGFuZ2VzKSB7XG4gICAgaWYgKHBhcmFtZXRlckNoYW5nZXMgPT09ICdzc20nKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogc29tZSBwYXJhbWV0ZXJzIGNvbWUgZnJvbSBTU00gc28gd2UgaGF2ZSB0byBhc3N1bWUgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZGApO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFeGlzdGluZyBzdGFjayBpcyBpbiBhIGZhaWxlZCBzdGF0ZVxuICBpZiAoY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5pc0ZhaWx1cmUpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogc3RhY2sgaXMgaW4gYSBmYWlsdXJlIHN0YXRlYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gV2UgY2FuIHNraXAgZGVwbG95XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBsaXN0IG9mIHRhZ3MsIHJldHVybnMgdHJ1ZSBpZiBpZGVudGljYWwuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVUYWdzKGE6IFRhZ1tdLCBiOiBUYWdbXSk6IGJvb2xlYW4ge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBhVGFnIG9mIGEpIHtcbiAgICBjb25zdCBiVGFnID0gYi5maW5kKCh0YWcpID0+IHRhZy5LZXkgPT09IGFUYWcuS2V5KTtcblxuICAgIGlmICghYlRhZyB8fCBiVGFnLlZhbHVlICE9PSBhVGFnLlZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHN1ZmZpeFdpdGhFcnJvcnMobXNnOiBzdHJpbmcsIGVycm9ycz86IHN0cmluZ1tdKSB7XG4gIHJldHVybiBlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDAgPyBgJHttc2d9OiAke2Vycm9ycy5qb2luKCcsICcpfWAgOiBtc2c7XG59XG5cbmZ1bmN0aW9uIGFycmF5RXF1YWxzKGE6IGFueVtdLCBiOiBhbnlbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5ldmVyeSgoaXRlbSkgPT4gYi5pbmNsdWRlcyhpdGVtKSkgJiYgYi5ldmVyeSgoaXRlbSkgPT4gYS5pbmNsdWRlcyhpdGVtKSk7XG59XG5cbmZ1bmN0aW9uIGhhc1JlcGxhY2VtZW50KGNzOiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQpIHtcbiAgcmV0dXJuIChjcy5DaGFuZ2VzID8/IFtdKS5zb21lKGMgPT4ge1xuICAgIGNvbnN0IGEgPSBjLlJlc291cmNlQ2hhbmdlPy5Qb2xpY3lBY3Rpb247XG4gICAgcmV0dXJuIGEgPT09ICdSZXBsYWNlQW5kRGVsZXRlJyB8fCBhID09PSAnUmVwbGFjZUFuZFJldGFpbicgfHwgYSA9PT0gJ1JlcGxhY2VBbmRTbmFwc2hvdCc7XG4gIH0pO1xufVxuIl19
|
|
579
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaU1BLGtDQXFKQztBQThaRCxvQ0ErQkM7QUFueEJELCtCQUE4QjtBQVU5QiwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLHFFQUFnRTtBQUNoRSx5REFBbUQ7QUFDbkQscUNBQXVEO0FBS3ZELHVDQU9tQjtBQUNuQixxQ0FBcUU7QUFHckUsc0ZBQWdHO0FBQ2hHLCtEQUFrRztBQUNsRyxxQ0FBZ0Q7QUFHaEQsc0RBQW1HO0FBRW5HLGdEQUE4RDtBQUM5RCw4Q0FBbUc7QUFDbkcsd0VBQXNFO0FBR3RFLGtEQUF1RDtBQUN2RCx5REFBNkQ7QUFzSnRELEtBQUssVUFBVSxXQUFXLENBQUMsT0FBMkIsRUFBRSxRQUFrQjtJQUMvRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztJQUU3QyxJQUFJLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUM1RSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNqRSxJQUFJLG1CQUFtQixHQUFHLE1BQU0sb0NBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUU1RSxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFL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QUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxFQUFrQztJQUN4RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7UUFDekMsT0FBTyxDQUFDLEtBQUssa0JBQWtCLElBQUksQ0FBQyxLQUFLLGtCQUFrQixJQUFJLENBQUMsS0FBSyxvQkFBb0IsQ0FBQztJQUM1RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHtcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBDcmVhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgVGFnLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcbmltcG9ydCB7IHB1Ymxpc2hBc3NldHMgfSBmcm9tICcuL2Fzc2V0LXB1Ymxpc2hpbmcnO1xuaW1wb3J0IHsgYWRkTWV0YWRhdGFBc3NldHNUb01hbmlmZXN0IH0gZnJvbSAnLi9hc3NldHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXJhbWV0ZXJWYWx1ZXMsXG4gIFBhcmFtZXRlckNoYW5nZXMsXG59IGZyb20gJy4vY2ZuLWFwaSc7XG5pbXBvcnQge1xuICBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMsXG4gIFRlbXBsYXRlUGFyYW1ldGVycyxcbiAgd2FpdEZvckNoYW5nZVNldCxcbiAgd2FpdEZvclN0YWNrRGVwbG95LFxuICB3YWl0Rm9yU3RhY2tEZWxldGUsXG4gIHdhaXRGb3JDaGFuZ2VTZXRHb25lLFxufSBmcm9tICcuL2Nmbi1hcGknO1xuaW1wb3J0IHsgZGV0ZXJtaW5lQWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcgfSBmcm9tICcuL2NoZWNrcyc7XG5pbXBvcnQgdHlwZSB7IERlcGxveVN0YWNrUmVzdWx0LCBTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuL2RlcGxveW1lbnQtcmVzdWx0JztcbmltcG9ydCB0eXBlIHsgQ2hhbmdlU2V0RGVwbG95bWVudCwgRGVwbG95bWVudE1ldGhvZCwgRGlyZWN0RGVwbG95bWVudCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZGVwbG95JztcbmltcG9ydCB7IERFRkFVTFRfREVQTE9ZX0NIQU5HRV9TRVRfTkFNRSB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZGVwbG95L3ByaXZhdGUvZGVwbG95bWVudC1tZXRob2QnO1xuaW1wb3J0IHsgRGVwbG95bWVudEVycm9yLCBEZXBsb3ltZW50RXJyb3JDb2RlcywgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZvcm1hdEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREssIFNka1Byb3ZpZGVyLCBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVCb2R5UGFyYW1ldGVyIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgbWFrZUJvZHlQYXJhbWV0ZXIsIENmbkV2YWx1YXRpb25FeGNlcHRpb24sIENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50UmVzb3VyY2VzLCBTdHJpbmdXaXRob3V0UGxhY2Vob2xkZXJzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcywgSUNPTiwgY3JlYXRlSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzIH0gZnJvbSAnLi4vaG90c3dhcC9jb21tb24nO1xuaW1wb3J0IHsgdHJ5SG90c3dhcERlcGxveW1lbnQgfSBmcm9tICcuLi9ob3Rzd2FwL2hvdHN3YXAtZGVwbG95bWVudHMnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZXNUb0ltcG9ydCB9IGZyb20gJy4uL3Jlc291cmNlLWltcG9ydCc7XG5pbXBvcnQgeyBTdGFja0FjdGl2aXR5TW9uaXRvciB9IGZyb20gJy4uL3N0YWNrLWV2ZW50cyc7XG5pbXBvcnQgeyBFYXJseVZhbGlkYXRpb25SZXBvcnRlciB9IGZyb20gJy4vZWFybHktdmFsaWRhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGVDaGFuZ2VTZXREZXBsb3ltZW50IH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9kZXBsb3kvcHJpdmF0ZS9kZXBsb3ltZW50LW1ldGhvZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95U3RhY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0byBiZSBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IHRvIGRlcGxveSB0aGlzIHN0YWNrIGluXG4gICAqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBvbiB0aGUgc3RhY2sgYXJ0aWZhY3QgbWF5IGJlIHVucmVzb2x2ZWQsIHRoaXMgb25lXG4gICAqIG11c3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZEVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudDtcblxuICAvKipcbiAgICogVGhlIFNESyB0byB1c2UgZm9yIGRlcGxveWluZyB0aGUgc3RhY2tcbiAgICpcbiAgICogU2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCB3aXRoIHRoZSBjb3JyZWN0IHJvbGUgd2l0aCB3aGljaFxuICAgKiBzdGFjayBvcGVyYXRpb25zIHNob3VsZCBiZSBwZXJmb3JtZWQuXG4gICAqL1xuICByZWFkb25seSBzZGs6IFNESztcblxuICAvKipcbiAgICogU0RLIHByb3ZpZGVyIChzZWVkZWQgd2l0aCBkZWZhdWx0IGNyZWRlbnRpYWxzKVxuICAgKlxuICAgKiBXaWxsIGJlIHVzZWQgdG86XG4gICAqXG4gICAqIC0gUHVibGlzaCBhc3NldHMsIGVpdGhlciBsZWdhY3kgYXNzZXRzIG9yIGxhcmdlIENGTiB0ZW1wbGF0ZXNcbiAgICogICB0aGF0IGFyZW4ndCB0aGVtc2VsdmVzIGFzc2V0cyBmcm9tIGEgbWFuaWZlc3QuIChOZWVkcyBhbiBTREtcbiAgICogICBQcm92aWRlciBiZWNhdXNlIHRoZSBmaWxlIHB1Ymxpc2hpbmcgcm9sZSBpcyBkZWNsYXJlZCBhcyBwYXJ0XG4gICAqICAgb2YgdGhlIGFzc2V0KS5cbiAgICogLSBIb3Rzd2FwXG4gICAqL1xuICByZWFkb25seSBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBib290c3RyYXAgc3RhY2sgZm91bmQgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgZW52UmVzb3VyY2VzOiBFbnZpcm9ubWVudFJlc291cmNlcztcblxuICAvKipcbiAgICogUm9sZSB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIHRvIGV4ZWN1dGUgdGhlIGNoYW5nZSBzZXRcbiAgICpcbiAgICogVG8gb2J0YWluIGEgYFN0cmluZ1dpdGhvdXRQbGFjZWhvbGRlcnNgLCBydW4gYSByZWd1bGFyXG4gICAqIHN0cmluZyB0aG91Z2ggYFRhcmdldEVudmlyb25tZW50LnJlcGxhY2VQbGFjZWhvbGRlcnNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGV4ZWN1dGlvbiByb2xlOyBDbG91ZEZvcm1hdGlvbiBlaXRoZXIgdXNlcyB0aGUgcm9sZSBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoXG4gICAqIHRoZSBzdGFjaywgb3Igb3RoZXJ3aXNlIHVzZXMgY3VycmVudCBBV1MgY3JlZGVudGlhbHNcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm4/OiBTdHJpbmdXaXRob3V0UGxhY2Vob2xkZXJzO1xuXG4gIC8qKlxuICAgKiBOb3RpZmljYXRpb24gQVJOcyB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIHRvIG5vdGlmeSB3aGVuIHRoZSBjaGFuZ2Ugc2V0IGhhcyBjb21wbGV0ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWUgdG8gZGVwbG95IHRoZSBzdGFjayB1bmRlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5hbWUgZnJvbSBhc3NlbWJseVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBhc3NldCBJRHMgd2hpY2ggc2hvdWxkbid0IGJlIGJ1aWx0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnVpbGQgYWxsIGFzc2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VBc3NldHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGFncyB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIHRvIGFkZCB0byBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBUYWdbXTtcblxuICAvKipcbiAgICogV2hhdCBkZXBsb3ltZW50IG1ldGhvZCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDaGFuZ2Ugc2V0IHdpdGggZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRNZXRob2Q/OiBEZXBsb3ltZW50TWV0aG9kIHwgRXhlY3V0ZUNoYW5nZVNldERlcGxveW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2xsZWN0aW9uIG9mIGV4dHJhIHBhcmFtZXRlcnNcbiAgICogKGluIGFkZGl0aW9uIHRvIHRob3NlIHVzZWQgZm9yIGFzc2V0cylcbiAgICogdG8gcGFzcyB0byB0aGUgZGVwbG95ZWQgdGVtcGxhdGUuXG4gICAqIE5vdGUgdGhhdCBwYXJhbWV0ZXJzIHdpdGggYHVuZGVmaW5lZGAgb3IgZW1wdHkgdmFsdWVzIHdpbGwgYmUgaWdub3JlZCxcbiAgICogYW5kIG5vdCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogVXNlIHByZXZpb3VzIHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBJZiBub3Qgc2V0LCBhbGwgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlcnkgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHVzZVByZXZpb3VzUGFyYW1ldGVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlcGxveSBldmVuIGlmIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZSBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSB3ZSBhcmUgYWJvdXQgdG8gZGVwbG95LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2VEZXBsb3ltZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUm9sbGJhY2sgZmFpbGVkIGRlcGxveW1lbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxiYWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGV4dHJhIHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyIHdoZW4gcGVyZm9ybWluZyBBV1MgU0RLIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vdGhpbmcgZXh0cmEgaXMgYXBwZW5kZWQgdG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyXG4gICAqL1xuICByZWFkb25seSBleHRyYVVzZXJBZ2VudD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0LCBjaGFuZ2Ugc2V0IG9mIHR5cGUgSU1QT1JUIHdpbGwgYmUgY3JlYXRlZCwgYW5kIHJlc291cmNlc1RvSW1wb3J0XG4gICAqIHBhc3NlZCB0byBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlc1RvSW1wb3J0PzogUmVzb3VyY2VzVG9JbXBvcnQ7XG5cbiAgLyoqXG4gICAqIElmIHByZXNlbnQsIHVzZSB0aGlzIGdpdmVuIHRlbXBsYXRlIGluc3RlYWQgb2YgdGhlIHN0b3JlZCBvbmVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2UgdGhlIHN0b3JlZCB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVUZW1wbGF0ZT86IGFueTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBidWlsZC9wdWJsaXNoIGFzc2V0cyBpbiBwYXJhbGxlbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIFRvIHJlbWFpbiBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRQYXJhbGxlbGlzbT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXBsb3lTdGFjayhvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsIGlvSGVscGVyOiBJb0hlbHBlcik6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhY2tBcnRpZmFjdCA9IG9wdGlvbnMuc3RhY2s7XG4gIGNvbnN0IHN0YWNrRW52ID0gb3B0aW9ucy5yZXNvbHZlZEVudmlyb25tZW50O1xuXG4gIGxldCBkZXBsb3ltZW50TWV0aG9kID0gb3B0aW9ucy5kZXBsb3ltZW50TWV0aG9kID8/IHsgbWV0aG9kOiAnY2hhbmdlLXNldCcgfTtcbiAgb3B0aW9ucy5zZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KG9wdGlvbnMuZXh0cmFVc2VyQWdlbnQpO1xuICBjb25zdCBjZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuICBjb25zdCBkZXBsb3lOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lIHx8IHN0YWNrQXJ0aWZhY3Quc3RhY2tOYW1lO1xuICBsZXQgY2xvdWRGb3JtYXRpb25TdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgZGVwbG95TmFtZSk7XG5cbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMuaXNDcmVhdGlvbkZhaWx1cmUpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhcbiAgICAgIGBGb3VuZCBleGlzdGluZyBzdGFjayAke2RlcGxveU5hbWV9IHRoYXQgaGFkIHByZXZpb3VzbHkgZmFpbGVkIGNyZWF0aW9uLiBEZWxldGluZyBpdCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZS1jcmVhdGUgaXQuYCxcbiAgICApO1xuICAgIGF3YWl0IGNmbi5kZWxldGVTdGFjayh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSB9KTtcbiAgICBjb25zdCBkZWxldGVkU3RhY2sgPSBhd2FpdCB3YWl0Rm9yU3RhY2tEZWxldGUoY2ZuLCBpb0hlbHBlciwgZGVwbG95TmFtZSk7XG4gICAgaWYgKGRlbGV0ZWRTdGFjayAmJiBkZWxldGVkU3RhY2suc3RhY2tTdGF0dXMubmFtZSAhPT0gJ0RFTEVURV9DT01QTEVURScpIHtcbiAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50RXJyb3IoXG4gICAgICAgIGBGYWlsZWQgZGVsZXRpbmcgc3RhY2sgJHtkZXBsb3lOYW1lfSB0aGF0IGhhZCBwcmV2aW91c2x5IGZhaWxlZCBjcmVhdGlvbiAoY3VycmVudCBzdGF0ZTogJHtkZWxldGVkU3RhY2suc3RhY2tTdGF0dXN9KWAsXG4gICAgICAgICdGYWlsZWRTdGFja0NsZWFudXBGYWlsZWQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHZhcmlhYmxlIHRvIG1hcmsgdGhhdCB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgYnV0IGF2b2lkXG4gICAgLy8gZG9pbmcgYW4gYWN0dWFsIGxvb2t1cCBpbiBDbG91ZEZvcm1hdGlvbiAod2hpY2ggd291bGQgYmUgc2lsbHkgdG8gZG8gaWZcbiAgICAvLyB3ZSBqdXN0IGRlbGV0ZWQgaXQpLlxuICAgIGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBDbG91ZEZvcm1hdGlvblN0YWNrLmRvZXNOb3RFeGlzdChjZm4sIGRlcGxveU5hbWUpO1xuICB9XG5cbiAgLy8gRGV0ZWN0IFwibGVnYWN5XCIgYXNzZXRzICh3aGljaCByZW1haW4gaW4gdGhlIG1ldGFkYXRhKSBhbmQgcHVibGlzaCB0aGVtIHZpYVxuICAvLyBhbiBhZC1ob2MgYXNzZXQgbWFuaWZlc3QsIHdoaWxlIHBhc3NpbmcgdGhlaXIgbG9jYXRpb25zIHZpYSB0ZW1wbGF0ZVxuICAvLyBwYXJhbWV0ZXJzLlxuICBjb25zdCBsZWdhY3lBc3NldHMgPSBuZXcgQXNzZXRNYW5pZmVzdEJ1aWxkZXIoKTtcbiAgY29uc3QgYXNzZXRQYXJhbXMgPSBhd2FpdCBhZGRNZXRhZGF0YUFzc2V0c1RvTWFuaWZlc3QoXG4gICAgaW9IZWxwZXIsXG4gICAgc3RhY2tBcnRpZmFjdCxcbiAgICBsZWdhY3lBc3NldHMsXG4gICAgb3B0aW9ucy5lbnZSZXNvdXJjZXMsXG4gICAgb3B0aW9ucy5yZXVzZUFzc2V0cyxcbiAgKTtcblxuICBjb25zdCBmaW5hbFBhcmFtZXRlclZhbHVlcyA9IHsgLi4ub3B0aW9ucy5wYXJhbWV0ZXJzLCAuLi5hc3NldFBhcmFtcyB9O1xuXG4gIGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZShzdGFja0FydGlmYWN0LnRlbXBsYXRlKTtcbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSBvcHRpb25zLnVzZVByZXZpb3VzUGFyYW1ldGVyc1xuICAgID8gdGVtcGxhdGVQYXJhbXMudXBkYXRlRXhpc3RpbmcoZmluYWxQYXJhbWV0ZXJWYWx1ZXMsIGNsb3VkRm9ybWF0aW9uU3RhY2sucGFyYW1ldGVycylcbiAgICA6IHRlbXBsYXRlUGFyYW1zLnN1cHBseUFsbChmaW5hbFBhcmFtZXRlclZhbHVlcyk7XG5cbiAgaWYgKGF3YWl0IGNhblNraXBEZXBsb3kob3B0aW9ucywgY2xvdWRGb3JtYXRpb25TdGFjaywgc3RhY2tQYXJhbXMuaGFzQ2hhbmdlcyhjbG91ZEZvcm1hdGlvblN0YWNrLnBhcmFtZXRlcnMpLCBpb0hlbHBlcikpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogc2tpcHBpbmcgZGVwbG95bWVudCAodXNlIC0tZm9yY2UgdG8gb3ZlcnJpZGUpYCk7XG4gICAgLy8gaWYgd2UgY2FuIHNraXAgZGVwbG95bWVudCBhbmQgd2UgYXJlIHBlcmZvcm1pbmcgYSBob3Rzd2FwLCBsZXQgdGhlIHVzZXIga25vd1xuICAgIC8vIHRoYXQgbm8gaG90c3dhcCBkZXBsb3ltZW50IGhhcHBlbmVkXG4gICAgaWYgKGRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2hvdHN3YXAnKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKFxuICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgYFxcbiAke0lDT059ICVzXFxuYCxcbiAgICAgICAgICBjaGFsay5ib2xkKCdob3Rzd2FwIGRlcGxveW1lbnQgc2tpcHBlZCAtIG5vIGNoYW5nZXMgd2VyZSBkZXRlY3RlZCAodXNlIC0tZm9yY2UgdG8gb3ZlcnJpZGUpJyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgbm9PcDogdHJ1ZSxcbiAgICAgIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogZGVwbG95aW5nLi4uYCk7XG4gIH1cblxuICBjb25zdCBib2R5UGFyYW1ldGVyID0gYXdhaXQgbWFrZUJvZHlQYXJhbWV0ZXIoXG4gICAgaW9IZWxwZXIsXG4gICAgc3RhY2tBcnRpZmFjdCxcbiAgICBvcHRpb25zLnJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgbGVnYWN5QXNzZXRzLFxuICAgIG9wdGlvbnMuZW52UmVzb3VyY2VzLFxuICAgIG9wdGlvbnMub3ZlcnJpZGVUZW1wbGF0ZSxcbiAgKTtcbiAgbGV0IGJvb3RzdHJhcFN0YWNrTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGJvb3RzdHJhcFN0YWNrTmFtZSA9IChhd2FpdCBvcHRpb25zLmVudlJlc291cmNlcy5sb29rdXBUb29sa2l0KCkpLnN0YWNrTmFtZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBib290c3RyYXAgc3RhY2sgbmFtZTogJHtlfWApO1xuICB9XG4gIGF3YWl0IHB1Ymxpc2hBc3NldHMobGVnYWN5QXNzZXRzLnRvTWFuaWZlc3Qoc3RhY2tBcnRpZmFjdC5hc3NlbWJseS5kaXJlY3RvcnkpLCBvcHRpb25zLnNka1Byb3ZpZGVyLCBzdGFja0Vudiwge1xuICAgIHBhcmFsbGVsOiBvcHRpb25zLmFzc2V0UGFyYWxsZWxpc20sXG4gICAgYWxsb3dDcm9zc0FjY291bnQ6IGF3YWl0IGRldGVybWluZUFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nKG9wdGlvbnMuc2RrLCBpb0hlbHBlciwgYm9vdHN0cmFwU3RhY2tOYW1lKSxcbiAgfSwgaW9IZWxwZXIpO1xuXG4gIC8vIGF0dGVtcHQgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudCBpZiBwb3NzaWJsZVxuICBpZiAoZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kID09PSAnaG90c3dhcCcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaG90c3dhcE1vZGVOZXcgPSBkZXBsb3ltZW50TWV0aG9kPy5mYWxsYmFjayA/ICdmYWxsLWJhY2snIDogJ2hvdHN3YXAtb25seSc7XG4gICAgICBjb25zdCBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMgPSBkZXBsb3ltZW50TWV0aG9kLnByb3BlcnRpZXNcbiAgICAgICAgPyBjcmVhdGVIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMoZGVwbG95bWVudE1ldGhvZC5wcm9wZXJ0aWVzKVxuICAgICAgICA6IG5ldyBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMoKTtcblxuICAgICAgY29uc3QgaG90c3dhcERlcGxveW1lbnRSZXN1bHQgPSBhd2FpdCB0cnlIb3Rzd2FwRGVwbG95bWVudChcbiAgICAgICAgb3B0aW9ucy5zZGtQcm92aWRlcixcbiAgICAgICAgaW9IZWxwZXIsXG4gICAgICAgIHN0YWNrUGFyYW1zLnZhbHVlcyxcbiAgICAgICAgY2xvdWRGb3JtYXRpb25TdGFjayxcbiAgICAgICAgc3RhY2tBcnRpZmFjdCxcbiAgICAgICAgaG90c3dhcE1vZGVOZXcsXG4gICAgICAgIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgICAgICk7XG5cbiAgICAgIGlmIChob3Rzd2FwRGVwbG95bWVudFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gaG90c3dhcERlcGxveW1lbnRSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KFxuICAgICAgICAnQ291bGQgbm90IHBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsIGFzIHRoZSBzdGFjayAlcyBjb250YWlucyBub24tQXNzZXQgY2hhbmdlcycsXG4gICAgICAgIHN0YWNrQXJ0aWZhY3QuZGlzcGxheU5hbWUsXG4gICAgICApKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoIShlIGluc3RhbmNlb2YgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbikpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KFxuICAgICAgICAnQ291bGQgbm90IHBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsIGJlY2F1c2UgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJXMnLFxuICAgICAgICBmb3JtYXRFcnJvck1lc3NhZ2UoZSksXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAoZGVwbG95bWVudE1ldGhvZC5mYWxsYmFjaykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnRmFsbGluZyBiYWNrIHRvIGRvaW5nIGEgZnVsbCBkZXBsb3ltZW50Jyk7XG4gICAgICBvcHRpb25zLnNkay5hcHBlbmRDdXN0b21Vc2VyQWdlbnQoJ2Nkay1ob3Rzd2FwL2ZhbGxiYWNrJyk7XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0gZGVwbG95bWVudE1ldGhvZC5mYWxsYmFjaztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICBub09wOiB0cnVlLFxuICAgICAgICBzdGFja0FybjogY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLFxuICAgICAgICBvdXRwdXRzOiBjbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGNvdWxkIG5vdCBzaG9ydC1jaXJjdWl0IHRoZSBkZXBsb3ltZW50LCBwZXJmb3JtIGEgZnVsbCBDRk4gZGVwbG95IGluc3RlYWRcbiAgY29uc3QgZnVsbERlcGxveW1lbnQgPSBuZXcgRnVsbENsb3VkRm9ybWF0aW9uRGVwbG95bWVudChcbiAgICBkZXBsb3ltZW50TWV0aG9kLFxuICAgIG9wdGlvbnMsXG4gICAgY2xvdWRGb3JtYXRpb25TdGFjayxcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIHN0YWNrUGFyYW1zLFxuICAgIGJvZHlQYXJhbWV0ZXIsXG4gICAgaW9IZWxwZXIsXG4gICk7XG4gIHJldHVybiBmdWxsRGVwbG95bWVudC5wZXJmb3JtRGVwbG95bWVudCgpO1xufVxuXG50eXBlIENvbW1vblByZXBhcmVPcHRpb25zID0ga2V5b2YgQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQgJlxua2V5b2YgVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQgJlxua2V5b2YgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0O1xudHlwZSBDb21tb25FeGVjdXRlT3B0aW9ucyA9IGtleW9mIENyZWF0ZVN0YWNrQ29tbWFuZElucHV0ICZcbmtleW9mIFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0ICZcbmtleW9mIEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQ7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBzaGFyZXMgc3RhdGUgYW5kIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZ1bGwgZGVwbG95bWVudCBtb2Rlc1xuICovXG5jbGFzcyBGdWxsQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVyYjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHV1aWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlcGxveW1lbnRNZXRob2Q6IERpcmVjdERlcGxveW1lbnQgfCBDaGFuZ2VTZXREZXBsb3ltZW50IHwgRXhlY3V0ZUNoYW5nZVNldERlcGxveW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tQYXJhbXM6IFBhcmFtZXRlclZhbHVlcyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJvZHlQYXJhbWV0ZXI6IFRlbXBsYXRlQm9keVBhcmFtZXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcixcbiAgKSB7XG4gICAgdGhpcy5jZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuICAgIHRoaXMuc3RhY2tOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lID8/IHN0YWNrQXJ0aWZhY3Quc3RhY2tOYW1lO1xuXG4gICAgdGhpcy51cGRhdGUgPSBjbG91ZEZvcm1hdGlvblN0YWNrLmV4aXN0cyAmJiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdSRVZJRVdfSU5fUFJPR1JFU1MnO1xuICAgIHRoaXMudmVyYiA9IHRoaXMudXBkYXRlID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcbiAgICB0aGlzLnV1aWQgPSB1dWlkLnY0KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybURlcGxveW1lbnQoKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGNvbnN0IGRlcGxveW1lbnRNZXRob2QgPSB0aGlzLmRlcGxveW1lbnRNZXRob2QgPz8geyBtZXRob2Q6ICdjaGFuZ2Utc2V0JyB9O1xuXG4gICAgaWYgKGRlcGxveW1lbnRNZXRob2QubWV0aG9kID09PSAnZGlyZWN0JyAmJiB0aGlzLm9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ltcG9ydFJlcXVpcmVzQ2hhbmdlU2V0JywgJ0ltcG9ydGluZyByZXNvdXJjZXMgcmVxdWlyZXMgYSBjaGFuZ2VzZXQgZGVwbG95bWVudCcpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGVwbG95bWVudE1ldGhvZC5tZXRob2QpIHtcbiAgICAgIGNhc2UgJ2NoYW5nZS1zZXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5jaGFuZ2VTZXREZXBsb3ltZW50KGRlcGxveW1lbnRNZXRob2QpO1xuXG4gICAgICBjYXNlICdleGVjdXRlLWNoYW5nZS1zZXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRlRXhpc3RpbmdDaGFuZ2VTZXQoZGVwbG95bWVudE1ldGhvZCk7XG5cbiAgICAgIGNhc2UgJ2RpcmVjdCc6XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdERlcGxveW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoYW5nZVNldERlcGxveW1lbnQoZGVwbG95bWVudE1ldGhvZDogQ2hhbmdlU2V0RGVwbG95bWVudCk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBjaGFuZ2VTZXROYW1lID0gZGVwbG95bWVudE1ldGhvZC5jaGFuZ2VTZXROYW1lID8/IERFRkFVTFRfREVQTE9ZX0NIQU5HRV9TRVRfTkFNRTtcbiAgICBjb25zdCBleGVjdXRlID0gZGVwbG95bWVudE1ldGhvZC5leGVjdXRlID8/IHRydWU7XG4gICAgY29uc3QgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMgPSBkZXBsb3ltZW50TWV0aG9kLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzID8/IGZhbHNlO1xuICAgIGNvbnN0IHJldmVydERyaWZ0ID0gZGVwbG95bWVudE1ldGhvZC5yZXZlcnREcmlmdCA/PyBmYWxzZTtcbiAgICBjb25zdCBjaGFuZ2VTZXREZXNjcmlwdGlvbiA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhbmdlU2V0KGNoYW5nZVNldE5hbWUsIGV4ZWN1dGUsIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLCByZXZlcnREcmlmdCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oKTtcblxuICAgIGlmIChjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoY2hhbmdlU2V0RGVzY3JpcHRpb24pKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnTm8gY2hhbmdlcyBhcmUgdG8gYmUgcGVyZm9ybWVkIG9uICVzLicsIHRoaXMuc3RhY2tOYW1lKSk7XG4gICAgICBpZiAoZXhlY3V0ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnRGVsZXRpbmcgZW1wdHkgY2hhbmdlIHNldCAlcycsIGNoYW5nZVNldERlc2NyaXB0aW9uLkNoYW5nZVNldElkKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2ZuLmRlbGV0ZUNoYW5nZVNldCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZURlcGxveW1lbnQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICdZb3UgdXNlZCB0aGUgLS1mb3JjZSBmbGFnLCBidXQgQ2xvdWRGb3JtYXRpb24gcmVwb3J0ZWQgdGhhdCB0aGUgZGVwbG95bWVudCB3b3VsZCBub3QgbWFrZSBhbnkgY2hhbmdlcy4nLFxuICAgICAgICAgICAgJ0FjY29yZGluZyB0byBDbG91ZEZvcm1hdGlvbiwgYWxsIHJlc291cmNlcyBhcmUgYWxyZWFkeSB1cC10by1kYXRlIHdpdGggdGhlIHN0YXRlIGluIHlvdXIgQ0RLIGFwcC4nLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAnWW91IGNhbm5vdCB1c2UgdGhlIC0tZm9yY2UgZmxhZyB0byBnZXQgcmlkIG9mIGNoYW5nZXMgeW91IG1hZGUgaW4gdGhlIGNvbnNvbGUuIFRyeSB1c2luZycsXG4gICAgICAgICAgICAnQ2xvdWRGb3JtYXRpb24gZHJpZnQgZGV0ZWN0aW9uIGluc3RlYWQ6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi1zdGFjay1kcmlmdC5odG1sJyxcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IHRydWUsXG4gICAgICAgIG91dHB1dHM6IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLFxuICAgICAgICBzdGFja0FybjogY2hhbmdlU2V0RGVzY3JpcHRpb24uU3RhY2tJZCEsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghZXhlY3V0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGZvcm1hdChcbiAgICAgICAgJ0NoYW5nZXNldCAlcyBjcmVhdGVkIGFuZCB3YWl0aW5nIGluIHJldmlldyBmb3IgbWFudWFsIGV4ZWN1dGlvbiAoLS1uby1leGVjdXRlKScsXG4gICAgICAgIGNoYW5nZVNldERlc2NyaXB0aW9uLkNoYW5nZVNldElkLFxuICAgICAgKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICBvdXRwdXRzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgICAgc3RhY2tBcm46IGNoYW5nZVNldERlc2NyaXB0aW9uLlN0YWNrSWQhLFxuICAgICAgICBjaGFuZ2VTZXQ6IGNoYW5nZVNldERlc2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgcmVwbGFjZW1lbnRzIGluIHRoZSBjaGFuZ2VzZXQsIGNoZWNrIHRoZSByb2xsYmFjayBmbGFnIGFuZCBzdGFjayBzdGF0dXNcbiAgICByZXR1cm4gdGhpcy5jaGVja0FuZEV4ZWN1dGVDaGFuZ2VTZXQoY2hhbmdlU2V0RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlRXhpc3RpbmdDaGFuZ2VTZXQoZGVwbG95bWVudE1ldGhvZDogRXhlY3V0ZUNoYW5nZVNldERlcGxveW1lbnQpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oKTtcblxuICAgIC8vIFRoZSBjaGFuZ2Ugc2V0IHdhcyBhbHJlYWR5IGNyZWF0ZWQgYW5kIHZhbGlkYXRlZCBkdXJpbmcgdGhlIHByZXBhcmUgcGhhc2UsXG4gICAgLy8ganVzdCBkZXNjcmliZSBpdCB0byBnZXQgdGhlIGluZm8gbmVlZGVkIGZvciBleGVjdXRpb24uXG4gICAgY29uc3QgY2hhbmdlU2V0RGVzY3JpcHRpb24gPSBhd2FpdCB0aGlzLmNmbi5kZXNjcmliZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgQ2hhbmdlU2V0TmFtZTogZGVwbG95bWVudE1ldGhvZC5jaGFuZ2VTZXROYW1lLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tBbmRFeGVjdXRlQ2hhbmdlU2V0KGNoYW5nZVNldERlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayByb2xsYmFjay9yZXBsYWNlbWVudCBjb25zdHJhaW50cyBhbmQgZXhlY3V0ZSB0aGUgY2hhbmdlIHNldCBpZiBhbGwgY2hlY2tzIHBhc3MuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNoZWNrQW5kRXhlY3V0ZUNoYW5nZVNldChjaGFuZ2VTZXREZXNjcmlwdGlvbjogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0KTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGlmIChjaGFuZ2VTZXREZXNjcmlwdGlvbi5TdGF0dXMgIT09ICdDUkVBVEVfQ09NUExFVEUnKSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBjaGFuZ2VTZXREZXNjcmlwdGlvbi5TdGF0dXMgPz8gJ1VOS05PV04nO1xuICAgICAgY29uc3QgcmVhc29uID0gY2hhbmdlU2V0RGVzY3JpcHRpb24uU3RhdHVzUmVhc29uID8gYDogJHtjaGFuZ2VTZXREZXNjcmlwdGlvbi5TdGF0dXNSZWFzb259YCA6ICcnO1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgJ0NoYW5nZVNldE5vdFJlYWR5JyxcbiAgICAgICAgYENoYW5nZSBzZXQgJyR7Y2hhbmdlU2V0RGVzY3JpcHRpb24uQ2hhbmdlU2V0TmFtZX0nIG9uIHN0YWNrICcke3RoaXMuc3RhY2tOYW1lfScgaXMgbm90IHJlYWR5IGZvciBleGVjdXRpb24gKHN0YXR1czogJHtzdGF0dXN9JHtyZWFzb259KWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gaGFzUmVwbGFjZW1lbnQoY2hhbmdlU2V0RGVzY3JpcHRpb24pO1xuICAgIGNvbnN0IGlzUGF1c2VkRmFpbFN0YXRlID0gdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLmlzUm9sbGJhY2thYmxlO1xuICAgIGNvbnN0IHJvbGxiYWNrID0gdGhpcy5vcHRpb25zLnJvbGxiYWNrID8/IHRydWU7XG4gICAgaWYgKGlzUGF1c2VkRmFpbFN0YXRlICYmIHJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnZmFpbHBhdXNlZC1uZWVkLXJvbGxiYWNrLWZpcnN0JywgcmVhc29uOiAncmVwbGFjZW1lbnQnLCBzdGF0dXM6IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5uYW1lIH07XG4gICAgfVxuICAgIGlmIChpc1BhdXNlZEZhaWxTdGF0ZSAmJiByb2xsYmFjaykge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcsIHJlYXNvbjogJ25vdC1ub3JvbGxiYWNrJywgc3RhdHVzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMubmFtZSB9O1xuICAgIH1cbiAgICBpZiAoIXJvbGxiYWNrICYmIHJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAncmVwbGFjZW1lbnQtcmVxdWlyZXMtcm9sbGJhY2snIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUNoYW5nZVNldChjaGFuZ2VTZXREZXNjcmlwdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUNoYW5nZVNldChjaGFuZ2VTZXROYW1lOiBzdHJpbmcsIHdpbGxFeGVjdXRlOiBib29sZWFuLCBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYm9vbGVhbiwgcmV2ZXJ0RHJpZnQ6IGJvb2xlYW4pIHtcbiAgICBhd2FpdCB0aGlzLmNsZWFudXBPbGRDaGFuZ2VzZXQoY2hhbmdlU2V0TmFtZSk7XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBDaGFuZ2VTZXQgd2l0aCBuYW1lICR7Y2hhbmdlU2V0TmFtZX0gdG8gJHt0aGlzLnZlcmJ9IHN0YWNrICR7dGhpcy5zdGFja05hbWV9YCk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGZvcm1hdCgnJXM6IGNyZWF0aW5nIENsb3VkRm9ybWF0aW9uIGNoYW5nZXNldC4uLicsIGNoYWxrLmJvbGQodGhpcy5zdGFja05hbWUpKSk7XG4gICAgY29uc3QgY2hhbmdlU2V0ID0gYXdhaXQgdGhpcy5jZm4uY3JlYXRlQ2hhbmdlU2V0KHtcbiAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgQ2hhbmdlU2V0VHlwZTogdGhpcy5vcHRpb25zLnJlc291cmNlc1RvSW1wb3J0ID8gJ0lNUE9SVCcgOiB0aGlzLnVwZGF0ZSA/ICdVUERBVEUnIDogJ0NSRUFURScsXG4gICAgICBSZXNvdXJjZXNUb0ltcG9ydDogdGhpcy5vcHRpb25zLnJlc291cmNlc1RvSW1wb3J0LFxuICAgICAgRGVzY3JpcHRpb246IGBDREsgQ2hhbmdlc2V0IGZvciBleGVjdXRpb24gJHt0aGlzLnV1aWR9YCxcbiAgICAgIENsaWVudFRva2VuOiBgY3JlYXRlJHt0aGlzLnV1aWR9YCxcbiAgICAgIEltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBpbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICAgIERlcGxveW1lbnRNb2RlOiByZXZlcnREcmlmdCA/ICdSRVZFUlRfRFJJRlQnIDogdW5kZWZpbmVkLFxuICAgICAgLi4udGhpcy5jb21tb25QcmVwYXJlT3B0aW9ucygpLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ0luaXRpYXRlZCBjcmVhdGlvbiBvZiBjaGFuZ2VzZXQ6ICVzOyB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2ggY3JlYXRpbmcuLi4nLCBjaGFuZ2VTZXQuSWQpKTtcbiAgICAvLyBGZXRjaGluZyBhbGwgcGFnZXMgaWYgd2UnbGwgZXhlY3V0ZSwgc28gd2UgY2FuIGhhdmUgdGhlIGNvcnJlY3QgY2hhbmdlIGNvdW50IHdoZW4gbW9uaXRvcmluZy5cbiAgICBjb25zdCBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5ID0gbmV3IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkoKTtcbiAgICBjb25zdCBlbnZSZXNvdXJjZXMgPSBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5LmZvcih0aGlzLm9wdGlvbnMucmVzb2x2ZWRFbnZpcm9ubWVudCwgdGhpcy5vcHRpb25zLnNkaywgdGhpcy5pb0hlbHBlcik7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlcG9ydGVyID0gbmV3IEVhcmx5VmFsaWRhdGlvblJlcG9ydGVyKHRoaXMub3B0aW9ucy5zZGssIGVudlJlc291cmNlcywgdGhpcy5pb0hlbHBlcik7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9yQ2hhbmdlU2V0KHRoaXMuY2ZuLCB0aGlzLmlvSGVscGVyLCB0aGlzLnN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSwge1xuICAgICAgICBmZXRjaEFsbDogd2lsbEV4ZWN1dGUsXG4gICAgICAgIHZhbGlkYXRpb25SZXBvcnRlcixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzICYmIFRvb2xraXRFcnJvci5pc0RlcGxveW1lbnRFcnJvcihlKSAmJiBlLmRlcGxveW1lbnRFcnJvckNvZGUgPT09ICdDaGFuZ2VTZXRDcmVhdGlvbkZhaWxlZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRFcnJvcih0aGlzLmVuaGFuY2VJbXBvcnRFcnJvck1lc3NhZ2UoZS5tZXNzYWdlKSwgJ0NoYW5nZVNldENyZWF0aW9uRmFpbGVkJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmhhbmNlIGFuIGltcG9ydC1yZWxhdGVkIGNoYW5nZXNldCBlcnJvciBtZXNzYWdlIGJ5IG1hcHBpbmcgQ0ZOIGxvZ2ljYWwgSURzIHRvIENESyBjb25zdHJ1Y3QgcGF0aHMuXG4gICAqL1xuICBwcml2YXRlIGVuaGFuY2VJbXBvcnRFcnJvck1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBPbmx5IGVuaGFuY2UgdGhlIHNwZWNpZmljIENGTiBlcnJvciBhYm91dCBpbXBvcnRpbmcgZXhpc3RpbmcgcmVzb3VyY2VzXG4gICAgaWYgKCFtZXNzYWdlLmluY2x1ZGVzKCdDbG91ZEZvcm1hdGlvbiBpcyBhdHRlbXB0aW5nIHRvIGltcG9ydCBzb21lIHJlc291cmNlcyBiZWNhdXNlIHRoZXkgYWxyZWFkeSBleGlzdCBpbiB5b3VyIGFjY291bnQnKSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgY29uc3QgbWFya2VyID0gJ1RoZSBhZmZlY3RlZCByZXNvdXJjZXMgYXJlICc7XG4gICAgY29uc3QgbWFya2VySW5kZXggPSBtZXNzYWdlLmluZGV4T2YobWFya2VyKTtcbiAgICBpZiAobWFya2VySW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGV4dHJhY3QgbG9naWNhbCBJRHMgZnJvbSB0aGUgXCJUaGUgYWZmZWN0ZWQgcmVzb3VyY2VzIGFyZSAuLi5cIiBzdWZmaXhcbiAgICBjb25zdCByZXNvdXJjZUxpc3QgPSBtZXNzYWdlLnN1YnN0cmluZyhtYXJrZXJJbmRleCArIG1hcmtlci5sZW5ndGgpO1xuICAgIGNvbnN0IGxvZ2ljYWxJZFBhdHRlcm4gPSAvXFxiKFtBLVphLXpdW0EtWmEtejAtOV0rKVxccytcXChcXHsvZztcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnN0YWNrQXJ0aWZhY3QudGVtcGxhdGU/LlJlc291cmNlcyA/PyB7fTtcblxuICAgIGNvbnN0IGFmZmVjdGVkOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzb3VyY2VMaXN0Lm1hdGNoQWxsKGxvZ2ljYWxJZFBhdHRlcm4pKSB7XG4gICAgICBjb25zdCBsb2dpY2FsSWQgPSBtYXRjaFsxXTtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvdXJjZXNbbG9naWNhbElkXT8uTWV0YWRhdGE/LlsnYXdzOmNkazpwYXRoJ107XG4gICAgICBhZmZlY3RlZC5wdXNoKHBhdGggPyBgICAtICR7cGF0aH0gKCR7bG9naWNhbElkfSlgIDogYCAgLSAke2xvZ2ljYWxJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgYEltcG9ydCBvZiBleGlzdGluZyByZXNvdXJjZXMgZmFpbGVkIGZvciBzdGFjayAnJHt0aGlzLnN0YWNrTmFtZX0nIGJlY2F1c2UgdGhlIGZvbGxvd2luZyByZXNvdXJjZXMgbmVlZCBhIERlbGV0aW9uUG9saWN5IG9mICdSZXRhaW4nIG9yICdSZXRhaW5FeGNlcHRPbkNyZWF0ZSc6YCxcbiAgICAgIC4uLmFmZmVjdGVkLFxuICAgICAgJycsXG4gICAgICBcIlNldCB0aGUgcmVtb3ZhbCBwb2xpY3kgdG8gJ1JlbW92YWxQb2xpY3kuUkVUQUlOJyBvciAnUmVtb3ZhbFBvbGljeS5SRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURScgb24gdGhlc2UgcmVzb3VyY2VzLlwiLFxuICAgICAgJ1NlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL3YyL2d1aWRlL3Jlc291cmNlcy5odG1sI3Jlc291cmNlcy1yZW1vdmFsJyxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ2hhbmdlU2V0KGNoYW5nZVNldDogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0KTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnSW5pdGlhdGluZyBleGVjdXRpb24gb2YgY2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzJywgY2hhbmdlU2V0LkNoYW5nZVNldElkLCB0aGlzLnN0YWNrTmFtZSkpO1xuXG4gICAgYXdhaXQgdGhpcy5jZm4uZXhlY3V0ZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0LkNoYW5nZVNldE5hbWUhLFxuICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiBgZXhlYyR7dGhpcy51dWlkfWAsXG4gICAgICAuLi50aGlzLmNvbW1vbkV4ZWN1dGVPcHRpb25zKCksXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFxuICAgICAgZm9ybWF0KFxuICAgICAgICAnRXhlY3V0aW9uIG9mIGNoYW5nZXNldCAlcyBvbiBzdGFjayAlcyBoYXMgc3RhcnRlZDsgd2FpdGluZyBmb3IgdGhlIHVwZGF0ZSB0byBjb21wbGV0ZS4uLicsXG4gICAgICAgIGNoYW5nZVNldC5DaGFuZ2VTZXRJZCxcbiAgICAgICAgdGhpcy5zdGFja05hbWUsXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyArMSBmb3IgdGhlIGV4dHJhIGV2ZW50IGVtaXR0ZWQgZnJvbSB1cGRhdGVzLlxuICAgIGNvbnN0IGNoYW5nZVNldExlbmd0aDogbnVtYmVyID0gKGNoYW5nZVNldC5DaGFuZ2VzID8/IFtdKS5sZW5ndGggKyAodGhpcy51cGRhdGUgPyAxIDogMCk7XG4gICAgcmV0dXJuIHRoaXMubW9uaXRvckRlcGxveW1lbnQoY2hhbmdlU2V0LkNyZWF0aW9uVGltZSEsIGNoYW5nZVNldExlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsZWFudXBPbGRDaGFuZ2VzZXQoY2hhbmdlU2V0TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMpIHtcbiAgICAgIC8vIERlbGV0ZSBhbnkgZXhpc3RpbmcgY2hhbmdlIHNldHMgZ2VuZXJhdGVkIGJ5IENESyBzaW5jZSBjaGFuZ2Ugc2V0IG5hbWVzIG11c3QgYmUgdW5pcXVlLlxuICAgICAgLy8gVGhlIGRlbGV0ZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwgYXMgbG9uZyBhcyB0aGUgc3RhY2sgZXhpc3RzIChldmVuIGlmIHRoZSBjaGFuZ2Ugc2V0IGRvZXMgbm90IGV4aXN0KS5cbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYFJlbW92aW5nIGV4aXN0aW5nIGNoYW5nZSBzZXQgd2l0aCBuYW1lICR7Y2hhbmdlU2V0TmFtZX0gaWYgaXQgZXhpc3RzYCk7XG4gICAgICBhd2FpdCB0aGlzLmNmbi5kZWxldGVDaGFuZ2VTZXQoe1xuICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIERlbGV0aW5nIG1heSB0YWtlIGEgYml0LCBlc3BlY2lhbGx5IGlmIGl0IGludm9sdmVzIG5lc3RlZCBzdGFjayBjaGFuZ2Ugc2V0cy4gV2FpdCB1bnRpbCBpdCBpcyBnb25lLlxuICAgICAgYXdhaXQgd2FpdEZvckNoYW5nZVNldEdvbmUodGhpcy5jZm4sIHRoaXMuaW9IZWxwZXIsIHRoaXMuc3RhY2tOYW1lLCBjaGFuZ2VTZXROYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbigpIHtcbiAgICAvLyBVcGRhdGUgdGVybWluYXRpb24gcHJvdGVjdGlvbiBvbmx5IGlmIGl0IGhhcyBjaGFuZ2VkLlxuICAgIGNvbnN0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbiA9IHRoaXMuc3RhY2tBcnRpZmFjdC50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2U7XG4gICAgaWYgKCEhdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gdGVybWluYXRpb25Qcm90ZWN0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFxuICAgICAgICBmb3JtYXQgKFxuICAgICAgICAgICdVcGRhdGluZyB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGZyb20gJXMgdG8gJXMgZm9yIHN0YWNrICVzJyxcbiAgICAgICAgICB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2sudGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgICB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmNmbi51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oe1xuICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICBFbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb246IHRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ1Rlcm1pbmF0aW9uIHByb3RlY3Rpb24gdXBkYXRlZCB0byAlcyBmb3Igc3RhY2sgJXMnLCB0ZXJtaW5hdGlvblByb3RlY3Rpb24sIHRoaXMuc3RhY2tOYW1lKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkaXJlY3REZXBsb3ltZW50KCk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGZvcm1hdCgnJXM6ICVzIHN0YWNrLi4uJywgY2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSksIHRoaXMudXBkYXRlID8gJ3VwZGF0aW5nJyA6ICdjcmVhdGluZycpKTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5cbiAgICBpZiAodGhpcy51cGRhdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2ZuLnVwZGF0ZVN0YWNrKHtcbiAgICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICAgIENsaWVudFJlcXVlc3RUb2tlbjogYHVwZGF0ZSR7dGhpcy51dWlkfWAsXG4gICAgICAgICAgLi4udGhpcy5jb21tb25QcmVwYXJlT3B0aW9ucygpLFxuICAgICAgICAgIC4uLnRoaXMuY29tbW9uRXhlY3V0ZU9wdGlvbnMoKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdObyB1cGRhdGVzIGFyZSB0byBiZSBwZXJmb3JtZWQuJykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdObyB1cGRhdGVzIGFyZSB0byBiZSBwZXJmb3JtZWQgZm9yIHN0YWNrICVzJywgdGhpcy5zdGFja05hbWUpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICAgICAgbm9PcDogdHJ1ZSxcbiAgICAgICAgICAgIG91dHB1dHM6IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLFxuICAgICAgICAgICAgc3RhY2tBcm46IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5tb25pdG9yRGVwbG95bWVudChzdGFydFRpbWUsIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgd2UgY2FuIHNldCB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGR1cmluZyBjcmVhdGVcbiAgICAgIGNvbnN0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbiA9IHRoaXMuc3RhY2tBcnRpZmFjdC50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2U7XG5cbiAgICAgIGF3YWl0IHRoaXMuY2ZuLmNyZWF0ZVN0YWNrKHtcbiAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiBgY3JlYXRlJHt0aGlzLnV1aWR9YCxcbiAgICAgICAgLi4uKHRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/IHsgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiB0cnVlIH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi50aGlzLmNvbW1vblByZXBhcmVPcHRpb25zKCksXG4gICAgICAgIC4uLnRoaXMuY29tbW9uRXhlY3V0ZU9wdGlvbnMoKSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5tb25pdG9yRGVwbG95bWVudChzdGFydFRpbWUsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtb25pdG9yRGVwbG95bWVudChzdGFydFRpbWU6IERhdGUsIGV4cGVjdGVkQ2hhbmdlczogbnVtYmVyIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBtb25pdG9yID0gbmV3IFN0YWNrQWN0aXZpdHlNb25pdG9yKHtcbiAgICAgIGNmbjogdGhpcy5jZm4sXG4gICAgICBzdGFjazogdGhpcy5zdGFja0FydGlmYWN0LFxuICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIHJlc291cmNlc1RvdGFsOiBleHBlY3RlZENoYW5nZXMsXG4gICAgICBpb0hlbHBlcjogdGhpcy5pb0hlbHBlcixcbiAgICAgIGNoYW5nZVNldENyZWF0aW9uVGltZTogc3RhcnRUaW1lLFxuICAgICAgZW52UmVzb3VyY2VzOiB0aGlzLm9wdGlvbnMuZW52UmVzb3VyY2VzLFxuICAgIH0pO1xuICAgIGF3YWl0IG1vbml0b3Iuc3RhcnQoKTtcblxuICAgIGxldCBmaW5hbFN0YXRlID0gdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdWNjZXNzU3RhY2sgPSBhd2FpdCB3YWl0Rm9yU3RhY2tEZXBsb3kodGhpcy5jZm4sIHRoaXMuaW9IZWxwZXIsIHRoaXMuc3RhY2tOYW1lKTtcblxuICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiwgYnV0IGNhdGNoIGl0IGFueXdheS4gWW91IG5ldmVyIGtub3cuXG4gICAgICBpZiAoIXN1Y2Nlc3NTdGFjaykge1xuICAgICAgICB0aHJvdyBuZXcgRGVwbG95bWVudEVycm9yKCdTdGFjayBkZXBsb3kgZmFpbGVkICh0aGUgc3RhY2sgZGlzYXBwZWFyZWQgd2hpbGUgd2Ugd2VyZSBkZXBsb3lpbmcgaXQpJywgRGVwbG95bWVudEVycm9yQ29kZXMuU1RBQ0tfRElTQVBQRUFSRURfRVJST1JfQ09ERSk7XG4gICAgICB9XG4gICAgICBmaW5hbFN0YXRlID0gc3VjY2Vzc1N0YWNrO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRFcnJvcihzdWZmaXhXaXRoRXJyb3JzKGZvcm1hdEVycm9yTWVzc2FnZShlKSwgbW9uaXRvci5hbGxFcnJvck1lc3NhZ2VzKSwgbW9uaXRvci5yb290Q2F1c2VFcnJvckNvZGUgPz8gJ1N0YWNrRGVwbG95RmFpbGVkJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IG1vbml0b3Iuc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnU3RhY2sgJXMgaGFzIGNvbXBsZXRlZCB1cGRhdGluZycsIHRoaXMuc3RhY2tOYW1lKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgb3V0cHV0czogZmluYWxTdGF0ZS5vdXRwdXRzLFxuICAgICAgc3RhY2tBcm46IGZpbmFsU3RhdGUuc3RhY2tJZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb3B0aW9ucyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBDcmVhdGVTdGFjaywgVXBkYXRlU3RhY2sgYW5kIENyZWF0ZUNoYW5nZVNldFxuICAgKi9cbiAgcHJpdmF0ZSBjb21tb25QcmVwYXJlT3B0aW9ucygpOiBQYXJ0aWFsPFBpY2s8VXBkYXRlU3RhY2tDb21tYW5kSW5wdXQsIENvbW1vblByZXBhcmVPcHRpb25zPj4ge1xuICAgIHJldHVybiB7XG4gICAgICBDYXBhYmlsaXRpZXM6IFsnQ0FQQUJJTElUWV9JQU0nLCAnQ0FQQUJJTElUWV9OQU1FRF9JQU0nLCAnQ0FQQUJJTElUWV9BVVRPX0VYUEFORCddLFxuICAgICAgTm90aWZpY2F0aW9uQVJOczogdGhpcy5vcHRpb25zLm5vdGlmaWNhdGlvbkFybnMsXG4gICAgICBQYXJhbWV0ZXJzOiB0aGlzLnN0YWNrUGFyYW1zLmFwaVBhcmFtZXRlcnMsXG4gICAgICBSb2xlQVJOOiB0aGlzLm9wdGlvbnMucm9sZUFybixcbiAgICAgIFRlbXBsYXRlQm9keTogdGhpcy5ib2R5UGFyYW1ldGVyLlRlbXBsYXRlQm9keSxcbiAgICAgIFRlbXBsYXRlVVJMOiB0aGlzLmJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVVUkwsXG4gICAgICBUYWdzOiB0aGlzLm9wdGlvbnMudGFncyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb3B0aW9ucyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBVcGRhdGVTdGFjayBhbmQgQ3JlYXRlQ2hhbmdlU2V0XG4gICAqXG4gICAqIEJlIGNhcmVmdWwgbm90IHRvIGFkZCBpbiBrZXlzIGZvciBvcHRpb25zIHRoYXQgYXJlbid0IHVzZWQsIGFzIHRoZSBmZWF0dXJlcyBtYXkgbm90IGhhdmUgYmVlblxuICAgKiBkZXBsb3llZCBldmVyeXdoZXJlIHlldC5cbiAgICovXG4gIHByaXZhdGUgY29tbW9uRXhlY3V0ZU9wdGlvbnMoKTogUGFydGlhbDxQaWNrPFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0LCBDb21tb25FeGVjdXRlT3B0aW9ucz4+IHtcbiAgICBjb25zdCBzaG91bGREaXNhYmxlUm9sbGJhY2sgPSB0aGlzLm9wdGlvbnMucm9sbGJhY2sgPT09IGZhbHNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAuLi4oc2hvdWxkRGlzYWJsZVJvbGxiYWNrID8geyBEaXNhYmxlUm9sbGJhY2s6IHRydWUgfSA6IHVuZGVmaW5lZCksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lTdGFja09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIGJlIGRlc3Ryb3llZFxuICAgKi9cbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICBzZGs6IFNESztcbiAgcm9sZUFybj86IHN0cmluZztcbiAgZGVwbG95TmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXN0cm95U3RhY2tSZXN1bHQge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc3RhY2sgdGhhdCB3YXMgZGVzdHJveWVkLCBpZiBhbnkuXG4gICAqXG4gICAqIElmIHRoZSBzdGFjayBkaWRuJ3QgZXhpc3QgdG8gYmVnaW4gd2l0aCwgdGhlIG9wZXJhdGlvbiB3aWxsIHN1Y2NlZWRcbiAgICogYnV0IHRoaXMgdmFsdWUgd2lsbCBiZSB1bmRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSBzdGFja0Fybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3Ryb3lTdGFjayhvcHRpb25zOiBEZXN0cm95U3RhY2tPcHRpb25zLCBpb0hlbHBlcjogSW9IZWxwZXIpOiBQcm9taXNlPERlc3Ryb3lTdGFja1Jlc3VsdD4ge1xuICBjb25zdCBkZXBsb3lOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lIHx8IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lO1xuICBjb25zdCBjZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gIGNvbnN0IGN1cnJlbnRTdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgZGVwbG95TmFtZSk7XG4gIGlmICghY3VycmVudFN0YWNrLmV4aXN0cykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBtb25pdG9yID0gbmV3IFN0YWNrQWN0aXZpdHlNb25pdG9yKHtcbiAgICBjZm4sXG4gICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgc3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgIGlvSGVscGVyOiBpb0hlbHBlcixcbiAgfSk7XG4gIGF3YWl0IG1vbml0b3Iuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNmbi5kZWxldGVTdGFjayh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSwgUm9sZUFSTjogb3B0aW9ucy5yb2xlQXJuIH0pO1xuICAgIGNvbnN0IGRlc3Ryb3llZFN0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVsZXRlKGNmbiwgaW9IZWxwZXIsIGRlcGxveU5hbWUpO1xuICAgIGlmIChkZXN0cm95ZWRTdGFjayAmJiBkZXN0cm95ZWRTdGFjay5zdGFja1N0YXR1cy5uYW1lICE9PSAnREVMRVRFX0NPTVBMRVRFJykge1xuICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRFcnJvcihgRmFpbGVkIHRvIGRlc3Ryb3kgJHtkZXBsb3lOYW1lfTogJHtkZXN0cm95ZWRTdGFjay5zdGFja1N0YXR1c31gLCAnU3RhY2tEZXN0cm95RmFpbGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhY2tBcm46IGN1cnJlbnRTdGFjay5zdGFja0lkIH07XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHRocm93IG5ldyBEZXBsb3ltZW50RXJyb3Ioc3VmZml4V2l0aEVycm9ycyhmb3JtYXRFcnJvck1lc3NhZ2UoZSksIG1vbml0b3IuYWxsRXJyb3JNZXNzYWdlcyksIG1vbml0b3Iucm9vdENhdXNlRXJyb3JDb2RlID8/ICdTdGFja0Rlc3Ryb3lGYWlsZWQnKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAobW9uaXRvcikge1xuICAgICAgYXdhaXQgbW9uaXRvci5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgd2UgY2FuIHNraXAgZGVwbG95bWVudFxuICpcbiAqIFdlIGRvIHRoaXMgaW4gYSBjb21wbGljYXRlZCB3YXkgYnkgcHJlcHJvY2Vzc2luZyAoaW5zdGVhZCBvZiBqdXN0XG4gKiBsb29raW5nIGF0IHRoZSBjaGFuZ2VzZXQpLCBiZWNhdXNlIGlmIHRoZXJlIGFyZSBuZXN0ZWQgc3RhY2tzIGludm9sdmVkXG4gKiB0aGUgY2hhbmdlc2V0IHdpbGwgYWx3YXlzIHNob3cgdGhlIG5lc3RlZCBzdGFja3MgYXMgbmVlZGluZyB0byBiZVxuICogdXBkYXRlZCwgYW5kIHRoZSBkZXBsb3ltZW50IHdpbGwgdGFrZSBhIGxvbmcgdGltZSB0byBpbiBlZmZlY3Qgbm90XG4gKiBkbyBhbnl0aGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FuU2tpcERlcGxveShcbiAgZGVwbG95U3RhY2tPcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsXG4gIGNsb3VkRm9ybWF0aW9uU3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIHBhcmFtZXRlckNoYW5nZXM6IFBhcmFtZXRlckNoYW5nZXMsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBkZXBsb3lOYW1lID0gZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveU5hbWUgfHwgZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnN0YWNrTmFtZTtcbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IGNoZWNraW5nIGlmIHdlIGNhbiBza2lwIGRlcGxveWApO1xuXG4gIC8vIEZvcmNlZCBkZXBsb3lcbiAgaWYgKGRlcGxveVN0YWNrT3B0aW9ucy5mb3JjZURlcGxveW1lbnQpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogZm9yY2VkIGRlcGxveW1lbnRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDcmVhdGluZyBjaGFuZ2VzZXQgb25seSAoZGVmYXVsdCB0cnVlKSwgbmV2ZXIgc2tpcFxuICBpZiAoXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2NoYW5nZS1zZXQnICYmXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2QuZXhlY3V0ZSA9PT0gZmFsc2VcbiAgKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IC0tbm8tZXhlY3V0ZSwgYWx3YXlzIGNyZWF0aW5nIGNoYW5nZSBzZXRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFeGVjdXRpbmcgYW4gZXhpc3RpbmcgY2hhbmdlIHNldCwgbmV2ZXIgc2tpcFxuICBpZiAoZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2V4ZWN1dGUtY2hhbmdlLXNldCcpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogZXhlY3V0aW5nIGV4aXN0aW5nIGNoYW5nZSBzZXQsIG5ldmVyIHNraXBgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEcmlmdC1hd2FyZVxuICBpZiAoXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2NoYW5nZS1zZXQnICYmXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2QucmV2ZXJ0RHJpZnRcbiAgKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IC0tcmV2ZXJ0LWRyaWZ0LCBhbHdheXMgY3JlYXRpbmcgY2hhbmdlIHNldGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE5vIGV4aXN0aW5nIHN0YWNrXG4gIGlmICghY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogbm8gZXhpc3Rpbmcgc3RhY2tgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBoYXMgY2hhbmdlZCAoYXNzZXRzIHRha2VuIGludG8gYWNjb3VudCBoZXJlKVxuICBpZiAoSlNPTi5zdHJpbmdpZnkoZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlbXBsYXRlKSAhPT0gSlNPTi5zdHJpbmdpZnkoYXdhaXQgY2xvdWRGb3JtYXRpb25TdGFjay50ZW1wbGF0ZSgpKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZW1wbGF0ZSBoYXMgY2hhbmdlZGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRhZ3MgaGF2ZSBjaGFuZ2VkXG4gIGlmICghY29tcGFyZVRhZ3MoY2xvdWRGb3JtYXRpb25TdGFjay50YWdzLCBkZXBsb3lTdGFja09wdGlvbnMudGFncyA/PyBbXSkpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogdGFncyBoYXZlIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBOb3RpZmljYXRpb24gYXJucyBoYXZlIGNoYW5nZWRcbiAgaWYgKCFhcnJheUVxdWFscyhjbG91ZEZvcm1hdGlvblN0YWNrLm5vdGlmaWNhdGlvbkFybnMsIGRlcGxveVN0YWNrT3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zID8/IFtdKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBub3RpZmljYXRpb24gYXJucyBoYXZlIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcbiAgaWYgKCEhZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gISFjbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbikge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBQYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZFxuICBpZiAocGFyYW1ldGVyQ2hhbmdlcykge1xuICAgIGlmIChwYXJhbWV0ZXJDaGFuZ2VzID09PSAnc3NtJykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHNvbWUgcGFyYW1ldGVycyBjb21lIGZyb20gU1NNIHNvIHdlIGhhdmUgdG8gYXNzdW1lIHRoZXkgbWF5IGhhdmUgY2hhbmdlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogcGFyYW1ldGVycyBoYXZlIGNoYW5nZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXhpc3Rpbmcgc3RhY2sgaXMgaW4gYSBmYWlsZWQgc3RhdGVcbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMuaXNGYWlsdXJlKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHN0YWNrIGlzIGluIGEgZmFpbHVyZSBzdGF0ZWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFdlIGNhbiBza2lwIGRlcGxveVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gbGlzdCBvZiB0YWdzLCByZXR1cm5zIHRydWUgaWYgaWRlbnRpY2FsLlxuICovXG5mdW5jdGlvbiBjb21wYXJlVGFncyhhOiBUYWdbXSwgYjogVGFnW10pOiBib29sZWFuIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYVRhZyBvZiBhKSB7XG4gICAgY29uc3QgYlRhZyA9IGIuZmluZCgodGFnKSA9PiB0YWcuS2V5ID09PSBhVGFnLktleSk7XG5cbiAgICBpZiAoIWJUYWcgfHwgYlRhZy5WYWx1ZSAhPT0gYVRhZy5WYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzdWZmaXhXaXRoRXJyb3JzKG1zZzogc3RyaW5nLCBlcnJvcnM/OiBzdHJpbmdbXSkge1xuICByZXR1cm4gZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwID8gYCR7bXNnfTogJHtlcnJvcnMuam9pbignLCAnKX1gIDogbXNnO1xufVxuXG5mdW5jdGlvbiBhcnJheUVxdWFscyhhOiBhbnlbXSwgYjogYW55W10pOiBib29sZWFuIHtcbiAgcmV0dXJuIGEuZXZlcnkoKGl0ZW0pID0+IGIuaW5jbHVkZXMoaXRlbSkpICYmIGIuZXZlcnkoKGl0ZW0pID0+IGEuaW5jbHVkZXMoaXRlbSkpO1xufVxuXG5mdW5jdGlvbiBoYXNSZXBsYWNlbWVudChjczogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0KSB7XG4gIHJldHVybiAoY3MuQ2hhbmdlcyA/PyBbXSkuc29tZShjID0+IHtcbiAgICBjb25zdCBhID0gYy5SZXNvdXJjZUNoYW5nZT8uUG9saWN5QWN0aW9uO1xuICAgIHJldHVybiBhID09PSAnUmVwbGFjZUFuZERlbGV0ZScgfHwgYSA9PT0gJ1JlcGxhY2VBbmRSZXRhaW4nIHx8IGEgPT09ICdSZXBsYWNlQW5kU25hcHNob3QnO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ValidationReporter } from './cfn-api';
|
|
2
2
|
import type { SDK } from '../aws-auth/sdk';
|
|
3
3
|
import type { EnvironmentResources } from '../environment';
|
|
4
|
+
import type { IoHelper } from '../io/private';
|
|
4
5
|
/**
|
|
5
6
|
* A ValidationReporter that checks for early validation errors right after
|
|
6
7
|
* creating the change set. If any are found, it throws an error listing all validation failures.
|
|
@@ -10,7 +11,8 @@ import type { EnvironmentResources } from '../environment';
|
|
|
10
11
|
export declare class EarlyValidationReporter implements ValidationReporter {
|
|
11
12
|
private readonly sdk;
|
|
12
13
|
private readonly envResources;
|
|
13
|
-
|
|
14
|
+
private readonly ioHelper;
|
|
15
|
+
constructor(sdk: SDK, envResources: EnvironmentResources, ioHelper: IoHelper);
|
|
14
16
|
fetchDetails(changeSetName: string, stackName: string): Promise<string>;
|
|
15
17
|
private getFailedEvents;
|
|
16
18
|
}
|
|
@@ -10,11 +10,14 @@ exports.EarlyValidationReporter = void 0;
|
|
|
10
10
|
class EarlyValidationReporter {
|
|
11
11
|
sdk;
|
|
12
12
|
envResources;
|
|
13
|
-
|
|
13
|
+
ioHelper;
|
|
14
|
+
constructor(sdk, envResources, ioHelper) {
|
|
14
15
|
this.sdk = sdk;
|
|
15
16
|
this.envResources = envResources;
|
|
17
|
+
this.ioHelper = ioHelper;
|
|
16
18
|
}
|
|
17
19
|
async fetchDetails(changeSetName, stackName) {
|
|
20
|
+
const summary = `Early validation failed for stack '${stackName}' (ChangeSet '${changeSetName}')`;
|
|
18
21
|
let operationEvents = [];
|
|
19
22
|
try {
|
|
20
23
|
operationEvents = await this.getFailedEvents(stackName, changeSetName);
|
|
@@ -26,12 +29,12 @@ class EarlyValidationReporter {
|
|
|
26
29
|
}
|
|
27
30
|
catch (e) {
|
|
28
31
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
await this.ioHelper.defaults.warn(`Could not retrieve additional details about early validation errors (${error}). ` +
|
|
33
|
+
'Make sure you have permissions to call the DescribeEvents API, or re-bootstrap your environment by running \'cdk bootstrap\' to update the Bootstrap CDK Toolkit stack. ' +
|
|
34
|
+
`Bootstrap toolkit stack version 30 or later is needed; current version: ${currentVersion ?? 'unknown'}.`);
|
|
35
|
+
return summary;
|
|
33
36
|
}
|
|
34
|
-
let message =
|
|
37
|
+
let message = summary;
|
|
35
38
|
if (operationEvents.length > 0) {
|
|
36
39
|
const failures = operationEvents
|
|
37
40
|
.map((event) => ` - ${event.ValidationStatusReason} (at ${event.ValidationPath})`)
|
|
@@ -51,4 +54,4 @@ Bootstrap toolkit stack version 30 or later is needed; current version: ${curren
|
|
|
51
54
|
}
|
|
52
55
|
}
|
|
53
56
|
exports.EarlyValidationReporter = EarlyValidationReporter;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFybHktdmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVhcmx5LXZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUE7Ozs7O0dBS0c7QUFDSCxNQUFhLHVCQUF1QjtJQUVmO0lBQ0E7SUFDQTtJQUhuQixZQUNtQixHQUFRLEVBQ1IsWUFBa0MsRUFDbEMsUUFBa0I7UUFGbEIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNSLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBRXJDLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQXFCLEVBQUUsU0FBaUI7UUFDaEUsTUFBTSxPQUFPLEdBQUcsc0NBQXNDLFNBQVMsaUJBQWlCLGFBQWEsSUFBSSxDQUFDO1FBQ2xHLElBQUksZUFBZSxHQUFxQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDO1lBQ0gsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLGNBQWMsR0FBdUIsU0FBUyxDQUFDO1lBQ25ELElBQUksQ0FBQztnQkFDSCxjQUFjLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDckUsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDO1lBRUQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQy9CLHdFQUF3RSxLQUFLLEtBQUs7Z0JBQ2xGLDBLQUEwSztnQkFDMUssMkVBQTJFLGNBQWMsSUFBSSxTQUFTLEdBQUcsQ0FDMUcsQ0FBQztZQUNGLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdEIsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sUUFBUSxHQUFHLGVBQWU7aUJBQzdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsc0JBQXNCLFFBQVEsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDO2lCQUNsRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFZCxPQUFPLElBQUksTUFBTSxRQUFRLElBQUksQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBaUIsRUFBRSxhQUFxQjtRQUNwRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsdUJBQXVCLENBQUM7WUFDdkQsU0FBUyxFQUFFLFNBQVM7WUFDcEIsYUFBYSxFQUFFLGFBQWE7WUFDNUIsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxJQUFJO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaERELDBEQWdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT3BlcmF0aW9uRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBWYWxpZGF0aW9uUmVwb3J0ZXIgfSBmcm9tICcuL2Nmbi1hcGknO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9zZGsnO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudFJlc291cmNlcyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuLyoqXG4gKiBBIFZhbGlkYXRpb25SZXBvcnRlciB0aGF0IGNoZWNrcyBmb3IgZWFybHkgdmFsaWRhdGlvbiBlcnJvcnMgcmlnaHQgYWZ0ZXJcbiAqIGNyZWF0aW5nIHRoZSBjaGFuZ2Ugc2V0LiBJZiBhbnkgYXJlIGZvdW5kLCBpdCB0aHJvd3MgYW4gZXJyb3IgbGlzdGluZyBhbGwgdmFsaWRhdGlvbiBmYWlsdXJlcy5cbiAqIElmIHRoZSBEZXNjcmliZUV2ZW50cyBBUEkgY2FsbCBmYWlscyAoZm9yIGV4YW1wbGUsIGR1ZSB0byBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMpLFxuICogaXQgbG9ncyBhIHdhcm5pbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVhcmx5VmFsaWRhdGlvblJlcG9ydGVyIGltcGxlbWVudHMgVmFsaWRhdGlvblJlcG9ydGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZGs6IFNESyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVudlJlc291cmNlczogRW52aXJvbm1lbnRSZXNvdXJjZXMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICkge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoRGV0YWlscyhjaGFuZ2VTZXROYW1lOiBzdHJpbmcsIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYEVhcmx5IHZhbGlkYXRpb24gZmFpbGVkIGZvciBzdGFjayAnJHtzdGFja05hbWV9JyAoQ2hhbmdlU2V0ICcke2NoYW5nZVNldE5hbWV9JylgO1xuICAgIGxldCBvcGVyYXRpb25FdmVudHM6IE9wZXJhdGlvbkV2ZW50W10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgb3BlcmF0aW9uRXZlbnRzID0gYXdhaXQgdGhpcy5nZXRGYWlsZWRFdmVudHMoc3RhY2tOYW1lLCBjaGFuZ2VTZXROYW1lKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbGV0IGN1cnJlbnRWZXJzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50VmVyc2lvbiA9IChhd2FpdCB0aGlzLmVudlJlc291cmNlcy5sb29rdXBUb29sa2l0KCkpLnZlcnNpb247XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgYENvdWxkIG5vdCByZXRyaWV2ZSBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgZWFybHkgdmFsaWRhdGlvbiBlcnJvcnMgKCR7ZXJyb3J9KS4gYCArXG4gICAgICAgICdNYWtlIHN1cmUgeW91IGhhdmUgcGVybWlzc2lvbnMgdG8gY2FsbCB0aGUgRGVzY3JpYmVFdmVudHMgQVBJLCBvciByZS1ib290c3RyYXAgeW91ciBlbnZpcm9ubWVudCBieSBydW5uaW5nIFxcJ2NkayBib290c3RyYXBcXCcgdG8gdXBkYXRlIHRoZSBCb290c3RyYXAgQ0RLIFRvb2xraXQgc3RhY2suICcgK1xuICAgICAgICBgQm9vdHN0cmFwIHRvb2xraXQgc3RhY2sgdmVyc2lvbiAzMCBvciBsYXRlciBpcyBuZWVkZWQ7IGN1cnJlbnQgdmVyc2lvbjogJHtjdXJyZW50VmVyc2lvbiA/PyAndW5rbm93bid9LmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN1bW1hcnk7XG4gICAgfVxuXG4gICAgbGV0IG1lc3NhZ2UgPSBzdW1tYXJ5O1xuICAgIGlmIChvcGVyYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmFpbHVyZXMgPSBvcGVyYXRpb25FdmVudHNcbiAgICAgICAgLm1hcCgoZXZlbnQpID0+IGAgIC0gJHtldmVudC5WYWxpZGF0aW9uU3RhdHVzUmVhc29ufSAoYXQgJHtldmVudC5WYWxpZGF0aW9uUGF0aH0pYClcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgICBtZXNzYWdlICs9IGA6XFxuJHtmYWlsdXJlc31cXG5gO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmFpbGVkRXZlbnRzKHN0YWNrTmFtZTogc3RyaW5nLCBjaGFuZ2VTZXROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zZGsuY2xvdWRGb3JtYXRpb24oKS5wYWdpbmF0ZWREZXNjcmliZUV2ZW50cyh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gICAgICBGaWx0ZXJzOiB7XG4gICAgICAgIEZhaWxlZEV2ZW50czogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -102,6 +102,7 @@ class BackgroundStackRefresh {
|
|
|
102
102
|
timeout;
|
|
103
103
|
lastRefreshTime;
|
|
104
104
|
queuedPromises = [];
|
|
105
|
+
stopped = false;
|
|
105
106
|
constructor(props) {
|
|
106
107
|
this.props = props;
|
|
107
108
|
this.lastRefreshTime = Date.now();
|
|
@@ -120,6 +121,12 @@ class BackgroundStackRefresh {
|
|
|
120
121
|
qualifier: this.props.qualifier,
|
|
121
122
|
});
|
|
122
123
|
this.justRefreshedStacks();
|
|
124
|
+
// If stop() was called while the awaited refreshStacks() above was in flight, do not
|
|
125
|
+
// reinstall a timer — clearTimeout() in stop() could not cancel the already-executing
|
|
126
|
+
// refresh() call, and scheduling a new one here would pin the event loop forever.
|
|
127
|
+
if (this.stopped) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
123
130
|
// If the last invocation of refreshStacks takes <5 minutes, the next invocation starts 5 minutes after the last one started.
|
|
124
131
|
// If the last invocation of refreshStacks takes >5 minutes, the next invocation starts immediately.
|
|
125
132
|
this.timeout = setTimeout(() => this.refresh(), Math.max(startTime + 300_000 - Date.now(), 0));
|
|
@@ -149,8 +156,9 @@ class BackgroundStackRefresh {
|
|
|
149
156
|
]);
|
|
150
157
|
}
|
|
151
158
|
stop() {
|
|
159
|
+
this.stopped = true;
|
|
152
160
|
clearTimeout(this.timeout);
|
|
153
161
|
}
|
|
154
162
|
}
|
|
155
163
|
exports.BackgroundStackRefresh = BackgroundStackRefresh;
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stcmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLXJlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEdBLHNDQVNDO0FBbEhELCtEQUEyRDtBQUkzRCxNQUFhLGdCQUFnQjtJQUNWLE1BQU0sR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUxQyxhQUFhLENBQUMsYUFBcUI7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFmRCw0Q0FlQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsRUFBdUQ7SUFDcEYsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLElBQUksU0FBNkIsQ0FBQztJQUNsQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxHQUEwQixFQUFFLFFBQWtCLEVBQUUsU0FBa0I7SUFDdEcsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtRQUN4QyxNQUFNLE1BQU0s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SUFDakcsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLEVBQVU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUVoQyxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsNkVBQTZFO1FBQzdFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDRCQUFZLENBQUMscUJBQXFCLEVBQUUsMEVBQTBFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlLLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUE5REQsd0RBOERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJEZWNsYXJhdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuZXhwb3J0IGNsYXNzIEFjdGl2ZUFzc2V0Q2FjaGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIHJlbWVtYmVyU3RhY2soc3RhY2tUZW1wbGF0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdGFja3MuYWRkKHN0YWNrVGVtcGxhdGUpO1xuICB9XG5cbiAgcHVibGljIGNvbnRhaW5zKGFzc2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHRoaXMuc3RhY2tzKSB7XG4gICAgICBpZiAoc3RhY2suaW5jbHVkZXMoYXNzZXQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVTZGtDYWxsKGNiOiAobmV4dFRva2VuPzogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4pIHtcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgd2hpbGUgKCFmaW5pc2hlZCkge1xuICAgIG5leHRUb2tlbiA9IGF3YWl0IGNiKG5leHRUb2tlbik7XG4gICAgaWYgKG5leHRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhbGwgcmVsZXZhbnQgc3RhY2sgdGVtcGxhdGVzIGZyb20gQ2xvdWRGb3JtYXRpb24uIEl0IGlnbm9yZXMgdGhlIGZvbGxvd2luZyBzdGFja3M6XG4gKiAtIHN0YWNrcyBpbiBERUxFVEVfQ09NUExFVEUgb3IgREVMRVRFX0lOX1BST0dSRVNTIHN0YWdlXG4gKiAtIHN0YWNrcyB0aGF0IGFyZSB1c2luZyBhIGRpZmZlcmVudCBib290c3RyYXAgcXVhbGlmaWVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWxsU3RhY2tUZW1wbGF0ZXMoY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIGlvSGVscGVyOiBJb0hlbHBlciwgcXVhbGlmaWVyPzogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YWNrTmFtZXM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlU2RrQ2FsbChhc3luYyAobmV4dFRva2VuKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgY2ZuLmxpc3RTdGFja3MoeyBOZXh0VG9rZW46IG5leHRUb2tlbiB9KTtcblxuICAgIC8vIFdlIGlnbm9yZSBzdGFja3Mgd2l0aCB0aGVzZSBzdGF0dXNlcyBiZWNhdXNlIHRoZWlyIGFzc2V0cyBhcmUgbm8gbG9uZ2VyIGxpdmVcbiAgICBjb25zdCBpZ25vcmVkU3RhdHVlcyA9IFsnQ1JFQVRFX0ZBSUxFRCcsICdERUxFVEVfQ09NUExFVEUnLCAnREVMRVRFX0lOX1BST0dSRVNTJywgJ0RFTEVURV9GQUlMRUQnLCAnUkVWSUVXX0lOX1BST0dSRVNTJ107XG4gICAgc3RhY2tOYW1lcy5wdXNoKFxuICAgICAgLi4uKHN0YWNrcy5TdGFja1N1bW1hcmllcyA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigoczogYW55KSA9PiAhaWdub3JlZFN0YXR1ZXMuaW5jbHVkZXMocy5TdGFja1N0YXR1cykpXG4gICAgICAgIC5tYXAoKHM6IGFueSkgPT4gcy5TdGFja0lkID8/IHMuU3RhY2tOYW1lKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHN0YWNrcy5OZXh0VG9rZW47XG4gIH0pO1xuXG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBQYXJzaW5nIHRocm91Z2ggJHtzdGFja05hbWVzLmxlbmd0aH0gc3RhY2tzYCk7XG5cbiAgY29uc3QgdGVtcGxhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrTmFtZXMpIHtcbiAgICBsZXQgc3VtbWFyeTtcbiAgICBzdW1tYXJ5ID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlU3VtbWFyeSh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgIH0pO1xuXG4gICAgaWYgKGJvb3RzdHJhcEZpbHRlcihzdW1tYXJ5LlBhcmFtZXRlcnMsIHF1YWxpZmllcikpIHtcbiAgICAgIC8vIFRoaXMgc3RhY2sgaXMgZGVmaW5pdGVseSBib290c3RyYXBwZWQgdG8gYSBkaWZmZXJlbnQgcXVhbGlmaWVyIHNvIHdlIGNhbiBzYWZlbHkgaWdub3JlIGl0XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlcy5wdXNoKCh0ZW1wbGF0ZS5UZW1wbGF0ZUJvZHkgPz8gJycpICsgSlNPTi5zdHJpbmdpZnkoc3VtbWFyeT8uUGFyYW1ldGVycykpO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKCdEb25lIHBhcnNpbmcgdGhyb3VnaCBzdGFja3MnKTtcblxuICByZXR1cm4gdGVtcGxhdGVzO1xufVxuXG4vKipcbiAqIEZpbHRlciBvdXQgc3RhY2tzIHRoYXQgd2UgS05PVyBhcmUgdXNpbmcgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIHF1YWxpZmllclxuICogVGhpcyBpcyBtb3N0bHkgbmVjZXNzYXJ5IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdHMgdGhhdCBjYW4gcnVuIHRoZSBzYW1lIGFwcCAod2l0aCB0aGUgc2FtZSBhc3NldHMpXG4gKiB1bmRlciBkaWZmZXJlbnQgcXVhbGlmaWVycy5cbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYSBzdGFjayB1bmRlciBhIGRpZmZlcmVudCBib290c3RyYXAgY291bGQgY29pbmNpZGVudGFsbHkgcmVmZXJlbmNlIHRoZSBzYW1lIGhhc2hcbiAqIGFuZCBjYXVzZSBhIGZhbHNlIG5lZ2F0aXZlIChjYXVzZSBhbiBhc3NldCB0byBiZSBwcmVzZXJ2ZWQgd2hlbiBpdHMgaXNvbGF0ZWQpXG4gKiBUaGlzIGlzIGludGVudGlvbmFsbHkgZG9uZSBpbiBhIHdheSB3aGVyZSB3ZSBPTkxZIGZpbHRlciBvdXQgc3RhY2tzIHRoYXQgYXJlIG1lYW50IGZvciBhIGRpZmZlcmVudCBxdWFsaWZpZXJcbiAqIGJlY2F1c2Ugd2UgYXJlIG9rYXkgd2l0aCBmYWxzZSBwb3NpdGl2ZXMuXG4gKi9cbmZ1bmN0aW9uIGJvb3RzdHJhcEZpbHRlcihwYXJhbWV0ZXJzPzogUGFyYW1ldGVyRGVjbGFyYXRpb25bXSwgcXVhbGlmaWVyPzogc3RyaW5nKSB7XG4gIGNvbnN0IGJvb3RzdHJhcFZlcnNpb24gPSBwYXJhbWV0ZXJzPy5maW5kKChwKSA9PiBwLlBhcmFtZXRlcktleSA9PT0gJ0Jvb3RzdHJhcFZlcnNpb24nKTtcbiAgY29uc3Qgc3BsaXRCb290c3RyYXBWZXJzaW9uID0gYm9vdHN0cmFwVmVyc2lvbj8uRGVmYXVsdFZhbHVlPy5zcGxpdCgnLycpO1xuICAvLyBXZSBmaW5kIHRoZSBxdWFsaWZpZXIgaW4gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBib290c3RyYXAgdmVyc2lvbiBwYXJhbWV0ZXJcbiAgcmV0dXJuIChxdWFsaWZpZXIgJiZcbiAgICAgICAgICBzcGxpdEJvb3RzdHJhcFZlcnNpb24gJiZcbiAgICAgICAgICBzcGxpdEJvb3RzdHJhcFZlcnNpb24ubGVuZ3RoID09IDQgJiZcbiAgICAgICAgICBzcGxpdEJvb3RzdHJhcFZlcnNpb25bMl0gIT0gcXVhbGlmaWVyKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoU3RhY2tzUHJvcHMge1xuICByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICByZWFkb25seSBhY3RpdmVBc3NldHM6IEFjdGl2ZUFzc2V0Q2FjaGU7XG4gIHJlYWRvbmx5IHF1YWxpZmllcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hTdGFja3MocHJvcHM6IFJlZnJlc2hTdGFja3NQcm9wcykge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IGZldGNoQWxsU3RhY2tUZW1wbGF0ZXMocHJvcHMuY2ZuLCBwcm9wcy5pb0hlbHBlciwgcHJvcHMucXVhbGlmaWVyKTtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrcykge1xuICAgICAgcHJvcHMuYWN0aXZlQXNzZXRzLnJlbWVtYmVyU3RhY2soc3RhY2spO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU3RhY2tSZWZyZXNoRmFpbGVkJywgYEVycm9yIHJlZnJlc2hpbmcgc3RhY2tzOiAke2Vycn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEJhY2tncm91bmQgU3RhY2sgUmVmcmVzaCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZFN0YWNrUmVmcmVzaFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBDRk4gU0RLIGhhbmRsZXJcbiAgICovXG4gIHJlYWRvbmx5IGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50O1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHNlbmQgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgLyoqXG4gICAqIEFjdGl2ZSBBc3NldCBzdG9yYWdlXG4gICAqL1xuICByZWFkb25seSBhY3RpdmVBc3NldHM6IEFjdGl2ZUFzc2V0Q2FjaGU7XG5cbiAgLyoqXG4gICAqIFN0YWNrIGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpZmllcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDbGFzcyB0aGF0IGNvbnRyb2xzIHNjaGVkdWxpbmcgb2YgdGhlIGJhY2tncm91bmQgc3RhY2sgcmVmcmVzaFxuICovXG5leHBvcnQgY2xhc3MgQmFja2dyb3VuZFN0YWNrUmVmcmVzaCB7XG4gIHByaXZhdGUgdGltZW91dD86IE5vZGVKUy5UaW1lb3V0O1xuICBwcml2YXRlIGxhc3RSZWZyZXNoVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHF1ZXVlZFByb21pc2VzOiBBcnJheTwodmFsdWU6IHVua25vd24pID0+IHZvaWQ+ID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogQmFja2dyb3VuZFN0YWNrUmVmcmVzaFByb3BzKSB7XG4gICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCkge1xuICAgIC8vIFNpbmNlIHN0YXJ0IGlzIGdvaW5nIHRvIGJlIGNhbGxlZCByaWdodCBhZnRlciB0aGUgZmlyc3QgaW52b2NhdGlvbiBvZiByZWZyZXNoU3RhY2tzLFxuICAgIC8vIGxldHMgd2FpdCBzb21lIHRpbWUgYmVmb3JlIGJlZ2lubmluZyB0aGUgYmFja2dyb3VuZCByZWZyZXNoLlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIDMwMF8wMDApOyAvLyA1IG1pbnV0ZXNcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgYXdhaXQgcmVmcmVzaFN0YWNrcyh7XG4gICAgICBjZm46IHRoaXMucHJvcHMuY2ZuLFxuICAgICAgaW9IZWxwZXI6IHRoaXMucHJvcHMuaW9IZWxwZXIsXG4gICAgICBhY3RpdmVBc3NldHM6IHRoaXMucHJvcHMuYWN0aXZlQXNzZXRzLFxuICAgICAgcXVhbGlmaWVyOiB0aGlzLnByb3BzLnF1YWxpZmllcixcbiAgICB9KTtcbiAgICB0aGlzLmp1c3RSZWZyZXNoZWRTdGFja3MoKTtcblxuICAgIC8vIElmIHRoZSBsYXN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyB0YWtlcyA8NSBtaW51dGVzLCB0aGUgbmV4dCBpbnZvY2F0aW9uIHN0YXJ0cyA1IG1pbnV0ZXMgYWZ0ZXIgdGhlIGxhc3Qgb25lIHN0YXJ0ZWQuXG4gICAgLy8gSWYgdGhlIGxhc3QgaW52b2NhdGlvbiBvZiByZWZyZXNoU3RhY2tzIHRha2VzID41IG1pbnV0ZXMsIHRoZSBuZXh0IGludm9jYXRpb24gc3RhcnRzIGltbWVkaWF0ZWx5LlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIE1hdGgubWF4KHN0YXJ0VGltZSArIDMwMF8wMDAgLSBEYXRlLm5vdygpLCAwKSk7XG4gIH1cblxuICBwcml2YXRlIGp1c3RSZWZyZXNoZWRTdGFja3MoKSB7XG4gICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnF1ZXVlZFByb21pc2VzLnNwbGljZSgwLCB0aGlzLnF1ZXVlZFByb21pc2VzLmxlbmd0aCkpIHtcbiAgICAgIHAodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgYmFja2dyb3VuZCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUuXG4gICAqIElmIHRoZSBsYXN0IHJlZnJlc2ggaXMgb2xkZXIgdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUsIGl0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAgICogd2hlbiB0aGUgbmV4dCBiYWNrZ3JvdW5kIHJlZnJlc2ggY29tcGxldGVzIG9yIHJlamVjdHMgaWYgdGhlIHJlZnJlc2ggdGFrZXMgdG9vIGxvbmcuXG4gICAqL1xuICBwdWJsaWMgbm9PbGRlclRoYW4obXM6IG51bWJlcikge1xuICAgIGNvbnN0IGhvcml6b24gPSBEYXRlLm5vdygpIC0gbXM7XG5cbiAgICAvLyBUaGUgbGFzdCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgdGltZSBmcmFtZVxuICAgIGlmICh0aGlzLmxhc3RSZWZyZXNoVGltZSA+PSBob3Jpem9uKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGxhc3QgcmVmcmVzaCBoYXBwZW5lZCBlYXJsaWVyIHRoYW4gdGhlIHRpbWUgZnJhbWVcbiAgICAvLyBXZSB3aWxsIHdhaXQgZm9yIHRoZSBsYXRlc3QgcmVmcmVzaCB0byBsYW5kIG9yIHJlamVjdCBpZiBpdCB0YWtlcyB0b28gbG9uZ1xuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnF1ZXVlZFByb21pc2VzLnB1c2gocmVzb2x2ZSkpLFxuICAgICAgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IFRvb2xraXRFcnJvcignU3RhY2tSZWZyZXNoVGltZW91dCcsICdyZWZyZXNoU3RhY2tzIHRvb2sgdG9vIGxvbmc7IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBsaWtlbHkgdGhyZXcgYW4gZXJyb3InKSksIG1zKSksXG4gICAgXSk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgfVxufVxuIl19
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stcmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLXJlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEdBLHNDQVNDO0FBbEhELCtEQUEyRDtBQUkzRCxNQUFhLGdCQUFnQjtJQUNWLE1BQU0sR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUxQyxhQUFhLENBQUMsYUFBcUI7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFmRCw0Q0FlQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsRUFBdUQ7SUFDcEYsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLElBQUksU0FBNkIsQ0FBQztJQUNsQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxHQUEwQixFQUFFLFFBQWtCLEVBQUUsU0FBa0I7SUFDdEcsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtRQUN4QyxNQUFNLE1BQU0s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LEdBQUcsSUFBSSxDQUFDO1FBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBdkVELHdEQXVFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyYW1ldGVyRGVjbGFyYXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVBc3NldENhY2hlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja3M6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIHB1YmxpYyByZW1lbWJlclN0YWNrKHN0YWNrVGVtcGxhdGU6IHN0cmluZykge1xuICAgIHRoaXMuc3RhY2tzLmFkZChzdGFja1RlbXBsYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb250YWlucyhhc3NldDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLnN0YWNrcykge1xuICAgICAgaWYgKHN0YWNrLmluY2x1ZGVzKGFzc2V0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlU2RrQ2FsbChjYjogKG5leHRUb2tlbj86IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+KSB7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHdoaWxlICghZmluaXNoZWQpIHtcbiAgICBuZXh0VG9rZW4gPSBhd2FpdCBjYihuZXh0VG9rZW4pO1xuICAgIGlmIChuZXh0VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZldGNoZXMgYWxsIHJlbGV2YW50IHN0YWNrIHRlbXBsYXRlcyBmcm9tIENsb3VkRm9ybWF0aW9uLiBJdCBpZ25vcmVzIHRoZSBmb2xsb3dpbmcgc3RhY2tzOlxuICogLSBzdGFja3MgaW4gREVMRVRFX0NPTVBMRVRFIG9yIERFTEVURV9JTl9QUk9HUkVTUyBzdGFnZVxuICogLSBzdGFja3MgdGhhdCBhcmUgdXNpbmcgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIHF1YWxpZmllclxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFsbFN0YWNrVGVtcGxhdGVzKGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBpb0hlbHBlcjogSW9IZWxwZXIsIHF1YWxpZmllcj86IHN0cmluZykge1xuICBjb25zdCBzdGFja05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVNka0NhbGwoYXN5bmMgKG5leHRUb2tlbikgPT4ge1xuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IGNmbi5saXN0U3RhY2tzKHsgTmV4dFRva2VuOiBuZXh0VG9rZW4gfSk7XG5cbiAgICAvLyBXZSBpZ25vcmUgc3RhY2tzIHdpdGggdGhlc2Ugc3RhdHVzZXMgYmVjYXVzZSB0aGVpciBhc3NldHMgYXJlIG5vIGxvbmdlciBsaXZlXG4gICAgY29uc3QgaWdub3JlZFN0YXR1ZXMgPSBbJ0NSRUFURV9GQUlMRUQnLCAnREVMRVRFX0NPTVBMRVRFJywgJ0RFTEVURV9JTl9QUk9HUkVTUycsICdERUxFVEVfRkFJTEVEJywgJ1JFVklFV19JTl9QUk9HUkVTUyddO1xuICAgIHN0YWNrTmFtZXMucHVzaChcbiAgICAgIC4uLihzdGFja3MuU3RhY2tTdW1tYXJpZXMgPz8gW10pXG4gICAgICAgIC5maWx0ZXIoKHM6IGFueSkgPT4gIWlnbm9yZWRTdGF0dWVzLmluY2x1ZGVzKHMuU3RhY2tTdGF0dXMpKVxuICAgICAgICAubWFwKChzOiBhbnkpID0+IHMuU3RhY2tJZCA/PyBzLlN0YWNrTmFtZSksXG4gICAgKTtcblxuICAgIHJldHVybiBzdGFja3MuTmV4dFRva2VuO1xuICB9KTtcblxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgUGFyc2luZyB0aHJvdWdoICR7c3RhY2tOYW1lcy5sZW5ndGh9IHN0YWNrc2ApO1xuXG4gIGNvbnN0IHRlbXBsYXRlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja05hbWVzKSB7XG4gICAgbGV0IHN1bW1hcnk7XG4gICAgc3VtbWFyeSA9IGF3YWl0IGNmbi5nZXRUZW1wbGF0ZVN1bW1hcnkoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFjayxcbiAgICB9KTtcblxuICAgIGlmIChib290c3RyYXBGaWx0ZXIoc3VtbWFyeS5QYXJhbWV0ZXJzLCBxdWFsaWZpZXIpKSB7XG4gICAgICAvLyBUaGlzIHN0YWNrIGlzIGRlZmluaXRlbHkgYm9vdHN0cmFwcGVkIHRvIGEgZGlmZmVyZW50IHF1YWxpZmllciBzbyB3ZSBjYW4gc2FmZWx5IGlnbm9yZSBpdFxuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFjayxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZXMucHVzaCgodGVtcGxhdGUuVGVtcGxhdGVCb2R5ID8/ICcnKSArIEpTT04uc3RyaW5naWZ5KHN1bW1hcnk/LlBhcmFtZXRlcnMpKTtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZygnRG9uZSBwYXJzaW5nIHRocm91Z2ggc3RhY2tzJyk7XG5cbiAgcmV0dXJuIHRlbXBsYXRlcztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IHdlIEtOT1cgYXJlIHVzaW5nIGEgZGlmZmVyZW50IGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAqIFRoaXMgaXMgbW9zdGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGludGVncmF0aW9uIHRlc3RzIHRoYXQgY2FuIHJ1biB0aGUgc2FtZSBhcHAgKHdpdGggdGhlIHNhbWUgYXNzZXRzKVxuICogdW5kZXIgZGlmZmVyZW50IHF1YWxpZmllcnMuXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGEgc3RhY2sgdW5kZXIgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIGNvdWxkIGNvaW5jaWRlbnRhbGx5IHJlZmVyZW5jZSB0aGUgc2FtZSBoYXNoXG4gKiBhbmQgY2F1c2UgYSBmYWxzZSBuZWdhdGl2ZSAoY2F1c2UgYW4gYXNzZXQgdG8gYmUgcHJlc2VydmVkIHdoZW4gaXRzIGlzb2xhdGVkKVxuICogVGhpcyBpcyBpbnRlbnRpb25hbGx5IGRvbmUgaW4gYSB3YXkgd2hlcmUgd2UgT05MWSBmaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IGFyZSBtZWFudCBmb3IgYSBkaWZmZXJlbnQgcXVhbGlmaWVyXG4gKiBiZWNhdXNlIHdlIGFyZSBva2F5IHdpdGggZmFsc2UgcG9zaXRpdmVzLlxuICovXG5mdW5jdGlvbiBib290c3RyYXBGaWx0ZXIocGFyYW1ldGVycz86IFBhcmFtZXRlckRlY2xhcmF0aW9uW10sIHF1YWxpZmllcj86IHN0cmluZykge1xuICBjb25zdCBib290c3RyYXBWZXJzaW9uID0gcGFyYW1ldGVycz8uZmluZCgocCkgPT4gcC5QYXJhbWV0ZXJLZXkgPT09ICdCb290c3RyYXBWZXJzaW9uJyk7XG4gIGNvbnN0IHNwbGl0Qm9vdHN0cmFwVmVyc2lvbiA9IGJvb3RzdHJhcFZlcnNpb24/LkRlZmF1bHRWYWx1ZT8uc3BsaXQoJy8nKTtcbiAgLy8gV2UgZmluZCB0aGUgcXVhbGlmaWVyIGluIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyXG4gIHJldHVybiAocXVhbGlmaWVyICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uLmxlbmd0aCA9PSA0ICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uWzJdICE9IHF1YWxpZmllcik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFN0YWNrc1Byb3BzIHtcbiAgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG4gIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcbiAgcmVhZG9ubHkgYWN0aXZlQXNzZXRzOiBBY3RpdmVBc3NldENhY2hlO1xuICByZWFkb25seSBxdWFsaWZpZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoU3RhY2tzKHByb3BzOiBSZWZyZXNoU3RhY2tzUHJvcHMpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBmZXRjaEFsbFN0YWNrVGVtcGxhdGVzKHByb3BzLmNmbiwgcHJvcHMuaW9IZWxwZXIsIHByb3BzLnF1YWxpZmllcik7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICAgIHByb3BzLmFjdGl2ZUFzc2V0cy5yZW1lbWJlclN0YWNrKHN0YWNrKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1N0YWNrUmVmcmVzaEZhaWxlZCcsIGBFcnJvciByZWZyZXNoaW5nIHN0YWNrczogJHtlcnJ9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCYWNrZ3JvdW5kIFN0YWNrIFJlZnJlc2ggcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRTdGFja1JlZnJlc2hQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ0ZOIFNESyBoYW5kbGVyXG4gICAqL1xuICByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcblxuICAvKipcbiAgICogVXNlZCB0byBzZW5kIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgQXNzZXQgc3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlQXNzZXRzOiBBY3RpdmVBc3NldENhY2hlO1xuXG4gIC8qKlxuICAgKiBTdGFjayBib290c3RyYXAgcXVhbGlmaWVyXG4gICAqL1xuICByZWFkb25seSBxdWFsaWZpZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgdGhhdCBjb250cm9scyBzY2hlZHVsaW5nIG9mIHRoZSBiYWNrZ3JvdW5kIHN0YWNrIHJlZnJlc2hcbiAqL1xuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRTdGFja1JlZnJlc2gge1xuICBwcml2YXRlIHRpbWVvdXQ/OiBOb2RlSlMuVGltZW91dDtcbiAgcHJpdmF0ZSBsYXN0UmVmcmVzaFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBxdWV1ZWRQcm9taXNlczogQXJyYXk8KHZhbHVlOiB1bmtub3duKSA9PiB2b2lkPiA9IFtdO1xuICBwcml2YXRlIHN0b3BwZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBCYWNrZ3JvdW5kU3RhY2tSZWZyZXNoUHJvcHMpIHtcbiAgICB0aGlzLmxhc3RSZWZyZXNoVGltZSA9IERhdGUubm93KCk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgLy8gU2luY2Ugc3RhcnQgaXMgZ29pbmcgdG8gYmUgY2FsbGVkIHJpZ2h0IGFmdGVyIHRoZSBmaXJzdCBpbnZvY2F0aW9uIG9mIHJlZnJlc2hTdGFja3MsXG4gICAgLy8gbGV0cyB3YWl0IHNvbWUgdGltZSBiZWZvcmUgYmVnaW5uaW5nIHRoZSBiYWNrZ3JvdW5kIHJlZnJlc2guXG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2goKSwgMzAwXzAwMCk7IC8vIDUgbWludXRlc1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoKCkge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBhd2FpdCByZWZyZXNoU3RhY2tzKHtcbiAgICAgIGNmbjogdGhpcy5wcm9wcy5jZm4sXG4gICAgICBpb0hlbHBlcjogdGhpcy5wcm9wcy5pb0hlbHBlcixcbiAgICAgIGFjdGl2ZUFzc2V0czogdGhpcy5wcm9wcy5hY3RpdmVBc3NldHMsXG4gICAgICBxdWFsaWZpZXI6IHRoaXMucHJvcHMucXVhbGlmaWVyLFxuICAgIH0pO1xuICAgIHRoaXMuanVzdFJlZnJlc2hlZFN0YWNrcygpO1xuXG4gICAgLy8gSWYgc3RvcCgpIHdhcyBjYWxsZWQgd2hpbGUgdGhlIGF3YWl0ZWQgcmVmcmVzaFN0YWNrcygpIGFib3ZlIHdhcyBpbiBmbGlnaHQsIGRvIG5vdFxuICAgIC8vIHJlaW5zdGFsbCBhIHRpbWVyIOKAlCBjbGVhclRpbWVvdXQoKSBpbiBzdG9wKCkgY291bGQgbm90IGNhbmNlbCB0aGUgYWxyZWFkeS1leGVjdXRpbmdcbiAgICAvLyByZWZyZXNoKCkgY2FsbCwgYW5kIHNjaGVkdWxpbmcgYSBuZXcgb25lIGhlcmUgd291bGQgcGluIHRoZSBldmVudCBsb29wIGZvcmV2ZXIuXG4gICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBsYXN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyB0YWtlcyA8NSBtaW51dGVzLCB0aGUgbmV4dCBpbnZvY2F0aW9uIHN0YXJ0cyA1IG1pbnV0ZXMgYWZ0ZXIgdGhlIGxhc3Qgb25lIHN0YXJ0ZWQuXG4gICAgLy8gSWYgdGhlIGxhc3QgaW52b2NhdGlvbiBvZiByZWZyZXNoU3RhY2tzIHRha2VzID41IG1pbnV0ZXMsIHRoZSBuZXh0IGludm9jYXRpb24gc3RhcnRzIGltbWVkaWF0ZWx5LlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIE1hdGgubWF4KHN0YXJ0VGltZSArIDMwMF8wMDAgLSBEYXRlLm5vdygpLCAwKSk7XG4gIH1cblxuICBwcml2YXRlIGp1c3RSZWZyZXNoZWRTdGFja3MoKSB7XG4gICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnF1ZXVlZFByb21pc2VzLnNwbGljZSgwLCB0aGlzLnF1ZXVlZFByb21pc2VzLmxlbmd0aCkpIHtcbiAgICAgIHAodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgYmFja2dyb3VuZCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUuXG4gICAqIElmIHRoZSBsYXN0IHJlZnJlc2ggaXMgb2xkZXIgdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUsIGl0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAgICogd2hlbiB0aGUgbmV4dCBiYWNrZ3JvdW5kIHJlZnJlc2ggY29tcGxldGVzIG9yIHJlamVjdHMgaWYgdGhlIHJlZnJlc2ggdGFrZXMgdG9vIGxvbmcuXG4gICAqL1xuICBwdWJsaWMgbm9PbGRlclRoYW4obXM6IG51bWJlcikge1xuICAgIGNvbnN0IGhvcml6b24gPSBEYXRlLm5vdygpIC0gbXM7XG5cbiAgICAvLyBUaGUgbGFzdCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgdGltZSBmcmFtZVxuICAgIGlmICh0aGlzLmxhc3RSZWZyZXNoVGltZSA+PSBob3Jpem9uKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGxhc3QgcmVmcmVzaCBoYXBwZW5lZCBlYXJsaWVyIHRoYW4gdGhlIHRpbWUgZnJhbWVcbiAgICAvLyBXZSB3aWxsIHdhaXQgZm9yIHRoZSBsYXRlc3QgcmVmcmVzaCB0byBsYW5kIG9yIHJlamVjdCBpZiBpdCB0YWtlcyB0b28gbG9uZ1xuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnF1ZXVlZFByb21pc2VzLnB1c2gocmVzb2x2ZSkpLFxuICAgICAgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IFRvb2xraXRFcnJvcignU3RhY2tSZWZyZXNoVGltZW91dCcsICdyZWZyZXNoU3RhY2tzIHRvb2sgdG9vIGxvbmc7IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBsaWtlbHkgdGhyZXcgYW4gZXJyb3InKSksIG1zKSksXG4gICAgXSk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG59XG4iXX0=
|
|
@@ -35,7 +35,7 @@ export declare class NoticesFilter {
|
|
|
35
35
|
* Adds dynamic values from the given ActualComponents
|
|
36
36
|
*
|
|
37
37
|
* If there are multiple components with the same dynamic name, they are joined
|
|
38
|
-
* by
|
|
38
|
+
* by the separator declared in `specs[name].separator`, defaulting to `','`.
|
|
39
39
|
*/
|
|
40
40
|
private addDynamicValues;
|
|
41
41
|
/**
|