Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

@aws-cdk/cloudformation-diff

Package Overview
Dependencies
Maintainers
5
Versions
555
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/cloudformation-diff - npm Package Compare versions

Comparing version 1.25.0 to 1.26.0

9

lib/format.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const cxapi = require("@aws-cdk/cx-api");
const colors = require("colors/safe");

@@ -9,2 +8,4 @@ const util_1 = require("util");

const format_table_1 = require("./format-table");
// from cx-api
const PATH_METADATA_KEY = 'aws:cdk:path';
/* eslint-disable @typescript-eslint/no-require-imports */

@@ -285,7 +286,7 @@ // tslint:disable-next-line:no-var-requires

}
const oldPathMetadata = resourceDiff.oldValue && resourceDiff.oldValue.Metadata && resourceDiff.oldValue.Metadata[cxapi.PATH_METADATA_KEY];
const oldPathMetadata = resourceDiff.oldValue && resourceDiff.oldValue.Metadata && resourceDiff.oldValue.Metadata[PATH_METADATA_KEY];
if (oldPathMetadata && !(logicalId in this.logicalToPathMap)) {
this.logicalToPathMap[logicalId] = oldPathMetadata;
}
const newPathMetadata = resourceDiff.newValue && resourceDiff.newValue.Metadata && resourceDiff.newValue.Metadata[cxapi.PATH_METADATA_KEY];
const newPathMetadata = resourceDiff.newValue && resourceDiff.newValue.Metadata && resourceDiff.newValue.Metadata[PATH_METADATA_KEY];
if (newPathMetadata && !(logicalId in this.logicalToPathMap)) {

@@ -415,2 +416,2 @@ this.logicalToPathMap[logicalId] = newPathMetadata;

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQXlDO0FBQ3pDLHNDQUFzQztBQUN0QywrQkFBOEI7QUFDOUIsbURBQXVHO0FBRXZHLHNDQUF3QztBQUN4QyxpREFBNkM7QUFJN0MsMERBQTBEO0FBQzFELDJDQUEyQztBQUMzQyxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTzVDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBb0IsRUFDcEIsWUFBMEIsRUFDMUIsbUJBQW9ELEVBQUcsRUFDdkQsVUFBa0IsQ0FBQztJQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpGLElBQUksWUFBWSxDQUFDLHdCQUF3QixJQUFJLFlBQVksQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRTtRQUMvRixTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzFILFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkYsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7S0FDaEM7SUFFRCwrQkFBK0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFekQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFF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R0FBRyxDQUFDLENBQUM7YUFDM0U7U0FDRjtLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUM7SUFFZCxTQUFTLFdBQVcsQ0FBQyxLQUFlO1FBQ2xDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRyxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtvQkFDMUIsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQ3pDLE1BQU07aUJBQ1A7YUFDRjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgY29sb3JzIGZyb20gJ2NvbG9ycy9zYWZlJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZSwgaXNQcm9wZXJ0eURpZmZlcmVuY2UsIFJlc291cmNlRGlmZmVyZW5jZSwgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICcuL2RpZmYtdGVtcGxhdGUnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZUNvbGxlY3Rpb24sIFRlbXBsYXRlRGlmZiB9IGZyb20gJy4vZGlmZi90eXBlcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuL2RpZmYvdXRpbCc7XG5pbXBvcnQgeyBmb3JtYXRUYWJsZSB9IGZyb20gJy4vZm9ybWF0LXRhYmxlJztcbmltcG9ydCB7IElhbUNoYW5nZXMgfSBmcm9tICcuL2lhbS9pYW0tY2hhbmdlcyc7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwQ2hhbmdlcyB9IGZyb20gJy4vbmV0d29yay9zZWN1cml0eS1ncm91cC1jaGFuZ2VzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXZhci1yZXF1aXJlc1xuY29uc3QgeyBzdHJ1Y3R1cmVkUGF0Y2ggfSA9IHJlcXVpcmUoJ2RpZmYnKTtcbi8qIGVzbGludC1lbmFibGUgKi9cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRTdHJlYW0gZXh0ZW5kcyBOb2RlSlMuV3JpdGFibGVTdHJlYW0ge1xuICBjb2x1bW5zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGVtcGxhdGUgZGlmZmVyZW5jZXMgdG8gdGhlIHByb2Nlc3MnIGNvbnNvbGUuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAgICAgICAgICAgVGhlIElPIHN0cmVhbSB3aGVyZSB0byBvdXRwdXQgdGhlIHJlbmRlcmVkIGRpZmYuXG4gKiBAcGFyYW0gdGVtcGxhdGVEaWZmICAgICBUZW1wbGF0ZURpZmYgdG8gYmUgcmVuZGVyZWQgdG8gdGhlIGNvbnNvbGUuXG4gKiBAcGFyYW0gbG9naWNhbFRvUGF0aE1hcCBBIG1hcCBmcm9tIGxvZ2ljYWwgSUQgdG8gY29uc3RydWN0IHBhdGguIFVzZWZ1bCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGVyZSBpcyBubyBhd3M6Y2RrOnBhdGggbWV0YWRhdGEgaW4gdGhlIHRlbXBsYXRlLlxuICogQHBhcmFtIGNvbnRleHQgICAgICAgICAgdGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzIHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmIChkZWZhdWx0cyB0byAzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpZmZlcmVuY2VzKHN0cmVhbTogRm9ybWF0U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogbnVtYmVyID0gMykge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHN0cmVhbSwgbG9naWNhbFRvUGF0aE1hcCwgdGVtcGxhdGVEaWZmLCBjb250ZXh0KTtcblxuICBpZiAodGVtcGxhdGVEaWZmLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbiB8fCB0ZW1wbGF0ZURpZmYudHJhbnNmb3JtIHx8IHRlbXBsYXRlRGlmZi5kZXNjcmlwdGlvbikge1xuICAgIGZvcm1hdHRlci5wcmludFNlY3Rpb25IZWFkZXIoJ1RlbXBsYXRlJyk7XG4gICAgZm9ybWF0dGVyLmZvcm1hdERpZmZlcmVuY2UoJ0FXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbicsICdBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24nLCB0ZW1wbGF0ZURpZmYuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uKTtcbiAgICBmb3JtYXR0ZXIuZm9ybWF0RGlmZmVyZW5jZSgnVHJhbnNmb3JtJywgJ1RyYW5zZm9ybScsIHRlbXBsYXRlRGlmZi50cmFuc2Zvcm0pO1xuICAgIGZvcm1hdHRlci5mb3JtYXREaWZmZXJlbmNlKCdEZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicsIHRlbXBsYXRlRGlmZi5kZXNjcmlwdGlvbik7XG4gICAgZm9ybWF0dGVyLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICB9XG5cbiAgZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZik7XG5cbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ1BhcmFtZXRlcnMnLCAnUGFyYW1ldGVyJywgdGVtcGxhdGVEaWZmLnBhcmFtZXRlcnMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignTWV0YWRhdGEnLCAnTWV0YWRhdGEnLCB0ZW1wbGF0ZURpZmYubWV0YWRhdGEpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignTWFwcGluZ3MnLCAnTWFwcGluZycsIHRlbXBsYXRlRGlmZi5tYXBwaW5ncyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdDb25kaXRpb25zJywgJ0NvbmRpdGlvbicsIHRlbXBsYXRlRGlmZi5jb25kaXRpb25zKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ1Jlc291cmNlcycsICdSZXNvdXJjZScsIHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMsIGZvcm1hdHRlci5mb3JtYXRSZXNvdXJjZURpZmZlcmVuY2UuYmluZChmb3JtYXR0ZXIpKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ091dHB1dHMnLCAnT3V0cHV0JywgdGVtcGxhdGVEaWZmLm91dHB1dHMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignT3RoZXIgQ2hhbmdlcycsICdVbmtub3duJywgdGVtcGxhdGVEaWZmLnVua25vd24pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBkaWZmIG9mIHNlY3VyaXR5IGNoYW5nZXMgdG8gdGhlIGdpdmVuIHN0cmVhbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2VjdXJpdHlDaGFuZ2VzKHN0cmVhbTogTm9kZUpTLldyaXRlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFRvUGF0aE1hcDoge1tsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZ30gPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD86IG51bWJlcikge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHN0cmVhbSwgbG9naWNhbFRvUGF0aE1hcCwgdGVtcGxhdGVEaWZmLCBjb250ZXh0KTtcblxuICBmb3JtYXRTZWN1cml0eUNoYW5nZXNXaXRoQmFubmVyKGZvcm1hdHRlciwgdGVtcGxhdGVEaWZmKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXI6IEZvcm1hdHRlciwgdGVtcGxhdGVEaWZmOiBUZW1wbGF0ZURpZmYpIHtcbiAgaWYgKCF0ZW1wbGF0ZURpZmYuaWFtQ2hhbmdlcy5oYXNDaGFuZ2VzICYmICF0ZW1wbGF0ZURpZmYuc2VjdXJpdHlHcm91cENoYW5nZXMuaGFzQ2hhbmdlcykgeyByZXR1cm47IH1cbiAgZm9ybWF0dGVyLmZvcm1hdElhbUNoYW5nZXModGVtcGxhdGVEaWZmLmlhbUNoYW5nZXMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdXJpdHlHcm91cENoYW5nZXModGVtcGxhdGVEaWZmLnNlY3VyaXR5R3JvdXBDaGFuZ2VzKTtcblxuICBmb3JtYXR0ZXIud2FybmluZyhgKE5PVEU6IFRoZXJlIG1heSBiZSBzZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMgbm90IGluIHRoaXMgbGlzdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTI5OSlgKTtcbiAgZm9ybWF0dGVyLnByaW50U2VjdGlvbkZvb3RlcigpO1xufVxuXG5jb25zdCBBRERJVElPTiA9IGNvbG9ycy5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUICA9IGNvbG9ycy5ncmV5KCdbIF0nKTtcbmNvbnN0IFVQREFURSAgID0gY29sb3JzLnllbGxvdygnW35dJyk7XG5jb25zdCBSRU1PVkFMICA9IGNvbG9ycy5yZWQoJ1stXScpO1xuXG5jbGFzcyBGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0cmVhbTogRm9ybWF0U3RyZWFtLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgICAgICAgICAgIGRpZmY/OiBUZW1wbGF0ZURpZmYsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogbnVtYmVyID0gMykge1xuICAgIC8vIFJlYWQgYWRkaXRpb25hbCBjb25zdHJ1Y3QgcGF0aHMgZnJvbSB0aGUgZGlmZiBpZiBpdCBpcyBzdXBwbGllZFxuICAgIGlmIChkaWZmKSB7XG4gICAgICB0aGlzLnJlYWRDb25zdHJ1Y3RQYXRoc0Zyb20oZGlmZik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByaW50KGZtdDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHRoaXMuc3RyZWFtLndyaXRlKGNvbG9ycy53aGl0ZShmb3JtYXQoZm10LCAuLi5hcmdzKSkgKyAnXFxuJyk7XG4gIH1cblxuICBwdWJsaWMgd2FybmluZyhmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICB0aGlzLnN0cmVhbS53cml0ZShjb2xvcnMueWVsbG93KGZvcm1hdChmbXQsIC4uLmFyZ3MpKSArICdcXG4nKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWN0aW9uPFYsIFQgZXh0ZW5kcyBEaWZmZXJlbmNlPFY+PihcbiAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICBlbnRyeVR5cGU6IHN0cmluZyxcbiAgICAgIGNvbGxlY3Rpb246IERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQ+LFxuICAgICAgZm9ybWF0dGVyOiAodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCBkaWZmOiBUKSA9PiB2b2lkID0gdGhpcy5mb3JtYXREaWZmZXJlbmNlLmJpbmQodGhpcykpIHtcblxuICAgIGlmIChjb2xsZWN0aW9uLmRpZmZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlKTtcbiAgICBjb2xsZWN0aW9uLmZvckVhY2hEaWZmZXJlbmNlKChpZCwgZGlmZikgPT4gZm9ybWF0dGVyKGVudHJ5VHlwZSwgaWQsIGRpZmYpKTtcbiAgICB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICB9XG5cbiAgcHVibGljIHByaW50U2VjdGlvbkhlYWRlcih0aXRsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmludChjb2xvcnMudW5kZXJsaW5lKGNvbG9ycy5ib2xkKHRpdGxlKSkpO1xuICB9XG5cbiAgcHVibGljIHByaW50U2VjdGlvbkZvb3RlcigpIHtcbiAgICB0aGlzLnByaW50KCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmludCBhIHNpbXBsZSBkaWZmZXJlbmNlIGZvciBhIGdpdmVuIG5hbWVkIGVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxJZCB0aGUgbmFtZSBvZiB0aGUgZW50aXR5IHRoYXQgaXMgZGlmZmVyZW50LlxuICAgKiBAcGFyYW0gZGlmZiB0aGUgZGlmZmVyZW5jZSB0byBiZSByZW5kZXJlZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXREaWZmZXJlbmNlKHR5cGU6IHN0cmluZywgbG9naWNhbElkOiBzdHJpbmcsIGRpZmY6IERpZmZlcmVuY2U8YW55PiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZGlmZiB8fCAhZGlmZi5pc0RpZmZlcmVudCkgeyByZXR1cm47IH1cblxuICAgIGxldCB2YWx1ZTtcblxuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShkaWZmLm9sZFZhbHVlLCBjb2xvcnMucmVkKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUoZGlmZi5uZXdWYWx1ZSwgY29sb3JzLmdyZWVuKTtcbiAgICBpZiAoZGlmZi5pc0FkZGl0aW9uKSB7XG4gICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pc1VwZGF0ZSkge1xuICAgICAgdmFsdWUgPSBgJHtvbGRWYWx1ZX0gdG8gJHtuZXdWYWx1ZX1gO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pc1JlbW92YWwpIHtcbiAgICAgIHZhbHVlID0gb2xkVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5wcmludChgJHt0aGlzLmZvcm1hdFByZWZpeChkaWZmKX0gJHtjb2xvcnMuY3lhbih0eXBlKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsSWQpfTogJHt2YWx1ZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmludCBhIHJlc291cmNlIGRpZmZlcmVuY2UgZm9yIGEgZ2l2ZW4gbG9naWNhbCBJRC5cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxJZCB0aGUgbG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2UgdGhhdCBjaGFuZ2VkLlxuICAgKiBAcGFyYW0gZGlmZiAgICAgIHRoZSBjaGFuZ2UgdG8gYmUgcmVuZGVyZWQuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0UmVzb3VyY2VEaWZmZXJlbmNlKF90eXBlOiBzdHJpbmcsIGxvZ2ljYWxJZDogc3RyaW5nLCBkaWZmOiBSZXNvdXJjZURpZmZlcmVuY2UpIHtcbiAgICBpZiAoIWRpZmYuaXNEaWZmZXJlbnQpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBkaWZmLmlzUmVtb3ZhbCA/IGRpZmYub2xkUmVzb3VyY2VUeXBlIDogZGlmZi5uZXdSZXNvdXJjZVR5cGU7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgdGhpcy5wcmludChgJHt0aGlzLmZvcm1hdFByZWZpeChkaWZmKX0gJHt0aGlzLmZvcm1hdFZhbHVlKHJlc291cmNlVHlwZSwgY29sb3JzLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxJZCl9ICR7dGhpcy5mb3JtYXRJbXBhY3QoZGlmZi5jaGFuZ2VJbXBhY3QpfWApO1xuXG4gICAgaWYgKGRpZmYuaXNVcGRhdGUpIHtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2VDb3VudCA9IGRpZmYuZGlmZmVyZW5jZUNvdW50O1xuICAgICAgbGV0IHByb2Nlc3NlZENvdW50ID0gMDtcbiAgICAgIGRpZmYuZm9yRWFjaERpZmZlcmVuY2UoKF8sIG5hbWUsIHZhbHVlcykgPT4ge1xuICAgICAgICBwcm9jZXNzZWRDb3VudCArPSAxO1xuICAgICAgICB0aGlzLmZvcm1hdFRyZWVEaWZmKG5hbWUsIHZhbHVlcywgcHJvY2Vzc2VkQ291bnQgPT09IGRpZmZlcmVuY2VDb3VudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0UHJlZml4PFQ+KGRpZmY6IERpZmZlcmVuY2U8VD4pIHtcbiAgICBpZiAoZGlmZi5pc0FkZGl0aW9uKSB7IHJldHVybiBBRERJVElPTjsgfVxuICAgIGlmIChkaWZmLmlzVXBkYXRlKSB7IHJldHVybiBVUERBVEU7IH1cbiAgICBpZiAoZGlmZi5pc1JlbW92YWwpIHsgcmV0dXJuIFJFTU9WQUw7IH1cbiAgICByZXR1cm4gY29sb3JzLndoaXRlKCdbP10nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZC5cbiAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xvciB0byBiZSB1c2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgZm9ybWF0dGVkIHN0cmluZywgd2l0aCBjb2xvciBhcHBsaWVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnksIGNvbG9yOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeyByZXR1cm4gY29sb3IodmFsdWUpOyB9XG4gICAgcmV0dXJuIGNvbG9yKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGltcGFjdCB0aGUgaW1wYWN0IHRvIGJlIGZvcm1hdHRlZFxuICAgKiBAcmV0dXJucyBhIHVzZXItZnJpZW5kbHksIGNvbG9yZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaW1wYWN0LlxuICAgKi9cbiAgcHVibGljIGZvcm1hdEltcGFjdChpbXBhY3Q6IFJlc291cmNlSW1wYWN0KSB7XG4gICAgc3dpdGNoIChpbXBhY3QpIHtcbiAgICBjYXNlIFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFOlxuICAgICAgcmV0dXJuIGNvbG9ycy5pdGFsaWMoY29sb3JzLnllbGxvdygnbWF5IGJlIHJlcGxhY2VkJykpO1xuICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFOlxuICAgICAgcmV0dXJuIGNvbG9ycy5pdGFsaWMoY29sb3JzLmJvbGQoY29sb3JzLnJlZCgncmVwbGFjZScpKSk7XG4gICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1k6XG4gICAgICByZXR1cm4gY29sb3JzLml0YWxpYyhjb2xvcnMuYm9sZChjb2xvcnMucmVkKCdkZXN0cm95JykpKTtcbiAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfT1JQSEFOOlxuICAgICAgcmV0dXJuIGNvbG9ycy5pdGFsaWMoY29sb3JzLnllbGxvdygnb3JwaGFuJykpO1xuICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEU6XG4gICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURTpcbiAgICBjYXNlIFJlc291cmNlSW1wYWN0Lk5PX0NIQU5HRTpcbiAgICAgIHJldHVybiAnJzsgLy8gbm8gZXh0cmEgaW5mbyBpcyBnYWluZWQgaGVyZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgdHJlZSBvZiBkaWZmZXJlbmNlcyB1bmRlciBhIHBhcnRpY3VsYXIgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgICAgdGhlIG5hbWUgb2YgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gICAqIEBwYXJhbSBkaWZmICAgIHRoZSBkaWZmZXJlbmNlIG9uIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gbGFzdCAgICB3aGV0aGVyIHRoaXMgaXMgdGhlIGxhc3Qgbm9kZSBvZiBhIHBhcmVudCB0cmVlLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFRyZWVEaWZmKG5hbWU6IHN0cmluZywgZGlmZjogRGlmZmVyZW5jZTxhbnk+LCBsYXN0OiBib29sZWFuKSB7XG4gICAgbGV0IGFkZGl0aW9uYWxJbmZvID0gJyc7XG4gICAgaWYgKGlzUHJvcGVydHlEaWZmZXJlbmNlKGRpZmYpKSB7XG4gICAgICBpZiAoZGlmZi5jaGFuZ2VJbXBhY3QgPT09IFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFKSB7XG4gICAgICAgIGFkZGl0aW9uYWxJbmZvID0gJyAobWF5IGNhdXNlIHJlcGxhY2VtZW50KSc7XG4gICAgICB9IGVsc2UgaWYgKGRpZmYuY2hhbmdlSW1wYWN0ID09PSAgUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFKSB7XG4gICAgICAgIGFkZGl0aW9uYWxJbmZvID0gJyAocmVxdWlyZXMgcmVwbGFjZW1lbnQpJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcmludCgnICVz4pSAICVzICVzJXMnLCBsYXN0ID8gJ+KUlCcgOiAn4pScJywgdGhpcy5jaGFuZ2VUYWcoZGlmZi5vbGRWYWx1ZSwgZGlmZi5uZXdWYWx1ZSksIG5hbWUsIGFkZGl0aW9uYWxJbmZvKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRPYmplY3REaWZmKGRpZmYub2xkVmFsdWUsIGRpZmYubmV3VmFsdWUsIGAgJHtsYXN0ID8gJyAnIDogJ+KUgid9YCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBvYmplY3RzLCBsb29raW5nIGZvciB0aGUgZGlmZmVyZW5jZXMgYXMgZGVlcCBhcyBwb3NzaWJsZSxcbiAgICogYW5kIHJlbmRlcmluZyBhIHRyZWUgZ3JhcGggb2YgdGhlIHBhdGggdW50aWwgdGhlIGRpZmZlcmVuY2UgaXMgZm91bmQuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRPYmplY3QgIHRoZSBvbGQgb2JqZWN0LlxuICAgKiBAcGFyYW0gbmV3T2JqZWN0ICB0aGUgbmV3IG9iamVjdC5cbiAgICogQHBhcmFtIGxpbmVQcmVmaXggYSBwcmVmaXggKGluZGVudC1saWtlKSB0byBiZSB1c2VkIG9uIGV2ZXJ5IGxpbmUuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0T2JqZWN0RGlmZihvbGRPYmplY3Q6IGFueSwgbmV3T2JqZWN0OiBhbnksIGxpbmVQcmVmaXg6IHN0cmluZykge1xuICAgIGlmICgodHlwZW9mIG9sZE9iamVjdCAhPT0gdHlwZW9mIG5ld09iamVjdCkgfHwgQXJyYXkuaXNBcnJheShvbGRPYmplY3QpIHx8IHR5cGVvZiBvbGRPYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvbGRPYmplY3QgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAob2xkT2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgbmV3T2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRPYmplY3QgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdPYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3Qgb2xkU3RyID0gSlNPTi5zdHJpbmdpZnkob2xkT2JqZWN0LCBudWxsLCAyKTtcbiAgICAgICAgICBjb25zdCBuZXdTdHIgPSBKU09OLnN0cmluZ2lmeShuZXdPYmplY3QsIG51bGwsIDIpO1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBfZGlmZlN0cmluZ3Mob2xkU3RyLCBuZXdTdHIsIHRoaXMuY29udGV4dCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAgOyBpIDwgZGlmZi5sZW5ndGggOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXMgJXMnLCBsaW5lUHJlZml4LCBpID09PSAwID8gJ+KUlOKUgCcgOiAnICAnLCBkaWZmW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcmludCgnJXMgICDilJzilIAgJXMgJXMnLCBsaW5lUHJlZml4LCBSRU1PVkFMLCB0aGlzLmZvcm1hdFZhbHVlKG9sZE9iamVjdCwgY29sb3JzLnJlZCkpO1xuICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSU4pSAICVzICVzJywgbGluZVByZWZpeCwgQURESVRJT04sIHRoaXMuZm9ybWF0VmFsdWUobmV3T2JqZWN0LCBjb2xvcnMuZ3JlZW4pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvbGRPYmplY3QgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdPYmplY3QgPT09IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcycsIGxpbmVQcmVmaXgsIHRoaXMuZm9ybWF0VmFsdWUob2xkT2JqZWN0LCBjb2xvcnMucmVkKSk7XG4gICAgICB9IGVsc2UgLyogaWYgKG9sZE9iamVjdCA9PT0gdW5kZWZpbmVkICYmIG5ld09iamVjdCAhPT0gdW5kZWZpbmVkKSAqLyB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSU4pSAICVzJywgbGluZVByZWZpeCwgdGhpcy5mb3JtYXRWYWx1ZShuZXdPYmplY3QsIGNvbG9ycy5ncmVlbikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlTZXQgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG9sZE9iamVjdCkpO1xuICAgIE9iamVjdC5rZXlzKG5ld09iamVjdCkuZm9yRWFjaChrID0+IGtleVNldC5hZGQoaykpO1xuICAgIGNvbnN0IGtleXMgPSBuZXcgQXJyYXkoLi4ua2V5U2V0KS5maWx0ZXIoayA9PiAhZGVlcEVxdWFsKG9sZE9iamVjdFtrXSwgbmV3T2JqZWN0W2tdKSkuc29ydCgpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRPYmplY3Rba2V5XTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3T2JqZWN0W2tleV07XG4gICAgICBjb25zdCB0cmVlUHJlZml4ID0ga2V5ID09PSBsYXN0S2V5ID8gJ+KUlCcgOiAn4pScJztcbiAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyAlczonLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCB0aGlzLmNoYW5nZVRhZyhvbGRWYWx1ZSwgbmV3VmFsdWUpLCBjb2xvcnMuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgICAgdGhpcy5mb3JtYXRPYmplY3REaWZmKG9sZFZhbHVlLCBuZXdWYWx1ZSwgYCR7bGluZVByZWZpeH0gICAke2tleSA9PT0gbGFzdEtleSA/ICcgJyA6ICfilIInfWApO1xuICAgICAgfSBlbHNlIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkIC8qICYmIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyBSZW1vdmVkOiAlcycsIGxpbmVQcmVmaXgsIHRyZWVQcmVmaXgsIFJFTU9WQUwsIGNvbG9ycy5ibHVlKGAuJHtrZXl9YCkpO1xuICAgICAgfSBlbHNlIC8qIGlmIChvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgKi8ge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgICVz4pSAICVzIEFkZGVkOiAlcycsIGxpbmVQcmVmaXgsIHRyZWVQcmVmaXgsIEFERElUSU9OLCBjb2xvcnMuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG9sZFZhbHVlIHRoZSBvbGQgdmFsdWUgb2YgYSBkaWZmZXJlbmNlLlxuICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiBhIGRpZmZlcmVuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgdGFnIHRvIGJlIHJlbmRlcmVkIGluIHRoZSBkaWZmLCByZWZsZWN0aW5nIHdoZXRoZXIgdGhlIGRpZmZlcmVuY2VcbiAgICogICAgICB3YXMgYW4gQURESVRJT04sIFVQREFURSBvciBSRU1PVkFMLlxuICAgKi9cbiAgcHVibGljIGNoYW5nZVRhZyhvbGRWYWx1ZTogYW55IHwgdW5kZWZpbmVkLCBuZXdWYWx1ZTogYW55IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gVVBEQVRFO1xuICAgIH0gZWxzZSBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKi8pIHtcbiAgICAgIHJldHVybiBSRU1PVkFMO1xuICAgIH0gZWxzZSAvKiBpZiAob2xkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSAqLyB7XG4gICAgICByZXR1cm4gQURESVRJT047XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgJ2F3czpjZGs6cGF0aCcgbWV0YWRhdGEgaW4gdGhlIGRpZmYgYW5kIGFkZCBpdCB0byB0aGUgbG9naWNhbFRvUGF0aE1hcFxuICAgKlxuICAgKiBUaGVyZSBhcmUgbXVsdGlwbGUgc291cmNlcyBvZiBsb2dpY2FsSUQgLT4gcGF0aCBtYXBwaW5nczogc3ludGggbWV0YWRhdGFcbiAgICogYW5kIHJlc291cmNlIG1ldGFkYXRhLCBhbmQgd2UgY29tYmluZSBhbGwgc291cmNlcyBpbnRvIGEgc2luZ2xlIG1hcC5cbiAgICovXG4gIHB1YmxpYyByZWFkQ29uc3RydWN0UGF0aHNGcm9tKHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gICAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZURpZmZdIG9mIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMpKSB7XG4gICAgICBpZiAoIXJlc291cmNlRGlmZikgeyBjb250aW51ZTsgfVxuXG4gICAgICBjb25zdCBvbGRQYXRoTWV0YWRhdGEgPSByZXNvdXJjZURpZmYub2xkVmFsdWUgJiYgcmVzb3VyY2VEaWZmLm9sZFZhbHVlLk1ldGFkYXRhICYmIHJlc291cmNlRGlmZi5vbGRWYWx1ZS5NZXRhZGF0YVtjeGFwaS5QQVRIX01FVEFEQVRBX0tFWV07XG4gICAgICBpZiAob2xkUGF0aE1ldGFkYXRhICYmICEobG9naWNhbElkIGluIHRoaXMubG9naWNhbFRvUGF0aE1hcCkpIHtcbiAgICAgICAgdGhpcy5sb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF0gPSBvbGRQYXRoTWV0YWRhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1BhdGhNZXRhZGF0YSA9IHJlc291cmNlRGlmZi5uZXdWYWx1ZSAmJiByZXNvdXJjZURpZmYubmV3VmFsdWUuTWV0YWRhdGEgJiYgcmVzb3VyY2VEaWZmLm5ld1ZhbHVlLk1ldGFkYXRhW2N4YXBpLlBBVEhfTUVUQURBVEFfS0VZXTtcbiAgICAgIGlmIChuZXdQYXRoTWV0YWRhdGEgJiYgIShsb2dpY2FsSWQgaW4gdGhpcy5sb2dpY2FsVG9QYXRoTWFwKSkge1xuICAgICAgICB0aGlzLmxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXSA9IG5ld1BhdGhNZXRhZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxJZDogc3RyaW5nKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIHBhdGggaW4gdGhlIG1hcCwgcmV0dXJuIGl0XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplZExvZ2ljYWxJZFBhdGgobG9naWNhbElkKTtcblxuICAgIGlmIChub3JtYWxpemVkKSB7XG4gICAgICByZXR1cm4gYCR7bm9ybWFsaXplZH0gJHtjb2xvcnMuZ3JheShsb2dpY2FsSWQpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZ2ljYWxJZDtcbiAgfVxuXG4gIHB1YmxpYyBub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dpY2FsSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIHBhdGggaW4gdGhlIG1hcCwgcmV0dXJuIGl0XG4gICAgY29uc3QgcGF0aCA9IHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdO1xuICAgIHJldHVybiBwYXRoID8gbm9ybWFsaXplUGF0aChwYXRoKSA6IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFBhdGggaXMgc3VwcG9zZWQgdG8gc3RhcnQgd2l0aCBcIi9zdGFjay1uYW1lXCIuIElmIHRoaXMgaXMgdGhlIGNhc2UgKGkuZS4gcGF0aCBoYXMgbW9yZSB0aGFuXG4gICAgICogdHdvIGNvbXBvbmVudHMsIHdlIHJlbW92ZSB0aGUgZmlyc3QgcGFydC4gT3RoZXJ3aXNlLCB3ZSBqdXN0IHVzZSB0aGUgZnVsbCBwYXRoLlxuICAgICAqIEBwYXJhbSBwXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwOiBzdHJpbmcpIHtcbiAgICAgIGlmIChwLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwID0gcC5zdWJzdHIoMSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBwYXJ0cyA9IHAuc3BsaXQoJy8nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBpZiBpdCdzIFwiUmVzb3VyY2VcIiBvciBcIkRlZmF1bHRcIiAoaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgY29tcG9uZW50KVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdCA9PT0gJ1Jlc291cmNlJyB8fCBsYXN0ID09PSAnRGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHBhcnRzLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRJYW1DaGFuZ2VzKGNoYW5nZXM6IElhbUNoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMuaGFzQ2hhbmdlcykgeyByZXR1cm47IH1cblxuICAgIGlmIChjaGFuZ2VzLnN0YXRlbWVudHMuaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ0lBTSBTdGF0ZW1lbnQgQ2hhbmdlcycpO1xuICAgICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZVN0YXRlbWVudHMoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5tYW5hZ2VkUG9saWNpZXMuaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ0lBTSBQb2xpY3kgQ2hhbmdlcycpO1xuICAgICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWN1cml0eUdyb3VwQ2hhbmdlcyhjaGFuZ2VzOiBTZWN1cml0eUdyb3VwQ2hhbmdlcykge1xuICAgIGlmICghY2hhbmdlcy5oYXNDaGFuZ2VzKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1NlY3VyaXR5IEdyb3VwIENoYW5nZXMnKTtcbiAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplKCkpLCB0aGlzLnN0cmVhbS5jb2x1bW5zKSk7XG4gIH1cblxuICBwdWJsaWMgZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKHJvd3M6IHN0cmluZ1tdW10pOiBzdHJpbmdbXVtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAocm93ID0+IHJvdy5tYXAodGhpcy5zdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcy5iaW5kKHRoaXMpKSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic3RpdHV0ZSBhbGwgc3RyaW5ncyBsaWtlICR7TG9nSWQueHh4fSB3aXRoIHRoZSBwYXRoIGluc3RlYWQgb2YgdGhlIGxvZ2ljYWwgSURcbiAgICovXG4gIHB1YmxpYyBzdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKC9cXCRcXHsoW14ufV0rKSguW159XSspP1xcfS9pZywgKF9tYXRjaCwgbG9nSWQsIHN1ZmZpeCkgPT4ge1xuICAgICAgcmV0dXJuICckeycgKyAodGhpcy5ub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dJZCkgfHwgbG9nSWQpICsgKHN1ZmZpeCB8fCAnJykgKyAnfSc7XG4gIH0pO1xuICB9XG59XG5cbi8qKlxuICogQSBwYXRjaCBhcyByZXR1cm5lZCBieSBgYGRpZmYuc3RydWN0dXJlZFBhdGNoYGAuXG4gKi9cbmludGVyZmFjZSBQYXRjaCB7XG4gIC8qKlxuICAgKiBIdW5rcyBpbiB0aGUgcGF0Y2guXG4gICAqL1xuICBodW5rczogUmVhZG9ubHlBcnJheTxQYXRjaEh1bms+O1xufVxuXG4vKipcbiAqIEEgaHVuayBpbiBhIHBhdGNoIHByb2R1Y2VkIGJ5IGBgZGlmZi5zdHJ1Y3R1cmVkUGF0Y2hgYC5cbiAqL1xuaW50ZXJmYWNlIFBhdGNoSHVuayB7XG4gIG9sZFN0YXJ0OiBudW1iZXI7XG4gIG9sZExpbmVzOiBudW1iZXI7XG4gIG5ld1N0YXJ0OiBudW1iZXI7XG4gIG5ld0xpbmVzOiBudW1iZXI7XG4gIGxpbmVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdW5pZmllZCBkaWZmIG9mIHR3byBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSBvbGRTdHIgIHRoZSBcIm9sZFwiIHZlcnNpb24gb2YgdGhlIHN0cmluZy5cbiAqIEBwYXJhbSBuZXdTdHIgIHRoZSBcIm5ld1wiIHZlcnNpb24gb2YgdGhlIHN0cmluZy5cbiAqIEBwYXJhbSBjb250ZXh0IHRoZSBudW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byB1c2UgaW4gYXJiaXRyYXJ5IEpTT04gZGlmZi5cbiAqXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBkaWZmIGxpbmVzLlxuICovXG5mdW5jdGlvbiBfZGlmZlN0cmluZ3Mob2xkU3RyOiBzdHJpbmcsIG5ld1N0cjogc3RyaW5nLCBjb250ZXh0OiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhdGNoOiBQYXRjaCA9IHN0cnVjdHVyZWRQYXRjaChudWxsLCBudWxsLCBvbGRTdHIsIG5ld1N0ciwgbnVsbCwgbnVsbCwgeyBjb250ZXh0IH0pO1xuICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGh1bmsgb2YgcGF0Y2guaHVua3MpIHtcbiAgICByZXN1bHQucHVzaChjb2xvcnMubWFnZW50YShgQEAgLSR7aHVuay5vbGRTdGFydH0sJHtodW5rLm9sZExpbmVzfSArJHtodW5rLm5ld1N0YXJ0fSwke2h1bmsubmV3TGluZXN9IEBAYCkpO1xuICAgIGNvbnN0IGJhc2VJbmRlbnQgPSBfZmluZEluZGVudChodW5rLmxpbmVzKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgLy8gRG9uJ3QgY2FyZSBhYm91dCB0ZXJtaW5hdGlvbiBuZXdsaW5lLlxuICAgICAgaWYgKGxpbmUgPT09ICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKSB7IGNvbnRpbnVlOyB9XG4gICAgICBjb25zdCBtYXJrZXIgPSBsaW5lLmNoYXJBdCgwKTtcbiAgICAgIGNvbnN0IHRleHQgPSBsaW5lLnNsaWNlKDEgKyBiYXNlSW5kZW50KTtcbiAgICAgIHN3aXRjaCAobWFya2VyKSB7XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgcmVzdWx0LnB1c2goYCR7Q09OVEVYVH0gJHt0ZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJysnOlxuICAgICAgICByZXN1bHQucHVzaChjb2xvcnMuYm9sZChgJHtBRERJVElPTn0gJHtjb2xvcnMuZ3JlZW4odGV4dCl9YCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICByZXN1bHQucHVzaChjb2xvcnMuYm9sZChgJHtSRU1PVkFMfSAke2NvbG9ycy5yZWQodGV4dCl9YCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBkaWZmIG1hcmtlcjogJHttYXJrZXJ9IChmdWxsIGxpbmU6ICR7bGluZX0pYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgZnVuY3Rpb24gX2ZpbmRJbmRlbnQobGluZXM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZW50ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMSA7IGkgPCBsaW5lLmxlbmd0aCA7IGkrKykge1xuICAgICAgICBpZiAobGluZS5jaGFyQXQoaSkgIT09ICcgJykge1xuICAgICAgICAgIGluZGVudCA9IGluZGVudCA+IGkgLSAxID8gaSAtIDEgOiBpbmRlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGVudDtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQXNDO0FBQ3RDLCtCQUE4QjtBQUM5QixtREFBdUc7QUFFdkcsc0NBQXdDO0FBQ3hDLGlEQUE2QztBQUk3QyxjQUFjO0FBQ2QsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUM7QUFFekMsMERBQTBEO0FBQzFELDJDQUEyQztBQUMzQyxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTzVDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBb0IsRUFDcEIsWUFBMEIsRUFDMUIsbUJBQW9ELEVBQUcsRUFDdkQsVUFBa0IsQ0FBQztJQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpGLElBQUksWUFBWSxDQUFDLHdCQUF3QixJQUFJLFlBQVksQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRTtRQUMvRixTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzFILFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkYsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7S0FDaEM7SUFFRCwrQkFBK0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFekQsU0FBUyxDQUFD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QUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDO2FBQzNFO1NBQ0Y7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0lBRWQsU0FBUyxXQUFXLENBQUMsS0FBZTtRQUNsQyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDckMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7b0JBQzFCLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUN6QyxNQUFNO2lCQUNQO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29sb3JzIGZyb20gJ2NvbG9ycy9zYWZlJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZSwgaXNQcm9wZXJ0eURpZmZlcmVuY2UsIFJlc291cmNlRGlmZmVyZW5jZSwgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICcuL2RpZmYtdGVtcGxhdGUnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZUNvbGxlY3Rpb24sIFRlbXBsYXRlRGlmZiB9IGZyb20gJy4vZGlmZi90eXBlcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuL2RpZmYvdXRpbCc7XG5pbXBvcnQgeyBmb3JtYXRUYWJsZSB9IGZyb20gJy4vZm9ybWF0LXRhYmxlJztcbmltcG9ydCB7IElhbUNoYW5nZXMgfSBmcm9tICcuL2lhbS9pYW0tY2hhbmdlcyc7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwQ2hhbmdlcyB9IGZyb20gJy4vbmV0d29yay9zZWN1cml0eS1ncm91cC1jaGFuZ2VzJztcblxuLy8gZnJvbSBjeC1hcGlcbmNvbnN0IFBBVEhfTUVUQURBVEFfS0VZID0gJ2F3czpjZGs6cGF0aCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby12YXItcmVxdWlyZXNcbmNvbnN0IHsgc3RydWN0dXJlZFBhdGNoIH0gPSByZXF1aXJlKCdkaWZmJyk7XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0U3RyZWFtIGV4dGVuZHMgTm9kZUpTLldyaXRhYmxlU3RyZWFtIHtcbiAgY29sdW1ucz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRlbXBsYXRlIGRpZmZlcmVuY2VzIHRvIHRoZSBwcm9jZXNzJyBjb25zb2xlLlxuICpcbiAqIEBwYXJhbSBzdHJlYW0gICAgICAgICAgIFRoZSBJTyBzdHJlYW0gd2hlcmUgdG8gb3V0cHV0IHRoZSByZW5kZXJlZCBkaWZmLlxuICogQHBhcmFtIHRlbXBsYXRlRGlmZiAgICAgVGVtcGxhdGVEaWZmIHRvIGJlIHJlbmRlcmVkIHRvIHRoZSBjb25zb2xlLlxuICogQHBhcmFtIGxvZ2ljYWxUb1BhdGhNYXAgQSBtYXAgZnJvbSBsb2dpY2FsIElEIHRvIGNvbnN0cnVjdCBwYXRoLiBVc2VmdWwgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdGhlcmUgaXMgbm8gYXdzOmNkazpwYXRoIG1ldGFkYXRhIGluIHRoZSB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSBjb250ZXh0ICAgICAgICAgIHRoZSBudW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byB1c2UgaW4gYXJiaXRyYXJ5IEpTT04gZGlmZiAoZGVmYXVsdHMgdG8gMykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaWZmZXJlbmNlcyhzdHJlYW06IEZvcm1hdFN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9ID0geyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IG51bWJlciA9IDMpIHtcbiAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihzdHJlYW0sIGxvZ2ljYWxUb1BhdGhNYXAsIHRlbXBsYXRlRGlmZiwgY29udGV4dCk7XG5cbiAgaWYgKHRlbXBsYXRlRGlmZi5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gfHwgdGVtcGxhdGVEaWZmLnRyYW5zZm9ybSB8fCB0ZW1wbGF0ZURpZmYuZGVzY3JpcHRpb24pIHtcbiAgICBmb3JtYXR0ZXIucHJpbnRTZWN0aW9uSGVhZGVyKCdUZW1wbGF0ZScpO1xuICAgIGZvcm1hdHRlci5mb3JtYXREaWZmZXJlbmNlKCdBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24nLCAnQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uJywgdGVtcGxhdGVEaWZmLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbik7XG4gICAgZm9ybWF0dGVyLmZvcm1hdERpZmZlcmVuY2UoJ1RyYW5zZm9ybScsICdUcmFuc2Zvcm0nLCB0ZW1wbGF0ZURpZmYudHJhbnNmb3JtKTtcbiAgICBmb3JtYXR0ZXIuZm9ybWF0RGlmZmVyZW5jZSgnRGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nLCB0ZW1wbGF0ZURpZmYuZGVzY3JpcHRpb24pO1xuICAgIGZvcm1hdHRlci5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgfVxuXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlc1dpdGhCYW5uZXIoZm9ybWF0dGVyLCB0ZW1wbGF0ZURpZmYpO1xuXG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdQYXJhbWV0ZXJzJywgJ1BhcmFtZXRlcicsIHRlbXBsYXRlRGlmZi5wYXJhbWV0ZXJzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ01ldGFkYXRhJywgJ01ldGFkYXRhJywgdGVtcGxhdGVEaWZmLm1ldGFkYXRhKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ01hcHBpbmdzJywgJ01hcHBpbmcnLCB0ZW1wbGF0ZURpZmYubWFwcGluZ3MpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignQ29uZGl0aW9ucycsICdDb25kaXRpb24nLCB0ZW1wbGF0ZURpZmYuY29uZGl0aW9ucyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdSZXNvdXJjZXMnLCAnUmVzb3VyY2UnLCB0ZW1wbGF0ZURpZmYucmVzb3VyY2VzLCBmb3JtYXR0ZXIuZm9ybWF0UmVzb3VyY2VEaWZmZXJlbmNlLmJpbmQoZm9ybWF0dGVyKSk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdPdXRwdXRzJywgJ091dHB1dCcsIHRlbXBsYXRlRGlmZi5vdXRwdXRzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ090aGVyIENoYW5nZXMnLCAnVW5rbm93bicsIHRlbXBsYXRlRGlmZi51bmtub3duKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZGlmZiBvZiBzZWN1cml0eSBjaGFuZ2VzIHRvIHRoZSBnaXZlbiBzdHJlYW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyhzdHJlYW06IE5vZGVKUy5Xcml0ZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEaWZmOiBUZW1wbGF0ZURpZmYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb1BhdGhNYXA6IHtbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmd9ID0ge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ/OiBudW1iZXIpIHtcbiAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihzdHJlYW0sIGxvZ2ljYWxUb1BhdGhNYXAsIHRlbXBsYXRlRGlmZiwgY29udGV4dCk7XG5cbiAgZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY3VyaXR5Q2hhbmdlc1dpdGhCYW5uZXIoZm9ybWF0dGVyOiBGb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gIGlmICghdGVtcGxhdGVEaWZmLmlhbUNoYW5nZXMuaGFzQ2hhbmdlcyAmJiAhdGVtcGxhdGVEaWZmLnNlY3VyaXR5R3JvdXBDaGFuZ2VzLmhhc0NoYW5nZXMpIHsgcmV0dXJuOyB9XG4gIGZvcm1hdHRlci5mb3JtYXRJYW1DaGFuZ2VzKHRlbXBsYXRlRGlmZi5pYW1DaGFuZ2VzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3VyaXR5R3JvdXBDaGFuZ2VzKHRlbXBsYXRlRGlmZi5zZWN1cml0eUdyb3VwQ2hhbmdlcyk7XG5cbiAgZm9ybWF0dGVyLndhcm5pbmcoYChOT1RFOiBUaGVyZSBtYXkgYmUgc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzIG5vdCBpbiB0aGlzIGxpc3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzEyOTkpYCk7XG4gIGZvcm1hdHRlci5wcmludFNlY3Rpb25Gb290ZXIoKTtcbn1cblxuY29uc3QgQURESVRJT04gPSBjb2xvcnMuZ3JlZW4oJ1srXScpO1xuY29uc3QgQ09OVEVYVCAgPSBjb2xvcnMuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgICA9IGNvbG9ycy55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCAgPSBjb2xvcnMucmVkKCdbLV0nKTtcblxuY2xhc3MgRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdHJlYW06IEZvcm1hdFN0cmVhbSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICAgICAgICAgICBkaWZmPzogVGVtcGxhdGVEaWZmLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IG51bWJlciA9IDMpIHtcbiAgICAvLyBSZWFkIGFkZGl0aW9uYWwgY29uc3RydWN0IHBhdGhzIGZyb20gdGhlIGRpZmYgaWYgaXQgaXMgc3VwcGxpZWRcbiAgICBpZiAoZGlmZikge1xuICAgICAgdGhpcy5yZWFkQ29uc3RydWN0UGF0aHNGcm9tKGRpZmYpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmludChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICB0aGlzLnN0cmVhbS53cml0ZShjb2xvcnMud2hpdGUoZm9ybWF0KGZtdCwgLi4uYXJncykpICsgJ1xcbicpO1xuICB9XG5cbiAgcHVibGljIHdhcm5pbmcoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgdGhpcy5zdHJlYW0ud3JpdGUoY29sb3JzLnllbGxvdyhmb3JtYXQoZm10LCAuLi5hcmdzKSkgKyAnXFxuJyk7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0U2VjdGlvbjxWLCBUIGV4dGVuZHMgRGlmZmVyZW5jZTxWPj4oXG4gICAgICB0aXRsZTogc3RyaW5nLFxuICAgICAgZW50cnlUeXBlOiBzdHJpbmcsXG4gICAgICBjb2xsZWN0aW9uOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPixcbiAgICAgIGZvcm1hdHRlcjogKHR5cGU6IHN0cmluZywgaWQ6IHN0cmluZywgZGlmZjogVCkgPT4gdm9pZCA9IHRoaXMuZm9ybWF0RGlmZmVyZW5jZS5iaW5kKHRoaXMpKSB7XG5cbiAgICBpZiAoY29sbGVjdGlvbi5kaWZmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcih0aXRsZSk7XG4gICAgY29sbGVjdGlvbi5mb3JFYWNoRGlmZmVyZW5jZSgoaWQsIGRpZmYpID0+IGZvcm1hdHRlcihlbnRyeVR5cGUsIGlkLCBkaWZmKSk7XG4gICAgdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludFNlY3Rpb25IZWFkZXIodGl0bGU6IHN0cmluZykge1xuICAgIHRoaXMucHJpbnQoY29sb3JzLnVuZGVybGluZShjb2xvcnMuYm9sZCh0aXRsZSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludFNlY3Rpb25Gb290ZXIoKSB7XG4gICAgdGhpcy5wcmludCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogUHJpbnQgYSBzaW1wbGUgZGlmZmVyZW5jZSBmb3IgYSBnaXZlbiBuYW1lZCBlbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgdGhlIG5hbWUgb2YgdGhlIGVudGl0eSB0aGF0IGlzIGRpZmZlcmVudC5cbiAgICogQHBhcmFtIGRpZmYgdGhlIGRpZmZlcmVuY2UgdG8gYmUgcmVuZGVyZWQuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0RGlmZmVyZW5jZSh0eXBlOiBzdHJpbmcsIGxvZ2ljYWxJZDogc3RyaW5nLCBkaWZmOiBEaWZmZXJlbmNlPGFueT4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWRpZmYgfHwgIWRpZmYuaXNEaWZmZXJlbnQpIHsgcmV0dXJuOyB9XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUoZGlmZi5vbGRWYWx1ZSwgY29sb3JzLnJlZCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKGRpZmYubmV3VmFsdWUsIGNvbG9ycy5ncmVlbik7XG4gICAgaWYgKGRpZmYuaXNBZGRpdGlvbikge1xuICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGRpZmYuaXNVcGRhdGUpIHtcbiAgICAgIHZhbHVlID0gYCR7b2xkVmFsdWV9IHRvICR7bmV3VmFsdWV9YDtcbiAgICB9IGVsc2UgaWYgKGRpZmYuaXNSZW1vdmFsKSB7XG4gICAgICB2YWx1ZSA9IG9sZFZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMucHJpbnQoYCR7dGhpcy5mb3JtYXRQcmVmaXgoZGlmZil9ICR7Y29sb3JzLmN5YW4odHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbElkKX06ICR7dmFsdWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogUHJpbnQgYSByZXNvdXJjZSBkaWZmZXJlbmNlIGZvciBhIGdpdmVuIGxvZ2ljYWwgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgdGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHRoYXQgY2hhbmdlZC5cbiAgICogQHBhcmFtIGRpZmYgICAgICB0aGUgY2hhbmdlIHRvIGJlIHJlbmRlcmVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFJlc291cmNlRGlmZmVyZW5jZShfdHlwZTogc3RyaW5nLCBsb2dpY2FsSWQ6IHN0cmluZywgZGlmZjogUmVzb3VyY2VEaWZmZXJlbmNlKSB7XG4gICAgaWYgKCFkaWZmLmlzRGlmZmVyZW50KSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gZGlmZi5pc1JlbW92YWwgPyBkaWZmLm9sZFJlc291cmNlVHlwZSA6IGRpZmYubmV3UmVzb3VyY2VUeXBlO1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIHRoaXMucHJpbnQoYCR7dGhpcy5mb3JtYXRQcmVmaXgoZGlmZil9ICR7dGhpcy5mb3JtYXRWYWx1ZShyZXNvdXJjZVR5cGUsIGNvbG9ycy5jeWFuKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsSWQpfSAke3RoaXMuZm9ybWF0SW1wYWN0KGRpZmYuY2hhbmdlSW1wYWN0KX1gKTtcblxuICAgIGlmIChkaWZmLmlzVXBkYXRlKSB7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlQ291bnQgPSBkaWZmLmRpZmZlcmVuY2VDb3VudDtcbiAgICAgIGxldCBwcm9jZXNzZWRDb3VudCA9IDA7XG4gICAgICBkaWZmLmZvckVhY2hEaWZmZXJlbmNlKChfLCBuYW1lLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgcHJvY2Vzc2VkQ291bnQgKz0gMTtcbiAgICAgICAgdGhpcy5mb3JtYXRUcmVlRGlmZihuYW1lLCB2YWx1ZXMsIHByb2Nlc3NlZENvdW50ID09PSBkaWZmZXJlbmNlQ291bnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdFByZWZpeDxUPihkaWZmOiBEaWZmZXJlbmNlPFQ+KSB7XG4gICAgaWYgKGRpZmYuaXNBZGRpdGlvbikgeyByZXR1cm4gQURESVRJT047IH1cbiAgICBpZiAoZGlmZi5pc1VwZGF0ZSkgeyByZXR1cm4gVVBEQVRFOyB9XG4gICAgaWYgKGRpZmYuaXNSZW1vdmFsKSB7IHJldHVybiBSRU1PVkFMOyB9XG4gICAgcmV0dXJuIGNvbG9ycy53aGl0ZSgnWz9dJyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQuXG4gICAqIEBwYXJhbSBjb2xvciB0aGUgY29sb3IgdG8gYmUgdXNlZC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcsIHdpdGggY29sb3IgYXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBjb2xvcjogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGNvbG9yKHZhbHVlKTsgfVxuICAgIHJldHVybiBjb2xvcihKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpbXBhY3QgdGhlIGltcGFjdCB0byBiZSBmb3JtYXR0ZWRcbiAgICogQHJldHVybnMgYSB1c2VyLWZyaWVuZGx5LCBjb2xvcmVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGltcGFjdC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRJbXBhY3QoaW1wYWN0OiBSZXNvdXJjZUltcGFjdCkge1xuICAgIHN3aXRjaCAoaW1wYWN0KSB7XG4gICAgY2FzZSBSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRTpcbiAgICAgIHJldHVybiBjb2xvcnMuaXRhbGljKGNvbG9ycy55ZWxsb3coJ21heSBiZSByZXBsYWNlZCcpKTtcbiAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRTpcbiAgICAgIHJldHVybiBjb2xvcnMuaXRhbGljKGNvbG9ycy5ib2xkKGNvbG9ycy5yZWQoJ3JlcGxhY2UnKSkpO1xuICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZOlxuICAgICAgcmV0dXJuIGNvbG9ycy5pdGFsaWMoY29sb3JzLmJvbGQoY29sb3JzLnJlZCgnZGVzdHJveScpKSk7XG4gICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTjpcbiAgICAgIHJldHVybiBjb2xvcnMuaXRhbGljKGNvbG9ycy55ZWxsb3coJ29ycGhhbicpKTtcbiAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfVVBEQVRFOlxuICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9DUkVBVEU6XG4gICAgY2FzZSBSZXNvdXJjZUltcGFjdC5OT19DSEFOR0U6XG4gICAgICByZXR1cm4gJyc7IC8vIG5vIGV4dHJhIGluZm8gaXMgZ2FpbmVkIGhlcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIHRyZWUgb2YgZGlmZmVyZW5jZXMgdW5kZXIgYSBwYXJ0aWN1bGFyIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lICAgIHRoZSBuYW1lIG9mIHRoZSByb290IG9mIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gZGlmZiAgICB0aGUgZGlmZmVyZW5jZSBvbiB0aGUgdHJlZS5cbiAgICogQHBhcmFtIGxhc3QgICAgd2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IG5vZGUgb2YgYSBwYXJlbnQgdHJlZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRUcmVlRGlmZihuYW1lOiBzdHJpbmcsIGRpZmY6IERpZmZlcmVuY2U8YW55PiwgbGFzdDogYm9vbGVhbikge1xuICAgIGxldCBhZGRpdGlvbmFsSW5mbyA9ICcnO1xuICAgIGlmIChpc1Byb3BlcnR5RGlmZmVyZW5jZShkaWZmKSkge1xuICAgICAgaWYgKGRpZmYuY2hhbmdlSW1wYWN0ID09PSBSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRSkge1xuICAgICAgICBhZGRpdGlvbmFsSW5mbyA9ICcgKG1heSBjYXVzZSByZXBsYWNlbWVudCknO1xuICAgICAgfSBlbHNlIGlmIChkaWZmLmNoYW5nZUltcGFjdCA9PT0gIFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRSkge1xuICAgICAgICBhZGRpdGlvbmFsSW5mbyA9ICcgKHJlcXVpcmVzIHJlcGxhY2VtZW50KSc7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJpbnQoJyAlc+KUgCAlcyAlcyVzJywgbGFzdCA/ICfilJQnIDogJ+KUnCcsIHRoaXMuY2hhbmdlVGFnKGRpZmYub2xkVmFsdWUsIGRpZmYubmV3VmFsdWUpLCBuYW1lLCBhZGRpdGlvbmFsSW5mbyk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0T2JqZWN0RGlmZihkaWZmLm9sZFZhbHVlLCBkaWZmLm5ld1ZhbHVlLCBgICR7bGFzdCA/ICcgJyA6ICfilIInfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gb2JqZWN0cywgbG9va2luZyBmb3IgdGhlIGRpZmZlcmVuY2VzIGFzIGRlZXAgYXMgcG9zc2libGUsXG4gICAqIGFuZCByZW5kZXJpbmcgYSB0cmVlIGdyYXBoIG9mIHRoZSBwYXRoIHVudGlsIHRoZSBkaWZmZXJlbmNlIGlzIGZvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkT2JqZWN0ICB0aGUgb2xkIG9iamVjdC5cbiAgICogQHBhcmFtIG5ld09iamVjdCAgdGhlIG5ldyBvYmplY3QuXG4gICAqIEBwYXJhbSBsaW5lUHJlZml4IGEgcHJlZml4IChpbmRlbnQtbGlrZSkgdG8gYmUgdXNlZCBvbiBldmVyeSBsaW5lLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdE9iamVjdERpZmYob2xkT2JqZWN0OiBhbnksIG5ld09iamVjdDogYW55LCBsaW5lUHJlZml4OiBzdHJpbmcpIHtcbiAgICBpZiAoKHR5cGVvZiBvbGRPYmplY3QgIT09IHR5cGVvZiBuZXdPYmplY3QpIHx8IEFycmF5LmlzQXJyYXkob2xkT2JqZWN0KSB8fCB0eXBlb2Ygb2xkT2JqZWN0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2xkT2JqZWN0ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKG9sZE9iamVjdCAhPT0gdW5kZWZpbmVkICYmIG5ld09iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2xkT2JqZWN0ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3T2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IG9sZFN0ciA9IEpTT04uc3RyaW5naWZ5KG9sZE9iamVjdCwgbnVsbCwgMik7XG4gICAgICAgICAgY29uc3QgbmV3U3RyID0gSlNPTi5zdHJpbmdpZnkobmV3T2JqZWN0LCBudWxsLCAyKTtcbiAgICAgICAgICBjb25zdCBkaWZmID0gX2RpZmZTdHJpbmdzKG9sZFN0ciwgbmV3U3RyLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwIDsgaSA8IGRpZmYubGVuZ3RoIDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnByaW50KCclcyAgICVzICVzJywgbGluZVByZWZpeCwgaSA9PT0gMCA/ICfilJTilIAnIDogJyAgJywgZGlmZltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSc4pSAICVzICVzJywgbGluZVByZWZpeCwgUkVNT1ZBTCwgdGhpcy5mb3JtYXRWYWx1ZShvbGRPYmplY3QsIGNvbG9ycy5yZWQpKTtcbiAgICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcyAlcycsIGxpbmVQcmVmaXgsIEFERElUSU9OLCB0aGlzLmZvcm1hdFZhbHVlKG5ld09iamVjdCwgY29sb3JzLmdyZWVuKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob2xkT2JqZWN0ICE9PSB1bmRlZmluZWQgLyogJiYgbmV3T2JqZWN0ID09PSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICDilJTilIAgJXMnLCBsaW5lUHJlZml4LCB0aGlzLmZvcm1hdFZhbHVlKG9sZE9iamVjdCwgY29sb3JzLnJlZCkpO1xuICAgICAgfSBlbHNlIC8qIGlmIChvbGRPYmplY3QgPT09IHVuZGVmaW5lZCAmJiBuZXdPYmplY3QgIT09IHVuZGVmaW5lZCkgKi8ge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcycsIGxpbmVQcmVmaXgsIHRoaXMuZm9ybWF0VmFsdWUobmV3T2JqZWN0LCBjb2xvcnMuZ3JlZW4pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5U2V0ID0gbmV3IFNldChPYmplY3Qua2V5cyhvbGRPYmplY3QpKTtcbiAgICBPYmplY3Qua2V5cyhuZXdPYmplY3QpLmZvckVhY2goayA9PiBrZXlTZXQuYWRkKGspKTtcbiAgICBjb25zdCBrZXlzID0gbmV3IEFycmF5KC4uLmtleVNldCkuZmlsdGVyKGsgPT4gIWRlZXBFcXVhbChvbGRPYmplY3Rba10sIG5ld09iamVjdFtrXSkpLnNvcnQoKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkT2JqZWN0W2tleV07XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld09iamVjdFtrZXldO1xuICAgICAgY29uc3QgdHJlZVByZWZpeCA9IGtleSA9PT0gbGFzdEtleSA/ICfilJQnIDogJ+KUnCc7XG4gICAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXPilIAgJXMgJXM6JywgbGluZVByZWZpeCwgdHJlZVByZWZpeCwgdGhpcy5jaGFuZ2VUYWcob2xkVmFsdWUsIG5ld1ZhbHVlKSwgY29sb3JzLmJsdWUoYC4ke2tleX1gKSk7XG4gICAgICAgIHRoaXMuZm9ybWF0T2JqZWN0RGlmZihvbGRWYWx1ZSwgbmV3VmFsdWUsIGAke2xpbmVQcmVmaXh9ICAgJHtrZXkgPT09IGxhc3RLZXkgPyAnICcgOiAn4pSCJ31gKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXPilIAgJXMgUmVtb3ZlZDogJXMnLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCBSRU1PVkFMLCBjb2xvcnMuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgIH0gZWxzZSAvKiBpZiAob2xkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkICovIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyBBZGRlZDogJXMnLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCBBRERJVElPTiwgY29sb3JzLmJsdWUoYC4ke2tleX1gKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvbGRWYWx1ZSB0aGUgb2xkIHZhbHVlIG9mIGEgZGlmZmVyZW5jZS5cbiAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgYSBkaWZmZXJlbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHRhZyB0byBiZSByZW5kZXJlZCBpbiB0aGUgZGlmZiwgcmVmbGVjdGluZyB3aGV0aGVyIHRoZSBkaWZmZXJlbmNlXG4gICAqICAgICAgd2FzIGFuIEFERElUSU9OLCBVUERBVEUgb3IgUkVNT1ZBTC5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VUYWcob2xkVmFsdWU6IGFueSB8IHVuZGVmaW5lZCwgbmV3VmFsdWU6IGFueSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFVQREFURTtcbiAgICB9IGVsc2UgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgLyogJiYgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCovKSB7XG4gICAgICByZXR1cm4gUkVNT1ZBTDtcbiAgICB9IGVsc2UgLyogaWYgKG9sZFZhbHVlID09PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkgKi8ge1xuICAgICAgcmV0dXJuIEFERElUSU9OO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kICdhd3M6Y2RrOnBhdGgnIG1ldGFkYXRhIGluIHRoZSBkaWZmIGFuZCBhZGQgaXQgdG8gdGhlIGxvZ2ljYWxUb1BhdGhNYXBcbiAgICpcbiAgICogVGhlcmUgYXJlIG11bHRpcGxlIHNvdXJjZXMgb2YgbG9naWNhbElEIC0+IHBhdGggbWFwcGluZ3M6IHN5bnRoIG1ldGFkYXRhXG4gICAqIGFuZCByZXNvdXJjZSBtZXRhZGF0YSwgYW5kIHdlIGNvbWJpbmUgYWxsIHNvdXJjZXMgaW50byBhIHNpbmdsZSBtYXAuXG4gICAqL1xuICBwdWJsaWMgcmVhZENvbnN0cnVjdFBhdGhzRnJvbSh0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZikge1xuICAgIGZvciAoY29uc3QgW2xvZ2ljYWxJZCwgcmVzb3VyY2VEaWZmXSBvZiBPYmplY3QuZW50cmllcyh0ZW1wbGF0ZURpZmYucmVzb3VyY2VzKSkge1xuICAgICAgaWYgKCFyZXNvdXJjZURpZmYpIHsgY29udGludWU7IH1cblxuICAgICAgY29uc3Qgb2xkUGF0aE1ldGFkYXRhID0gcmVzb3VyY2VEaWZmLm9sZFZhbHVlICYmIHJlc291cmNlRGlmZi5vbGRWYWx1ZS5NZXRhZGF0YSAmJiByZXNvdXJjZURpZmYub2xkVmFsdWUuTWV0YWRhdGFbUEFUSF9NRVRBREFUQV9LRVldO1xuICAgICAgaWYgKG9sZFBhdGhNZXRhZGF0YSAmJiAhKGxvZ2ljYWxJZCBpbiB0aGlzLmxvZ2ljYWxUb1BhdGhNYXApKSB7XG4gICAgICAgIHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdID0gb2xkUGF0aE1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdQYXRoTWV0YWRhdGEgPSByZXNvdXJjZURpZmYubmV3VmFsdWUgJiYgcmVzb3VyY2VEaWZmLm5ld1ZhbHVlLk1ldGFkYXRhICYmIHJlc291cmNlRGlmZi5uZXdWYWx1ZS5NZXRhZGF0YVtQQVRIX01FVEFEQVRBX0tFWV07XG4gICAgICBpZiAobmV3UGF0aE1ldGFkYXRhICYmICEobG9naWNhbElkIGluIHRoaXMubG9naWNhbFRvUGF0aE1hcCkpIHtcbiAgICAgICAgdGhpcy5sb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF0gPSBuZXdQYXRoTWV0YWRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdExvZ2ljYWxJZChsb2dpY2FsSWQ6IHN0cmluZykge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBwYXRoIGluIHRoZSBtYXAsIHJldHVybiBpdFxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZWRMb2dpY2FsSWRQYXRoKGxvZ2ljYWxJZCk7XG5cbiAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgcmV0dXJuIGAke25vcm1hbGl6ZWR9ICR7Y29sb3JzLmdyYXkobG9naWNhbElkKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBsb2dpY2FsSWQ7XG4gIH1cblxuICBwdWJsaWMgbm9ybWFsaXplZExvZ2ljYWxJZFBhdGgobG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBwYXRoIGluIHRoZSBtYXAsIHJldHVybiBpdFxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXTtcbiAgICByZXR1cm4gcGF0aCA/IG5vcm1hbGl6ZVBhdGgocGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBQYXRoIGlzIHN1cHBvc2VkIHRvIHN0YXJ0IHdpdGggXCIvc3RhY2stbmFtZVwiLiBJZiB0aGlzIGlzIHRoZSBjYXNlIChpLmUuIHBhdGggaGFzIG1vcmUgdGhhblxuICAgICAqIHR3byBjb21wb25lbnRzLCB3ZSByZW1vdmUgdGhlIGZpcnN0IHBhcnQuIE90aGVyd2lzZSwgd2UganVzdCB1c2UgdGhlIGZ1bGwgcGF0aC5cbiAgICAgKiBAcGFyYW0gcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocDogc3RyaW5nKSB7XG4gICAgICBpZiAocC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcCA9IHAuc3Vic3RyKDEpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGFydHMgPSBwLnNwbGl0KCcvJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDEpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgaWYgaXQncyBcIlJlc291cmNlXCIgb3IgXCJEZWZhdWx0XCIgKGlmIHdlIGhhdmUgbW9yZSB0aGFuIGEgc2luZ2xlIGNvbXBvbmVudClcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3QgPT09ICdSZXNvdXJjZScgfHwgbGFzdCA9PT0gJ0RlZmF1bHQnKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSBwYXJ0cy5qb2luKCcvJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0SWFtQ2hhbmdlcyhjaGFuZ2VzOiBJYW1DaGFuZ2VzKSB7XG4gICAgaWYgKCFjaGFuZ2VzLmhhc0NoYW5nZXMpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAoY2hhbmdlcy5zdGF0ZW1lbnRzLmhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdJQU0gU3RhdGVtZW50IENoYW5nZXMnKTtcbiAgICAgIHRoaXMucHJpbnQoZm9ybWF0VGFibGUodGhpcy5kZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoY2hhbmdlcy5zdW1tYXJpemVTdGF0ZW1lbnRzKCkpLCB0aGlzLnN0cmVhbS5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubWFuYWdlZFBvbGljaWVzLmhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdJQU0gUG9saWN5IENoYW5nZXMnKTtcbiAgICAgIHRoaXMucHJpbnQoZm9ybWF0VGFibGUodGhpcy5kZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoY2hhbmdlcy5zdW1tYXJpemVNYW5hZ2VkUG9saWNpZXMoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0U2VjdXJpdHlHcm91cENoYW5nZXMoY2hhbmdlczogU2VjdXJpdHlHcm91cENoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMuaGFzQ2hhbmdlcykgeyByZXR1cm47IH1cblxuICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdTZWN1cml0eSBHcm91cCBDaGFuZ2VzJyk7XG4gICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZSgpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICB9XG5cbiAgcHVibGljIGRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhyb3dzOiBzdHJpbmdbXVtdKTogc3RyaW5nW11bXSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKHJvdyA9PiByb3cubWFwKHRoaXMuc3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMuYmluZCh0aGlzKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnN0aXR1dGUgYWxsIHN0cmluZ3MgbGlrZSAke0xvZ0lkLnh4eH0gd2l0aCB0aGUgcGF0aCBpbnN0ZWFkIG9mIHRoZSBsb2dpY2FsIElEXG4gICAqL1xuICBwdWJsaWMgc3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzb3VyY2UucmVwbGFjZSgvXFwkXFx7KFteLn1dKykoLltefV0rKT9cXH0vaWcsIChfbWF0Y2gsIGxvZ0lkLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiAnJHsnICsgKHRoaXMubm9ybWFsaXplZExvZ2ljYWxJZFBhdGgobG9nSWQpIHx8IGxvZ0lkKSArIChzdWZmaXggfHwgJycpICsgJ30nO1xuICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGF0Y2ggYXMgcmV0dXJuZWQgYnkgYGBkaWZmLnN0cnVjdHVyZWRQYXRjaGBgLlxuICovXG5pbnRlcmZhY2UgUGF0Y2gge1xuICAvKipcbiAgICogSHVua3MgaW4gdGhlIHBhdGNoLlxuICAgKi9cbiAgaHVua3M6IFJlYWRvbmx5QXJyYXk8UGF0Y2hIdW5rPjtcbn1cblxuLyoqXG4gKiBBIGh1bmsgaW4gYSBwYXRjaCBwcm9kdWNlZCBieSBgYGRpZmYuc3RydWN0dXJlZFBhdGNoYGAuXG4gKi9cbmludGVyZmFjZSBQYXRjaEh1bmsge1xuICBvbGRTdGFydDogbnVtYmVyO1xuICBvbGRMaW5lczogbnVtYmVyO1xuICBuZXdTdGFydDogbnVtYmVyO1xuICBuZXdMaW5lczogbnVtYmVyO1xuICBsaW5lczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVuaWZpZWQgZGlmZiBvZiB0d28gc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gb2xkU3RyICB0aGUgXCJvbGRcIiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gbmV3U3RyICB0aGUgXCJuZXdcIiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gY29udGV4dCB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gdXNlIGluIGFyYml0cmFyeSBKU09OIGRpZmYuXG4gKlxuICogQHJldHVybnMgYW4gYXJyYXkgb2YgZGlmZiBsaW5lcy5cbiAqL1xuZnVuY3Rpb24gX2RpZmZTdHJpbmdzKG9sZFN0cjogc3RyaW5nLCBuZXdTdHI6IHN0cmluZywgY29udGV4dDogbnVtYmVyKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXRjaDogUGF0Y2ggPSBzdHJ1Y3R1cmVkUGF0Y2gobnVsbCwgbnVsbCwgb2xkU3RyLCBuZXdTdHIsIG51bGwsIG51bGwsIHsgY29udGV4dCB9KTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBodW5rIG9mIHBhdGNoLmh1bmtzKSB7XG4gICAgcmVzdWx0LnB1c2goY29sb3JzLm1hZ2VudGEoYEBAIC0ke2h1bmsub2xkU3RhcnR9LCR7aHVuay5vbGRMaW5lc30gKyR7aHVuay5uZXdTdGFydH0sJHtodW5rLm5ld0xpbmVzfSBAQGApKTtcbiAgICBjb25zdCBiYXNlSW5kZW50ID0gX2ZpbmRJbmRlbnQoaHVuay5saW5lcyk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGh1bmsubGluZXMpIHtcbiAgICAgIC8vIERvbid0IGNhcmUgYWJvdXQgdGVybWluYXRpb24gbmV3bGluZS5cbiAgICAgIGlmIChsaW5lID09PSAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJykgeyBjb250aW51ZTsgfVxuICAgICAgY29uc3QgbWFya2VyID0gbGluZS5jaGFyQXQoMCk7XG4gICAgICBjb25zdCB0ZXh0ID0gbGluZS5zbGljZSgxICsgYmFzZUluZGVudCk7XG4gICAgICBzd2l0Y2ggKG1hcmtlcikge1xuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHJlc3VsdC5wdXNoKGAke0NPTlRFWFR9ICR7dGV4dH1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcrJzpcbiAgICAgICAgcmVzdWx0LnB1c2goY29sb3JzLmJvbGQoYCR7QURESVRJT059ICR7Y29sb3JzLmdyZWVuKHRleHQpfWApKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmVzdWx0LnB1c2goY29sb3JzLmJvbGQoYCR7UkVNT1ZBTH0gJHtjb2xvcnMucmVkKHRleHQpfWApKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZGlmZiBtYXJrZXI6ICR7bWFya2VyfSAoZnVsbCBsaW5lOiAke2xpbmV9KWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIGZ1bmN0aW9uIF9maW5kSW5kZW50KGxpbmVzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gICAgbGV0IGluZGVudCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgZm9yIChsZXQgaSA9IDEgOyBpIDwgbGluZS5sZW5ndGggOyBpKyspIHtcbiAgICAgICAgaWYgKGxpbmUuY2hhckF0KGkpICE9PSAnICcpIHtcbiAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgPiBpIC0gMSA/IGkgLSAxIDogaW5kZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmRlbnQ7XG4gIH1cbn1cbiJdfQ==
{
"name": "@aws-cdk/cloudformation-diff",
"version": "1.25.0",
"version": "1.26.0",
"description": "Utilities to diff CDK stacks against CloudFormation templates",

@@ -33,4 +33,3 @@ "main": "lib/index.js",

"dependencies": {
"@aws-cdk/cfnspec": "1.25.0",
"@aws-cdk/cx-api": "1.25.0",
"@aws-cdk/cfnspec": "1.26.0",
"colors": "^1.4.0",

@@ -46,6 +45,6 @@ "diff": "^4.0.2",

"@types/table": "^4.0.7",
"cdk-build-tools": "1.25.0",
"cdk-build-tools": "1.26.0",
"fast-check": "^1.22.2",
"jest": "^24.9.0",
"pkglint": "1.25.0",
"pkglint": "1.26.0",
"ts-jest": "^25.2.0"

@@ -67,2 +66,2 @@ },

"stability": "experimental"
}
}

@@ -31,3 +31,2 @@ "use strict";

test('when a resource is created', () => {
var _a, _b, _c;
const currentTemplate = { Resources: {} };

@@ -40,8 +39,7 @@ const newTemplate = { Resources: { BucketResource: { Type: 'AWS::S3::Bucket' } } };

expect(difference).not.toBeUndefined();
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.isAddition).toBeTruthy();
expect((_b = difference) === null || _b === void 0 ? void 0 : _b.newResourceType).toEqual('AWS::S3::Bucket');
expect((_c = difference) === null || _c === void 0 ? void 0 : _c.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_CREATE);
expect(difference === null || difference === void 0 ? void 0 : difference.isAddition).toBeTruthy();
expect(difference === null || difference === void 0 ? void 0 : difference.newResourceType).toEqual('AWS::S3::Bucket');
expect(difference === null || difference === void 0 ? void 0 : difference.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_CREATE);
});
test('when a resource is deleted (no DeletionPolicy)', () => {
var _a, _b, _c;
const currentTemplate = {

@@ -63,8 +61,7 @@ Resources: {

expect(difference).not.toBeUndefined();
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.isRemoval).toBeTruthy();
expect((_b = difference) === null || _b === void 0 ? void 0 : _b.oldResourceType).toEqual('AWS::S3::BucketPolicy');
expect((_c = difference) === null || _c === void 0 ? void 0 : _c.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_DESTROY);
expect(difference === null || difference === void 0 ? void 0 : difference.isRemoval).toBeTruthy();
expect(difference === null || difference === void 0 ? void 0 : difference.oldResourceType).toEqual('AWS::S3::BucketPolicy');
expect(difference === null || difference === void 0 ? void 0 : difference.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_DESTROY);
});
test('when a resource is deleted (DeletionPolicy=Retain)', () => {
var _a, _b, _c;
const currentTemplate = {

@@ -91,8 +88,7 @@ Resources: {

expect(difference).not.toBeUndefined();
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.isRemoval).toBeTruthy();
expect((_b = difference) === null || _b === void 0 ? void 0 : _b.oldResourceType).toEqual('AWS::S3::BucketPolicy');
expect((_c = difference) === null || _c === void 0 ? void 0 : _c.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_ORPHAN);
expect(difference === null || difference === void 0 ? void 0 : difference.isRemoval).toBeTruthy();
expect(difference === null || difference === void 0 ? void 0 : difference.oldResourceType).toEqual('AWS::S3::BucketPolicy');
expect(difference === null || difference === void 0 ? void 0 : difference.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_ORPHAN);
});
test('when a property changes', () => {
var _a, _b;
const bucketName = 'ShineyBucketName';

@@ -131,4 +127,4 @@ const currentTemplate = {

expect(difference).not.toBeUndefined();
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.oldResourceType).toEqual('AWS::S3::Bucket');
expect((_b = difference) === null || _b === void 0 ? void 0 : _b.propertyUpdates).toEqual({
expect(difference === null || difference === void 0 ? void 0 : difference.oldResourceType).toEqual('AWS::S3::Bucket');
expect(difference === null || difference === void 0 ? void 0 : difference.propertyUpdates).toEqual({
BucketName: { oldValue: bucketName, newValue: newBucketName, changeImpact: diff_template_1.ResourceImpact.WILL_REPLACE, isDifferent: true }

@@ -138,3 +134,2 @@ });

test('change in dependencies counts as a simple update', () => {
var _a;
// GIVEN

@@ -162,6 +157,5 @@ const currentTemplate = {

const difference = differences.resources.changes.BucketResource;
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_UPDATE);
expect(difference === null || difference === void 0 ? void 0 : difference.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_UPDATE);
});
test('when a property is deleted', () => {
var _a, _b;
const bucketName = 'ShineyBucketName';

@@ -196,4 +190,4 @@ const currentTemplate = {

expect(difference).not.toBeUndefined();
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.oldResourceType).toEqual('AWS::S3::Bucket');
expect((_b = difference) === null || _b === void 0 ? void 0 : _b.propertyUpdates).toEqual({
expect(difference === null || difference === void 0 ? void 0 : difference.oldResourceType).toEqual('AWS::S3::Bucket');
expect(difference === null || difference === void 0 ? void 0 : difference.propertyUpdates).toEqual({
BucketName: { oldValue: bucketName, newValue: undefined, changeImpact: diff_template_1.ResourceImpact.WILL_REPLACE, isDifferent: true }

@@ -203,3 +197,2 @@ });

test('when a property is added', () => {
var _a, _b;
const bucketName = 'ShineyBucketName';

@@ -234,4 +227,4 @@ const currentTemplate = {

expect(difference).not.toBeUndefined();
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.oldResourceType).toEqual('AWS::S3::Bucket');
expect((_b = difference) === null || _b === void 0 ? void 0 : _b.propertyUpdates).toEqual({
expect(difference === null || difference === void 0 ? void 0 : difference.oldResourceType).toEqual('AWS::S3::Bucket');
expect(difference === null || difference === void 0 ? void 0 : difference.propertyUpdates).toEqual({
BucketName: { oldValue: undefined, newValue: bucketName, changeImpact: diff_template_1.ResourceImpact.WILL_REPLACE, isDifferent: true }

@@ -241,3 +234,2 @@ });

test('when a resource type changed', () => {
var _a, _b, _c;
const currentTemplate = {

@@ -268,5 +260,5 @@ Resources: {

expect(difference).not.toBe(undefined);
expect((_a = difference) === null || _a === void 0 ? void 0 : _a.oldResourceType).toEqual('AWS::IAM::Policy');
expect((_b = difference) === null || _b === void 0 ? void 0 : _b.newResourceType).toEqual('AWS::S3::Bucket');
expect((_c = difference) === null || _c === void 0 ? void 0 : _c.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_REPLACE);
expect(difference === null || difference === void 0 ? void 0 : difference.oldResourceType).toEqual('AWS::IAM::Policy');
expect(difference === null || difference === void 0 ? void 0 : difference.newResourceType).toEqual('AWS::S3::Bucket');
expect(difference === null || difference === void 0 ? void 0 : difference.changeImpact).toBe(diff_template_1.ResourceImpact.WILL_REPLACE);
});

@@ -315,2 +307,2 @@ test('resource replacement is tracked through references', () => {

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi10ZW1wbGF0ZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGlmZi10ZW1wbGF0ZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0RBQW9FO0FBRXBFLE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsd0JBQXdCO0FBQ2hFLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsSUFBSSxFQUFFLHVCQUF1QjtJQUM3QixVQUFVLEVBQUU7UUFDVixjQUFjLEVBQUUsZUFBZTtRQUMvQixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7S0FDbEM7Q0FDRixDQUFDO0FBRUYsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztJQUN0QyxNQUFNLGVBQWUsR0FBRztRQUN0QixTQUFTLEVBQUU7WUFDVCxvQkFBb0IsRUFBRSxzQkFBc0I7WUFDNUMsY0FBYyxFQUFFO2dCQUNkLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFVBQVUsRUFBRTtvQkFDVixVQUFVLEVBQUUsVUFBVTtpQkFDdkI7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUNGLGdEQUFnRDtJQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLFdBQVcsR0FBRyw0QkFBWSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvRCxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7O0lBQ3RDLE1BQU0sZUFBZSxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lB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Q0wsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFDO2FBQzNDO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTztJQUNQLE1BQU0sV0FBVyxHQUFHO1FBQ2xCLFNBQVMsRUFBRTtZQUNULE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxHQUFHO2FBQ3JDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBQzthQUM1QztZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUM7YUFDM0M7U0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyw0QkFBWSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUUvRCxPQUFPO0lBQ1AsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlmZlRlbXBsYXRlLCBSZXNvdXJjZUltcGFjdCB9IGZyb20gJy4uL2xpYi9kaWZmLXRlbXBsYXRlJztcblxuY29uc3QgUE9MSUNZX0RPQ1VNRU5UID0geyBmb286ICdCYXInIH07IC8vIE9idmlvdXNseSBhIGZha2Ugb25lIVxuY29uc3QgQlVDS0VUX1BPTElDWV9SRVNPVVJDRSA9IHtcbiAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldFBvbGljeScsXG4gIFByb3BlcnRpZXM6IHtcbiAgICBQb2xpY3lEb2N1bWVudDogUE9MSUNZX0RPQ1VNRU5ULFxuICAgIEJ1Y2tldDogeyBSZWY6ICdCdWNrZXRSZXNvdXJjZScgfVxuICB9XG59O1xuXG50ZXN0KCd3aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UnLCAoKSA9PiB7XG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSAnU2hpbmV5QnVja2V0TmFtZSc7XG4gIGNvbnN0IGN1cnJlbnRUZW1wbGF0ZSA9IHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEJ1Y2tldFBvbGljeVJlc291cmNlOiBCVUNLRVRfUE9MSUNZX1JFU09VUkNFLFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8vIE1ha2luZyBhIEpTT04tY2xvbmUsIGJlY2F1c2UgPT09IGlzIGNoZWF0aW5nIVxuICBjb25zdCBuZXdUZW1wbGF0ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudFRlbXBsYXRlKSk7XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMCk7XG59KTtcblxudGVzdCgnd2hlbiBhIHJlc291cmNlIGlzIGNyZWF0ZWQnLCAoKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUZW1wbGF0ZSA9IHsgUmVzb3VyY2VzOiB7fSB9O1xuXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0geyBSZXNvdXJjZXM6IHsgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfSB9IH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8uaXNBZGRpdGlvbikudG9CZVRydXRoeSgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ubmV3UmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LmNoYW5nZUltcGFjdCkudG9CZShSZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURSk7XG59KTtcblxudGVzdCgnd2hlbiBhIHJlc291cmNlIGlzIGRlbGV0ZWQgKG5vIERlbGV0aW9uUG9saWN5KScsICgpID0+IHtcbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfSxcbiAgICAgIEJ1Y2tldFBvbGljeVJlc291cmNlOiBCVUNLRVRfUE9MSUNZX1JFU09VUkNFXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaWZmZXJlbmNlcyA9IGRpZmZUZW1wbGF0ZShjdXJyZW50VGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLmRpZmZlcmVuY2VDb3VudCkudG9CZSgxKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLnJlc291cmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBkaWZmZXJlbmNlcy5yZXNvdXJjZXMuY2hhbmdlcy5CdWNrZXRQb2xpY3lSZXNvdXJjZTtcbiAgZXhwZWN0KGRpZmZlcmVuY2UpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5pc1JlbW92YWwpLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/Lm9sZFJlc291cmNlVHlwZSkudG9FcXVhbCgnQVdTOjpTMzo6QnVja2V0UG9saWN5Jyk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5jaGFuZ2VJbXBhY3QpLnRvQmUoUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZKTtcbn0pO1xuXG50ZXN0KCd3aGVuIGEgcmVzb3VyY2UgaXMgZGVsZXRlZCAoRGVsZXRpb25Qb2xpY3k9UmV0YWluKScsICgpID0+IHtcbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfSxcbiAgICAgIEJ1Y2tldFBvbGljeVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlMzOjpCdWNrZXRQb2xpY3knLFxuICAgICAgICBEZWxldGlvblBvbGljeTogJ1JldGFpbicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBQb2xpY3lEb2N1bWVudDogUE9MSUNZX0RPQ1VNRU5ULFxuICAgICAgICAgIEJ1Y2tldDogeyBSZWY6ICdCdWNrZXRSZXNvdXJjZScgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczogeyBCdWNrZXRSZXNvdXJjZTogeyBUeXBlOiAnQVdTOjpTMzo6QnVja2V0JyB9IH1cbiAgfTtcblxuICBjb25zdCBkaWZmZXJlbmNlcyA9IGRpZmZUZW1wbGF0ZShjdXJyZW50VGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLmRpZmZlcmVuY2VDb3VudCkudG9CZSgxKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLnJlc291cmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBkaWZmZXJlbmNlcy5yZXNvdXJjZXMuY2hhbmdlcy5CdWNrZXRQb2xpY3lSZXNvdXJjZTtcbiAgZXhwZWN0KGRpZmZlcmVuY2UpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5pc1JlbW92YWwpLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/Lm9sZFJlc291cmNlVHlwZSkudG9FcXVhbCgnQVdTOjpTMzo6QnVja2V0UG9saWN5Jyk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5jaGFuZ2VJbXBhY3QpLnRvQmUoUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU4pO1xufSk7XG5cbnRlc3QoJ3doZW4gYSBwcm9wZXJ0eSBjaGFuZ2VzJywgKCkgPT4ge1xuICBjb25zdCBidWNrZXROYW1lID0gJ1NoaW5leUJ1Y2tldE5hbWUnO1xuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3QnVja2V0TmFtZSA9IGAke2J1Y2tldE5hbWV9LXYyYDtcbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBuZXdCdWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ub2xkUmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LnByb3BlcnR5VXBkYXRlcykudG9FcXVhbCh7XG4gICAgQnVja2V0TmFtZTogeyBvbGRWYWx1ZTogYnVja2V0TmFtZSwgbmV3VmFsdWU6IG5ld0J1Y2tldE5hbWUsIGNoYW5nZUltcGFjdDogUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFLCBpc0RpZmZlcmVudDogdHJ1ZSB9XG4gIH0pO1xufSk7XG5cbnRlc3QoJ2NoYW5nZSBpbiBkZXBlbmRlbmNpZXMgY291bnRzIGFzIGEgc2ltcGxlIHVwZGF0ZScsICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIERlcGVuZHNPbjogWydTb21lUmVzb3VyY2UnXVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIERlcGVuZHNPbjogWydTb21lUmVzb3VyY2UnLCAnU29tZU90aGVyUmVzb3VyY2UnXVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGlmZmVyZW5jZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5jaGFuZ2VJbXBhY3QpLnRvQmUoUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEUpO1xufSk7XG5cbnRlc3QoJ3doZW4gYSBwcm9wZXJ0eSBpcyBkZWxldGVkJywgKCkgPT4ge1xuICBjb25zdCBidWNrZXROYW1lID0gJ1NoaW5leUJ1Y2tldE5hbWUnO1xuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCdcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ub2xkUmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LnByb3BlcnR5VXBkYXRlcykudG9FcXVhbCh7XG4gICAgQnVja2V0TmFtZTogeyBvbGRWYWx1ZTogYnVja2V0TmFtZSwgbmV3VmFsdWU6IHVuZGVmaW5lZCwgY2hhbmdlSW1wYWN0OiBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UsIGlzRGlmZmVyZW50OiB0cnVlIH1cbiAgfSk7XG59KTtcblxudGVzdCgnd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkJywgKCkgPT4ge1xuICBjb25zdCBidWNrZXROYW1lID0gJ1NoaW5leUJ1Y2tldE5hbWUnO1xuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCdcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ub2xkUmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LnByb3BlcnR5VXBkYXRlcykudG9FcXVhbCh7XG4gICAgQnVja2V0TmFtZTogeyBvbGRWYWx1ZTogdW5kZWZpbmVkLCBuZXdWYWx1ZTogYnVja2V0TmFtZSwgY2hhbmdlSW1wYWN0OiBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UsIGlzRGlmZmVyZW50OiB0cnVlIH1cbiAgfSk7XG59KTtcblxudGVzdCgnd2hlbiBhIHJlc291cmNlIHR5cGUgY2hhbmdlZCcsICgpID0+IHtcbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6SUFNOjpQb2xpY3knLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUG9saWN5TmFtZTogJ1BvbGljeU5hbWUnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBCdWNrZXRSZXNvdXJjZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTMzo6QnVja2V0JyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEJ1Y2tldE5hbWU6ICdCdWNrZXROYW1lJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpZmZlcmVuY2VzID0gZGlmZlRlbXBsYXRlKGN1cnJlbnRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuICBleHBlY3QoZGlmZmVyZW5jZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBleHBlY3QoZGlmZmVyZW5jZXMucmVzb3VyY2VzLmRpZmZlcmVuY2VDb3VudCkudG9CZSgxKTtcbiAgY29uc3QgZGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzLnJlc291cmNlcy5jaGFuZ2VzLkJ1Y2tldFJlc291cmNlO1xuICBleHBlY3QoZGlmZmVyZW5jZSkubm90LnRvQmUodW5kZWZpbmVkKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/Lm9sZFJlc291cmNlVHlwZSkudG9FcXVhbCgnQVdTOjpJQU06OlBvbGljeScpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ubmV3UmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LmNoYW5nZUltcGFjdCkudG9CZShSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UpO1xufSk7XG5cbnRlc3QoJ3Jlc291cmNlIHJlcGxhY2VtZW50IGlzIHRyYWNrZWQgdGhyb3VnaCByZWZlcmVuY2VzJywgKCkgPT4ge1xuICAvLyBJZiBhIHJlc291cmNlIGlzIHJlcGxhY2VkLCB0aGVuIHRoYXQgY2hhbmdlIHNob3dzIHRoYXQgcmVmZXJlbmNlcyBhcmVcbiAgLy8gZ29pbmcgdG8gY2hhbmdlLiBUaGlzIG1heSBsZWFkIHRvIHJlcGxhY2VtZW50IG9mIGRvd25zdHJlYW0gcmVzb3VyY2VzXG4gIC8vIGlmIHRoZSByZWZlcmVuY2UgaXMgdXNlZCBpbiBhbiBpbW11dGFibGUgcHJvcGVydHksIGFuZCBzbyBvbi5cblxuICAvLyBHSVZFTlxuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBCdWNrZXQ6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHsgQnVja2V0TmFtZTogJ05hbWUxJywgfSwgLy8gSW1tdXRhYmxlIHByb3BcbiAgICAgIH0sXG4gICAgICBRdWV1ZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTUVM6OlF1ZXVlJyxcbiAgICAgICAgUHJvcGVydGllczogeyBRdWV1ZU5hbWU6IHsgUmVmOiAnQnVja2V0JyB9fSwgLy8gSW1tdXRhYmxlIHByb3BcbiAgICAgIH0sXG4gICAgICBUb3BpYzoge1xuICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgUHJvcGVydGllczogeyBUb3BpY05hbWU6IHsgUmVmOiAnUXVldWUnIH19LCAvLyBJbW11dGFibGUgcHJvcFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0OiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlMzOjpCdWNrZXQnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7IEJ1Y2tldE5hbWU6ICdOYW1lMicsIH0sXG4gICAgICB9LFxuICAgICAgUXVldWU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U1FTOjpRdWV1ZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHsgUXVldWVOYW1lOiB7IFJlZjogJ0J1Y2tldCcgfX0sXG4gICAgICB9LFxuICAgICAgVG9waWM6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgIFByb3BlcnRpZXM6IHsgVG9waWNOYW1lOiB7IFJlZjogJ1F1ZXVlJyB9fSxcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGRpZmZlcmVuY2VzID0gZGlmZlRlbXBsYXRlKGN1cnJlbnRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRpZmZlcmVuY2VzLnJlc291cmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMyk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi10ZW1wbGF0ZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGlmZi10ZW1wbGF0ZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0RBQW9FO0FBRXBFLE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsd0JBQXdCO0FBQ2hFLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsSUFBSSxFQUFFLHVCQUF1QjtJQUM3QixVQUFVLEVBQUU7UUFDVixjQUFjLEVBQUUsZUFBZTtRQUMvQixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7S0FDbEM7Q0FDRixDQUFDO0FBRUYsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztJQUN0QyxNQUFNLGVBQWUsR0FBRztRQUN0QixTQUFTLEVBQUU7WUFDVCxvQkFBb0IsRUFBRSxzQkFBc0I7WUFDNUMsY0FBYyxFQUFFO2dCQUNkLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFVBQVUsRUFBRTtvQkFDVixVQUFVLEVBQUUsVUFBVTtpQkFDdkI7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUNGLGdEQUFnRDtJQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLFdBQVcsR0FBRyw0QkFBWSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvRCxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDdEMsTUFBTSxlQUFlLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFF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O0lBQ1AsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlmZlRlbXBsYXRlLCBSZXNvdXJjZUltcGFjdCB9IGZyb20gJy4uL2xpYi9kaWZmLXRlbXBsYXRlJztcblxuY29uc3QgUE9MSUNZX0RPQ1VNRU5UID0geyBmb286ICdCYXInIH07IC8vIE9idmlvdXNseSBhIGZha2Ugb25lIVxuY29uc3QgQlVDS0VUX1BPTElDWV9SRVNPVVJDRSA9IHtcbiAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldFBvbGljeScsXG4gIFByb3BlcnRpZXM6IHtcbiAgICBQb2xpY3lEb2N1bWVudDogUE9MSUNZX0RPQ1VNRU5ULFxuICAgIEJ1Y2tldDogeyBSZWY6ICdCdWNrZXRSZXNvdXJjZScgfVxuICB9XG59O1xuXG50ZXN0KCd3aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UnLCAoKSA9PiB7XG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSAnU2hpbmV5QnVja2V0TmFtZSc7XG4gIGNvbnN0IGN1cnJlbnRUZW1wbGF0ZSA9IHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEJ1Y2tldFBvbGljeVJlc291cmNlOiBCVUNLRVRfUE9MSUNZX1JFU09VUkNFLFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8vIE1ha2luZyBhIEpTT04tY2xvbmUsIGJlY2F1c2UgPT09IGlzIGNoZWF0aW5nIVxuICBjb25zdCBuZXdUZW1wbGF0ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudFRlbXBsYXRlKSk7XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMCk7XG59KTtcblxudGVzdCgnd2hlbiBhIHJlc291cmNlIGlzIGNyZWF0ZWQnLCAoKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUZW1wbGF0ZSA9IHsgUmVzb3VyY2VzOiB7fSB9O1xuXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0geyBSZXNvdXJjZXM6IHsgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfSB9IH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8uaXNBZGRpdGlvbikudG9CZVRydXRoeSgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ubmV3UmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LmNoYW5nZUltcGFjdCkudG9CZShSZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURSk7XG59KTtcblxudGVzdCgnd2hlbiBhIHJlc291cmNlIGlzIGRlbGV0ZWQgKG5vIERlbGV0aW9uUG9saWN5KScsICgpID0+IHtcbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfSxcbiAgICAgIEJ1Y2tldFBvbGljeVJlc291cmNlOiBCVUNLRVRfUE9MSUNZX1JFU09VUkNFXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaWZmZXJlbmNlcyA9IGRpZmZUZW1wbGF0ZShjdXJyZW50VGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLmRpZmZlcmVuY2VDb3VudCkudG9CZSgxKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLnJlc291cmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBkaWZmZXJlbmNlcy5yZXNvdXJjZXMuY2hhbmdlcy5CdWNrZXRQb2xpY3lSZXNvdXJjZTtcbiAgZXhwZWN0KGRpZmZlcmVuY2UpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5pc1JlbW92YWwpLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/Lm9sZFJlc291cmNlVHlwZSkudG9FcXVhbCgnQVdTOjpTMzo6QnVja2V0UG9saWN5Jyk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5jaGFuZ2VJbXBhY3QpLnRvQmUoUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZKTtcbn0pO1xuXG50ZXN0KCd3aGVuIGEgcmVzb3VyY2UgaXMgZGVsZXRlZCAoRGVsZXRpb25Qb2xpY3k9UmV0YWluKScsICgpID0+IHtcbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHsgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfSxcbiAgICAgIEJ1Y2tldFBvbGljeVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlMzOjpCdWNrZXRQb2xpY3knLFxuICAgICAgICBEZWxldGlvblBvbGljeTogJ1JldGFpbicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBQb2xpY3lEb2N1bWVudDogUE9MSUNZX0RPQ1VNRU5ULFxuICAgICAgICAgIEJ1Y2tldDogeyBSZWY6ICdCdWNrZXRSZXNvdXJjZScgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczogeyBCdWNrZXRSZXNvdXJjZTogeyBUeXBlOiAnQVdTOjpTMzo6QnVja2V0JyB9IH1cbiAgfTtcblxuICBjb25zdCBkaWZmZXJlbmNlcyA9IGRpZmZUZW1wbGF0ZShjdXJyZW50VGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLmRpZmZlcmVuY2VDb3VudCkudG9CZSgxKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2VzLnJlc291cmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBkaWZmZXJlbmNlcy5yZXNvdXJjZXMuY2hhbmdlcy5CdWNrZXRQb2xpY3lSZXNvdXJjZTtcbiAgZXhwZWN0KGRpZmZlcmVuY2UpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5pc1JlbW92YWwpLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/Lm9sZFJlc291cmNlVHlwZSkudG9FcXVhbCgnQVdTOjpTMzo6QnVja2V0UG9saWN5Jyk7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5jaGFuZ2VJbXBhY3QpLnRvQmUoUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU4pO1xufSk7XG5cbnRlc3QoJ3doZW4gYSBwcm9wZXJ0eSBjaGFuZ2VzJywgKCkgPT4ge1xuICBjb25zdCBidWNrZXROYW1lID0gJ1NoaW5leUJ1Y2tldE5hbWUnO1xuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3QnVja2V0TmFtZSA9IGAke2J1Y2tldE5hbWV9LXYyYDtcbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBuZXdCdWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ub2xkUmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LnByb3BlcnR5VXBkYXRlcykudG9FcXVhbCh7XG4gICAgQnVja2V0TmFtZTogeyBvbGRWYWx1ZTogYnVja2V0TmFtZSwgbmV3VmFsdWU6IG5ld0J1Y2tldE5hbWUsIGNoYW5nZUltcGFjdDogUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFLCBpc0RpZmZlcmVudDogdHJ1ZSB9XG4gIH0pO1xufSk7XG5cbnRlc3QoJ2NoYW5nZSBpbiBkZXBlbmRlbmNpZXMgY291bnRzIGFzIGEgc2ltcGxlIHVwZGF0ZScsICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIERlcGVuZHNPbjogWydTb21lUmVzb3VyY2UnXVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIERlcGVuZHNPbjogWydTb21lUmVzb3VyY2UnLCAnU29tZU90aGVyUmVzb3VyY2UnXVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGlmZmVyZW5jZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlPy5jaGFuZ2VJbXBhY3QpLnRvQmUoUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEUpO1xufSk7XG5cbnRlc3QoJ3doZW4gYSBwcm9wZXJ0eSBpcyBkZWxldGVkJywgKCkgPT4ge1xuICBjb25zdCBidWNrZXROYW1lID0gJ1NoaW5leUJ1Y2tldE5hbWUnO1xuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCdcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ub2xkUmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LnByb3BlcnR5VXBkYXRlcykudG9FcXVhbCh7XG4gICAgQnVja2V0TmFtZTogeyBvbGRWYWx1ZTogYnVja2V0TmFtZSwgbmV3VmFsdWU6IHVuZGVmaW5lZCwgY2hhbmdlSW1wYWN0OiBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UsIGlzRGlmZmVyZW50OiB0cnVlIH1cbiAgfSk7XG59KTtcblxudGVzdCgnd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkJywgKCkgPT4ge1xuICBjb25zdCBidWNrZXROYW1lID0gJ1NoaW5leUJ1Y2tldE5hbWUnO1xuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCdcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBRdWV1ZVJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnXG4gICAgICB9LFxuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBCdWNrZXROYW1lOiBidWNrZXROYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMSk7XG4gIGV4cGVjdChkaWZmZXJlbmNlcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW5jZXMucmVzb3VyY2VzLmNoYW5nZXMuQnVja2V0UmVzb3VyY2U7XG4gIGV4cGVjdChkaWZmZXJlbmNlKS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ub2xkUmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LnByb3BlcnR5VXBkYXRlcykudG9FcXVhbCh7XG4gICAgQnVja2V0TmFtZTogeyBvbGRWYWx1ZTogdW5kZWZpbmVkLCBuZXdWYWx1ZTogYnVja2V0TmFtZSwgY2hhbmdlSW1wYWN0OiBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UsIGlzRGlmZmVyZW50OiB0cnVlIH1cbiAgfSk7XG59KTtcblxudGVzdCgnd2hlbiBhIHJlc291cmNlIHR5cGUgY2hhbmdlZCcsICgpID0+IHtcbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0UmVzb3VyY2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6SUFNOjpQb2xpY3knLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUG9saWN5TmFtZTogJ1BvbGljeU5hbWUnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV3VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBCdWNrZXRSZXNvdXJjZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTMzo6QnVja2V0JyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEJ1Y2tldE5hbWU6ICdCdWNrZXROYW1lJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpZmZlcmVuY2VzID0gZGlmZlRlbXBsYXRlKGN1cnJlbnRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuICBleHBlY3QoZGlmZmVyZW5jZXMuZGlmZmVyZW5jZUNvdW50KS50b0JlKDEpO1xuICBleHBlY3QoZGlmZmVyZW5jZXMucmVzb3VyY2VzLmRpZmZlcmVuY2VDb3VudCkudG9CZSgxKTtcbiAgY29uc3QgZGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzLnJlc291cmNlcy5jaGFuZ2VzLkJ1Y2tldFJlc291cmNlO1xuICBleHBlY3QoZGlmZmVyZW5jZSkubm90LnRvQmUodW5kZWZpbmVkKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/Lm9sZFJlc291cmNlVHlwZSkudG9FcXVhbCgnQVdTOjpJQU06OlBvbGljeScpO1xuICBleHBlY3QoZGlmZmVyZW5jZT8ubmV3UmVzb3VyY2VUeXBlKS50b0VxdWFsKCdBV1M6OlMzOjpCdWNrZXQnKTtcbiAgZXhwZWN0KGRpZmZlcmVuY2U/LmNoYW5nZUltcGFjdCkudG9CZShSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UpO1xufSk7XG5cbnRlc3QoJ3Jlc291cmNlIHJlcGxhY2VtZW50IGlzIHRyYWNrZWQgdGhyb3VnaCByZWZlcmVuY2VzJywgKCkgPT4ge1xuICAvLyBJZiBhIHJlc291cmNlIGlzIHJlcGxhY2VkLCB0aGVuIHRoYXQgY2hhbmdlIHNob3dzIHRoYXQgcmVmZXJlbmNlcyBhcmVcbiAgLy8gZ29pbmcgdG8gY2hhbmdlLiBUaGlzIG1heSBsZWFkIHRvIHJlcGxhY2VtZW50IG9mIGRvd25zdHJlYW0gcmVzb3VyY2VzXG4gIC8vIGlmIHRoZSByZWZlcmVuY2UgaXMgdXNlZCBpbiBhbiBpbW11dGFibGUgcHJvcGVydHksIGFuZCBzbyBvbi5cblxuICAvLyBHSVZFTlxuICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBCdWNrZXQ6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICAgIFByb3BlcnRpZXM6IHsgQnVja2V0TmFtZTogJ05hbWUxJywgfSwgLy8gSW1tdXRhYmxlIHByb3BcbiAgICAgIH0sXG4gICAgICBRdWV1ZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTUVM6OlF1ZXVlJyxcbiAgICAgICAgUHJvcGVydGllczogeyBRdWV1ZU5hbWU6IHsgUmVmOiAnQnVja2V0JyB9fSwgLy8gSW1tdXRhYmxlIHByb3BcbiAgICAgIH0sXG4gICAgICBUb3BpYzoge1xuICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgUHJvcGVydGllczogeyBUb3BpY05hbWU6IHsgUmVmOiAnUXVldWUnIH19LCAvLyBJbW11dGFibGUgcHJvcFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IG5ld1RlbXBsYXRlID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0OiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlMzOjpCdWNrZXQnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7IEJ1Y2tldE5hbWU6ICdOYW1lMicsIH0sXG4gICAgICB9LFxuICAgICAgUXVldWU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U1FTOjpRdWV1ZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHsgUXVldWVOYW1lOiB7IFJlZjogJ0J1Y2tldCcgfX0sXG4gICAgICB9LFxuICAgICAgVG9waWM6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgIFByb3BlcnRpZXM6IHsgVG9waWNOYW1lOiB7IFJlZjogJ1F1ZXVlJyB9fSxcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGRpZmZlcmVuY2VzID0gZGlmZlRlbXBsYXRlKGN1cnJlbnRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRpZmZlcmVuY2VzLnJlc291cmNlcy5kaWZmZXJlbmNlQ291bnQpLnRvQmUoMyk7XG59KTtcbiJdfQ==
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc