@aws-cdk/toolkit-lib 1.11.0 → 1.12.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/db.json.gz +0 -0
- package/lib/api/aws-auth/sdk.d.ts +4 -1
- package/lib/api/aws-auth/sdk.js +10 -1
- package/lib/api/bootstrap/bootstrap-template.yaml +3 -2
- package/lib/api/deployments/cfn-api.d.ts +5 -1
- package/lib/api/deployments/cfn-api.js +10 -2
- package/lib/api/deployments/deploy-stack.js +7 -1
- package/lib/api/deployments/early-validation.d.ts +17 -0
- package/lib/api/deployments/early-validation.js +53 -0
- package/lib/api/refactoring/index.d.ts +1 -1
- package/lib/api/refactoring/index.js +31 -22
- package/package.json +11 -11
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EarlyValidationReporter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A ValidationReporter that checks for early validation errors right after
|
|
6
|
+
* creating the change set. If any are found, it throws an error listing all validation failures.
|
|
7
|
+
* If the DescribeEvents API call fails (for example, due to insufficient permissions),
|
|
8
|
+
* it logs a warning instead.
|
|
9
|
+
*/
|
|
10
|
+
class EarlyValidationReporter {
|
|
11
|
+
sdk;
|
|
12
|
+
envResources;
|
|
13
|
+
constructor(sdk, envResources) {
|
|
14
|
+
this.sdk = sdk;
|
|
15
|
+
this.envResources = envResources;
|
|
16
|
+
}
|
|
17
|
+
async fetchDetails(changeSetName, stackName) {
|
|
18
|
+
let operationEvents = [];
|
|
19
|
+
try {
|
|
20
|
+
operationEvents = await this.getFailedEvents(stackName, changeSetName);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
let currentVersion = undefined;
|
|
24
|
+
try {
|
|
25
|
+
currentVersion = (await this.envResources.lookupToolkit()).version;
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
}
|
|
29
|
+
return `The template cannot be deployed because of early validation errors, but retrieving more details about those
|
|
30
|
+
errors failed (${error}). Make sure you have permissions to call the DescribeEvents API, or re-bootstrap
|
|
31
|
+
your environment with the latest version of the CLI (need at least version 30, current version ${currentVersion ?? 'unknown'}).`;
|
|
32
|
+
}
|
|
33
|
+
let message = `ChangeSet '${changeSetName}' on stack '${stackName}' failed early validation`;
|
|
34
|
+
if (operationEvents.length > 0) {
|
|
35
|
+
const failures = operationEvents
|
|
36
|
+
.map((event) => ` - ${event.ValidationStatusReason} (at ${event.ValidationPath})`)
|
|
37
|
+
.join('\n');
|
|
38
|
+
message += `:\n${failures}\n`;
|
|
39
|
+
}
|
|
40
|
+
return message;
|
|
41
|
+
}
|
|
42
|
+
async getFailedEvents(stackName, changeSetName) {
|
|
43
|
+
return this.sdk.cloudFormation().paginatedDescribeEvents({
|
|
44
|
+
StackName: stackName,
|
|
45
|
+
ChangeSetName: changeSetName,
|
|
46
|
+
Filters: {
|
|
47
|
+
FailedEvents: true,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.EarlyValidationReporter = EarlyValidationReporter;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFybHktdmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVhcmx5LXZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0E7Ozs7O0dBS0c7QUFDSCxNQUFhLHVCQUF1QjtJQUNMO0lBQTJCO0lBQXhELFlBQTZCLEdBQVEsRUFBbUIsWUFBa0M7UUFBN0QsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUFtQixpQkFBWSxHQUFaLFlBQVksQ0FBc0I7SUFDMUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBcUIsRUFBRSxTQUFpQjtRQUNoRSxJQUFJLGVBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQztZQUNILGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxjQUFjLEdBQXVCLFNBQVMsQ0FBQztZQUNuRCxJQUFJLENBQUM7Z0JBQ0gsY0FBYyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3JFLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQztZQUVELE9BQU87aUJBQ0ksS0FBSztpR0FDMkUsY0FBYyxJQUFJLFNBQVMsSUFBSSxDQUFDO1FBQzdILENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxjQUFjLGFBQWEsZUFBZSxTQUFTLDJCQUEyQixDQUFDO1FBQzdGLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLFFBQVEsR0FBRyxlQUFlO2lCQUM3QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLHNCQUFzQixRQUFRLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQztpQkFDbEYsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWQsT0FBTyxJQUFJLE1BQU0sUUFBUSxJQUFJLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsYUFBcUI7UUFDcEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLHVCQUF1QixDQUFDO1lBQ3ZELFNBQVMsRUFBRSxTQUFTO1lBQ3BCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLE9BQU8sRUFBRTtnQkFDUCxZQUFZLEVBQUUsSUFBSTthQUNuQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhDRCwwREF3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9wZXJhdGlvbkV2ZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvblJlcG9ydGVyIH0gZnJvbSAnLi9jZm4tYXBpJztcbmltcG9ydCB0eXBlIHsgU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgvc2RrJztcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRSZXNvdXJjZXMgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5cbi8qKlxuICogQSBWYWxpZGF0aW9uUmVwb3J0ZXIgdGhhdCBjaGVja3MgZm9yIGVhcmx5IHZhbGlkYXRpb24gZXJyb3JzIHJpZ2h0IGFmdGVyXG4gKiBjcmVhdGluZyB0aGUgY2hhbmdlIHNldC4gSWYgYW55IGFyZSBmb3VuZCwgaXQgdGhyb3dzIGFuIGVycm9yIGxpc3RpbmcgYWxsIHZhbGlkYXRpb24gZmFpbHVyZXMuXG4gKiBJZiB0aGUgRGVzY3JpYmVFdmVudHMgQVBJIGNhbGwgZmFpbHMgKGZvciBleGFtcGxlLCBkdWUgdG8gaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zKSxcbiAqIGl0IGxvZ3MgYSB3YXJuaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFYXJseVZhbGlkYXRpb25SZXBvcnRlciBpbXBsZW1lbnRzIFZhbGlkYXRpb25SZXBvcnRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2RrOiBTREssIHByaXZhdGUgcmVhZG9ubHkgZW52UmVzb3VyY2VzOiBFbnZpcm9ubWVudFJlc291cmNlcykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoRGV0YWlscyhjaGFuZ2VTZXROYW1lOiBzdHJpbmcsIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgb3BlcmF0aW9uRXZlbnRzOiBPcGVyYXRpb25FdmVudFtdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIG9wZXJhdGlvbkV2ZW50cyA9IGF3YWl0IHRoaXMuZ2V0RmFpbGVkRXZlbnRzKHN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxldCBjdXJyZW50VmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudFZlcnNpb24gPSAoYXdhaXQgdGhpcy5lbnZSZXNvdXJjZXMubG9va3VwVG9vbGtpdCgpKS52ZXJzaW9uO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYFRoZSB0ZW1wbGF0ZSBjYW5ub3QgYmUgZGVwbG95ZWQgYmVjYXVzZSBvZiBlYXJseSB2YWxpZGF0aW9uIGVycm9ycywgYnV0IHJldHJpZXZpbmcgbW9yZSBkZXRhaWxzIGFib3V0IHRob3NlXG5lcnJvcnMgZmFpbGVkICgke2Vycm9yfSkuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBwZXJtaXNzaW9ucyB0byBjYWxsIHRoZSBEZXNjcmliZUV2ZW50cyBBUEksIG9yIHJlLWJvb3RzdHJhcFxueW91ciBlbnZpcm9ubWVudCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ0xJIChuZWVkIGF0IGxlYXN0IHZlcnNpb24gMzAsIGN1cnJlbnQgdmVyc2lvbiAke2N1cnJlbnRWZXJzaW9uID8/ICd1bmtub3duJ30pLmA7XG4gICAgfVxuXG4gICAgbGV0IG1lc3NhZ2UgPSBgQ2hhbmdlU2V0ICcke2NoYW5nZVNldE5hbWV9JyBvbiBzdGFjayAnJHtzdGFja05hbWV9JyBmYWlsZWQgZWFybHkgdmFsaWRhdGlvbmA7XG4gICAgaWYgKG9wZXJhdGlvbkV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmYWlsdXJlcyA9IG9wZXJhdGlvbkV2ZW50c1xuICAgICAgICAubWFwKChldmVudCkgPT4gYCAgLSAke2V2ZW50LlZhbGlkYXRpb25TdGF0dXNSZWFzb259IChhdCAke2V2ZW50LlZhbGlkYXRpb25QYXRofSlgKVxuICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgIG1lc3NhZ2UgKz0gYDpcXG4ke2ZhaWx1cmVzfVxcbmA7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRGYWlsZWRFdmVudHMoc3RhY2tOYW1lOiBzdHJpbmcsIGNoYW5nZVNldE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNkay5jbG91ZEZvcm1hdGlvbigpLnBhZ2luYXRlZERlc2NyaWJlRXZlbnRzKHtcbiAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgICAgIEZpbHRlcnM6IHtcbiAgICAgICAgRmFpbGVkRXZlbnRzOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -17,7 +17,7 @@ interface StackGroup {
|
|
|
17
17
|
deployedStacks: CloudFormationStack[];
|
|
18
18
|
}
|
|
19
19
|
export declare function usePrescribedMappings(mappingGroups: MappingGroup[], sdkProvider: SdkProvider): Promise<ResourceMapping[]>;
|
|
20
|
-
export declare function
|
|
20
|
+
export declare function getDeployedStacksByNames(sdkProvider: SdkProvider, environment: cxapi.Environment, stackNames: string[]): Promise<CloudFormationStack[]>;
|
|
21
21
|
export declare function formatEnvironmentSectionHeader(environment: cxapi.Environment): string;
|
|
22
22
|
export declare function formatTypedMappings(mappings: TypedMapping[]): string;
|
|
23
23
|
export declare function formatAmbiguousMappings(paths: [string[], string[]][]): string;
|
|
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.usePrescribedMappings = usePrescribedMappings;
|
|
18
|
-
exports.
|
|
18
|
+
exports.getDeployedStacksByNames = getDeployedStacksByNames;
|
|
19
19
|
exports.formatEnvironmentSectionHeader = formatEnvironmentSectionHeader;
|
|
20
20
|
exports.formatTypedMappings = formatTypedMappings;
|
|
21
21
|
exports.formatAmbiguousMappings = formatAmbiguousMappings;
|
|
@@ -33,9 +33,11 @@ __exportStar(require("./context"), exports);
|
|
|
33
33
|
async function usePrescribedMappings(mappingGroups, sdkProvider) {
|
|
34
34
|
const stackGroups = [];
|
|
35
35
|
for (const group of mappingGroups) {
|
|
36
|
+
const summaries = await listStacks(sdkProvider, environmentOf(group));
|
|
37
|
+
const stacks = await getDeployedStacksByNames(sdkProvider, environmentOf(group), summaries.map(s => s.StackName));
|
|
36
38
|
stackGroups.push({
|
|
37
39
|
...group,
|
|
38
|
-
stacks
|
|
40
|
+
stacks,
|
|
39
41
|
});
|
|
40
42
|
}
|
|
41
43
|
// Validate that there are no duplicate destinations
|
|
@@ -89,29 +91,32 @@ async function usePrescribedMappings(mappingGroups, sdkProvider) {
|
|
|
89
91
|
}, logicalId);
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
|
-
async function
|
|
94
|
+
async function getDeployedStacksByNames(sdkProvider, environment, stackNames) {
|
|
93
95
|
const cfn = (await sdkProvider.forEnvironment(environment, plugin_1.Mode.ForReading)).sdk.cloudFormation();
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
'CREATE_COMPLETE',
|
|
97
|
-
'UPDATE_COMPLETE',
|
|
98
|
-
'UPDATE_ROLLBACK_COMPLETE',
|
|
99
|
-
'IMPORT_COMPLETE',
|
|
100
|
-
'ROLLBACK_COMPLETE',
|
|
101
|
-
],
|
|
102
|
-
});
|
|
103
|
-
const normalize = async (summary) => {
|
|
104
|
-
const templateCommandOutput = await cfn.getTemplate({ StackName: summary.StackName });
|
|
96
|
+
const normalize = async (stackName) => {
|
|
97
|
+
const templateCommandOutput = await cfn.getTemplate({ StackName: stackName });
|
|
105
98
|
const template = (0, util_1.deserializeStructure)(templateCommandOutput.TemplateBody ?? '{}');
|
|
106
99
|
return {
|
|
107
100
|
environment,
|
|
108
|
-
stackName:
|
|
101
|
+
stackName: stackName,
|
|
109
102
|
template,
|
|
110
103
|
};
|
|
111
104
|
};
|
|
112
105
|
const limit = (0, concurrency_1.pLimit)(20);
|
|
113
106
|
// eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
|
|
114
|
-
return Promise.all(
|
|
107
|
+
return Promise.all(stackNames.map(s => limit(() => normalize(s))));
|
|
108
|
+
}
|
|
109
|
+
async function listStacks(sdkProvider, environment) {
|
|
110
|
+
const cfn = (await sdkProvider.forEnvironment(environment, plugin_1.Mode.ForReading)).sdk.cloudFormation();
|
|
111
|
+
return cfn.paginatedListStacks({
|
|
112
|
+
StackStatusFilter: [
|
|
113
|
+
'CREATE_COMPLETE',
|
|
114
|
+
'UPDATE_COMPLETE',
|
|
115
|
+
'UPDATE_ROLLBACK_COMPLETE',
|
|
116
|
+
'IMPORT_COMPLETE',
|
|
117
|
+
'ROLLBACK_COMPLETE',
|
|
118
|
+
],
|
|
119
|
+
});
|
|
115
120
|
}
|
|
116
121
|
function formatEnvironmentSectionHeader(environment) {
|
|
117
122
|
const env = `aws://${environment.account}/${environment.region}`;
|
|
@@ -141,17 +146,21 @@ async function groupStacks(sdkProvider, localStacks, additionalStackNames) {
|
|
|
141
146
|
const localByEnvironment = await (0, util_1.indexBy)(localStacks, async (s) => (0, digest_1.hashObject)(await sdkProvider.resolveEnvironment(s.environment)));
|
|
142
147
|
const groups = [];
|
|
143
148
|
for (let key of localByEnvironment.keys()) {
|
|
144
|
-
const environment = environments.get(key);
|
|
145
|
-
const allDeployedStacks = await getDeployedStacks(sdkProvider, environment);
|
|
146
149
|
const local = localByEnvironment.get(key);
|
|
147
|
-
const hasLocalCounterpart = (
|
|
148
|
-
const wasExplicitlyProvided = (
|
|
150
|
+
const hasLocalCounterpart = (stackName) => local.some((l) => l.stackName === stackName);
|
|
151
|
+
const wasExplicitlyProvided = (stackName) => additionalStackNames.includes(stackName);
|
|
152
|
+
const environment = environments.get(key);
|
|
153
|
+
const stackSummaries = await listStacks(sdkProvider, environment);
|
|
154
|
+
const stackNames = stackSummaries
|
|
155
|
+
.map(s => s.StackName)
|
|
156
|
+
.filter(s => hasLocalCounterpart(s) || wasExplicitlyProvided(s));
|
|
157
|
+
const deployedStacks = await getDeployedStacksByNames(sdkProvider, environment, stackNames);
|
|
149
158
|
groups.push({
|
|
150
159
|
environment,
|
|
151
|
-
deployedStacks
|
|
160
|
+
deployedStacks,
|
|
152
161
|
localStacks: local,
|
|
153
162
|
});
|
|
154
163
|
}
|
|
155
164
|
return groups;
|
|
156
165
|
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBLHNEQXFGQztBQUVELDhDQThCQztBQUVELHdFQUdDO0FBRUQsa0RBRUM7QUFFRCwwREFFQztBQVdELGtDQTZCQztBQTNNRCxzRUFJc0M7QUFHdEMscUNBQTJEO0FBRTNELHNDQUFpQztBQUNqQyx3Q0FBK0M7QUFFL0MscURBQXFFO0FBQ3JFLHFDQUFzQztBQUV0QywrREFBMkQ7QUFDM0Qsd0RBQWdEO0FBRWhELDRDQUEwQjtBQUMxQiw0Q0FBMEI7QUFjbkIsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxhQUE2QixFQUM3QixXQUF3QjtJQU14QixNQUFNLFdBQVcsR0FBNkIsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNmLEdBQUcsS0FBSztZQUNSLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxLQUFLLElBQUksS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFdkMsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksNEJBQVksQ0FDcEIsbUNBQW1DLFdBQVcsb0JBQW9CLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUNsRyxDQUFDO1lBQ0osQ0FBQztZQUNELFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQ3JDLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSw0QkFBWSxDQUFDLG9CQUFvQixNQUFNLG1DQUFtQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZILENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSw0QkFBWSxDQUNwQix5QkFBeUIsV0FBVyxtQ0FBbUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQ3ZHLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxnQ0FBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7SUFFZCxTQUFTLEtBQUssQ0FBQyxRQUFnQixFQUFFLE1BQTZCO1FBQzVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSw0QkFBWSxDQUFDLHFCQUFxQixRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN4RSxDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsS0FBbUI7UUFDeEMsT0FBTztZQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsWUFBWSxDQUNuQixHQUFXLEVBQ1gsV0FBOEIsRUFDOUIsU0FBZ0MsRUFBRTtRQUVsQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUU1RCxPQUFPLElBQUksaUNBQWdCLENBQ3pCO1lBQ0UsU0FBUztZQUNULFdBQVc7WUFDWCxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFO1NBQ2hDLEVBQ0QsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsV0FBd0IsRUFDeEIsV0FBOEI7SUFFOUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGFBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUVsRyxNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUM5QyxpQkFBaUIsRUFBRTtZQUNqQixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLDBCQUEwQjtZQUMxQixpQkFBaUI7WUFDakIsbUJBQW1CO1NBQ3BCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQXFCLEVBQUUsRUFBRTtRQUNoRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBVSxFQUFFLENBQUMsQ0FBQztRQUN2RixNQUFNLFFBQVEsR0FBRyxJQUFBLDJCQUFvQixFQUFDLHFCQUFxQixDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNsRixPQUFPO1lBQ0wsV0FBVztZQUNYLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBVTtZQUM3QixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQU0sRUFBQyxFQUFFLENBQUMsQ0FBQztJQUV6Qix3RUFBd0U7SUFDeEUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFnQiw4QkFBOEIsQ0FBQyxXQUE4QjtJQUMzRSxNQUFNLEdBQUcsR0FBRyxTQUFTLFdBQVcsQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pFLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBQSxvREFBMkIsRUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsUUFBd0I7SUFDMUQsT0FBTyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUEseUNBQWdCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLEtBQTZCO0lBQ25FLE9BQU8sY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFBLDZDQUFvQixFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxFQUEyQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFpQixFQUFFLENBQUM7SUFDdkMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ1gsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFdBQVcsQ0FBQyxXQUF3QixFQUFFLFdBQWtDLEVBQUUsb0JBQThCO0lBQzVILE1BQU0sWUFBWSxHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRS9ELEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sR0FBRyxHQUFHLElBQUEsbUJBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUEsY0FBTyxFQUFDLFdBQVcsRUFDbEQsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxtQkFBVSxFQUFDLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUM3RSxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUNoQyxLQUFLLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUMzQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0saUJBQWlCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUMzQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBc0IsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkcsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQXNCLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLFdBQVc7WUFDWCxjQUFjLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUkscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakcsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR5cGVkTWFwcGluZyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHtcbiAgZm9ybWF0QW1iaWd1b3VzTWFwcGluZ3MgYXMgZm10QW1iaWd1b3VzTWFwcGluZ3MsXG4gIGZvcm1hdEVudmlyb25tZW50U2VjdGlvbkhlYWRlciBhcyBmbXRFbnZpcm9ubWVudFNlY3Rpb25IZWFkZXIsXG4gIGZvcm1hdFR5cGVkTWFwcGluZ3MgYXMgZm10VHlwZWRNYXBwaW5ncyxcbn0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrU3VtbWFyeSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBkZXNlcmlhbGl6ZVN0cnVjdHVyZSwgaW5kZXhCeSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL3BsdWdpbic7XG5pbXBvcnQgeyBTdHJpbmdXcml0ZVN0cmVhbSB9IGZyb20gJy4uL3N0cmVhbXMnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvblN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2F0aW9uLCBSZXNvdXJjZU1hcHBpbmcgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICcuL2RpZ2VzdCc7XG5pbXBvcnQgdHlwZSB7IE1hcHBpbmdHcm91cCB9IGZyb20gJy4uLy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IHBMaW1pdCB9IGZyb20gJy4uLy4uL3V0aWwvY29uY3VycmVuY3knO1xuXG5leHBvcnQgKiBmcm9tICcuL2V4Y2x1ZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0JztcblxuaW50ZXJmYWNlIFN0YWNrR3JvdXAge1xuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG59XG5cbmludGVyZmFjZSBTdGFja0dyb3VwIHtcbiAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xuICBsb2NhbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xuICBkZXBsb3llZFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXNlUHJlc2NyaWJlZE1hcHBpbmdzKFxuICBtYXBwaW5nR3JvdXBzOiBNYXBwaW5nR3JvdXBbXSxcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuKTogUHJvbWlzZTxSZXNvdXJjZU1hcHBpbmdbXT4ge1xuICBpbnRlcmZhY2UgTWFwcGluZ0dyb3VwV2l0aFN0YWNrcyBleHRlbmRzIE1hcHBpbmdHcm91cCB7XG4gICAgc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIH1cblxuICBjb25zdCBzdGFja0dyb3VwczogTWFwcGluZ0dyb3VwV2l0aFN0YWNrc1tdID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXAgb2YgbWFwcGluZ0dyb3Vwcykge1xuICAgIHN0YWNrR3JvdXBzLnB1c2goe1xuICAgICAgLi4uZ3JvdXAsXG4gICAgICBzdGFja3M6IGF3YWl0IGdldERlcGxveWVkU3RhY2tzKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudE9mKGdyb3VwKSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGF0IHRoZXJlIGFyZSBubyBkdXBsaWNhdGUgZGVzdGluYXRpb25zXG4gIGZvciAobGV0IGdyb3VwIG9mIHN0YWNrR3JvdXBzKSB7XG4gICAgY29uc3QgZGVzdGluYXRpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGRlc3RpbmF0aW9uIG9mIE9iamVjdC52YWx1ZXMoZ3JvdXAucmVzb3VyY2VzKSkge1xuICAgICAgaWYgKGRlc3RpbmF0aW9ucy5oYXMoZGVzdGluYXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICAgYER1cGxpY2F0ZSBkZXN0aW5hdGlvbiByZXNvdXJjZSAnJHtkZXN0aW5hdGlvbn0nIGluIGVudmlyb25tZW50ICR7Z3JvdXAuYWNjb3VudH0vJHtncm91cC5yZWdpb259YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlc3RpbmF0aW9ucy5hZGQoZGVzdGluYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVzb3VyY2VNYXBwaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBncm91cCBvZiBzdGFja0dyb3Vwcykge1xuICAgIGZvciAoY29uc3QgW3NvdXJjZSwgZGVzdGluYXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwLnJlc291cmNlcykpIHtcbiAgICAgIGlmICghaW5Vc2Uoc291cmNlLCBncm91cC5zdGFja3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFNvdXJjZSByZXNvdXJjZSAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBpbiBlbnZpcm9ubWVudCAke2dyb3VwLmFjY291bnR9LyR7Z3JvdXAucmVnaW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5Vc2UoZGVzdGluYXRpb24sIGdyb3VwLnN0YWNrcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgICBgRGVzdGluYXRpb24gcmVzb3VyY2UgJyR7ZGVzdGluYXRpb259JyBhbHJlYWR5IGluIHVzZSBpbiBlbnZpcm9ubWVudCAke2dyb3VwLmFjY291bnR9LyR7Z3JvdXAucmVnaW9ufWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gZW52aXJvbm1lbnRPZihncm91cCk7XG4gICAgICBjb25zdCBzcmMgPSBtYWtlTG9jYXRpb24oc291cmNlLCBlbnZpcm9ubWVudCwgZ3JvdXAuc3RhY2tzKTtcbiAgICAgIGNvbnN0IGRzdCA9IG1ha2VMb2NhdGlvbihkZXN0aW5hdGlvbiwgZW52aXJvbm1lbnQpO1xuICAgICAgcmVzdWx0LnB1c2gobmV3IFJlc291cmNlTWFwcGluZyhzcmMsIGRzdCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIGZ1bmN0aW9uIGluVXNlKGxvY2F0aW9uOiBzdHJpbmcsIHN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3N0YWNrTmFtZSwgbG9naWNhbElkXSA9IGxvY2F0aW9uLnNwbGl0KCcuJyk7XG4gICAgaWYgKHN0YWNrTmFtZSA9PSBudWxsIHx8IGxvZ2ljYWxJZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBJbnZhbGlkIGxvY2F0aW9uICcke2xvY2F0aW9ufSdgKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZmluZCgocykgPT4gcy5zdGFja05hbWUgPT09IHN0YWNrTmFtZSk7XG4gICAgcmV0dXJuIHN0YWNrICE9IG51bGwgJiYgc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzPy5bbG9naWNhbElkXSAhPSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZW52aXJvbm1lbnRPZihncm91cDogTWFwcGluZ0dyb3VwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnQ6IGdyb3VwLmFjY291bnQsXG4gICAgICByZWdpb246IGdyb3VwLnJlZ2lvbixcbiAgICAgIG5hbWU6ICcnLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlTG9jYXRpb24oXG4gICAgbG9jOiBzdHJpbmcsXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdID0gW10sXG4gICk6IFJlc291cmNlTG9jYXRpb24ge1xuICAgIGNvbnN0IFtzdGFja05hbWUsIGxvZ2ljYWxJZF0gPSBsb2Muc3BsaXQoJy4nKTtcbiAgICBjb25zdCBzdGFjayA9IHN0YWNrcy5maW5kKChzKSA9PiBzLnN0YWNrTmFtZSA9PT0gc3RhY2tOYW1lKTtcblxuICAgIHJldHVybiBuZXcgUmVzb3VyY2VMb2NhdGlvbihcbiAgICAgIHtcbiAgICAgICAgc3RhY2tOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgdGVtcGxhdGU6IHN0YWNrPy50ZW1wbGF0ZSA/PyB7fSxcbiAgICAgIH0sXG4gICAgICBsb2dpY2FsSWQsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVwbG95ZWRTdGFja3MoXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrW10+IHtcbiAgY29uc3QgY2ZuID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KGVudmlyb25tZW50LCBNb2RlLkZvclJlYWRpbmcpKS5zZGsuY2xvdWRGb3JtYXRpb24oKTtcblxuICBjb25zdCBzdW1tYXJpZXMgPSBhd2FpdCBjZm4ucGFnaW5hdGVkTGlzdFN0YWNrcyh7XG4gICAgU3RhY2tTdGF0dXNGaWx0ZXI6IFtcbiAgICAgICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgJ1VQREFURV9DT01QTEVURScsXG4gICAgICAnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyxcbiAgICAgICdJTVBPUlRfQ09NUExFVEUnLFxuICAgICAgJ1JPTExCQUNLX0NPTVBMRVRFJyxcbiAgICBdLFxuICB9KTtcblxuICBjb25zdCBub3JtYWxpemUgPSBhc3luYyAoc3VtbWFyeTogU3RhY2tTdW1tYXJ5KSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVDb21tYW5kT3V0cHV0ID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlKHsgU3RhY2tOYW1lOiBzdW1tYXJ5LlN0YWNrTmFtZSEgfSk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkZXNlcmlhbGl6ZVN0cnVjdHVyZSh0ZW1wbGF0ZUNvbW1hbmRPdXRwdXQuVGVtcGxhdGVCb2R5ID8/ICd7fScpO1xuICAgIHJldHVybiB7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIHN0YWNrTmFtZTogc3VtbWFyeS5TdGFja05hbWUhLFxuICAgICAgdGVtcGxhdGUsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBsaW1pdCA9IHBMaW1pdCgyMCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gIHJldHVybiBQcm9taXNlLmFsbChzdW1tYXJpZXMubWFwKHMgPT4gbGltaXQoKCkgPT4gbm9ybWFsaXplKHMpKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RW52aXJvbm1lbnRTZWN0aW9uSGVhZGVyKGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCkge1xuICBjb25zdCBlbnYgPSBgYXdzOi8vJHtlbnZpcm9ubWVudC5hY2NvdW50fS8ke2Vudmlyb25tZW50LnJlZ2lvbn1gO1xuICByZXR1cm4gZm9ybWF0VG9TdHJlYW0oc3RyZWFtID0+IGZtdEVudmlyb25tZW50U2VjdGlvbkhlYWRlcihzdHJlYW0sIGVudikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VHlwZWRNYXBwaW5ncyhtYXBwaW5nczogVHlwZWRNYXBwaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gZm9ybWF0VG9TdHJlYW0oKHN0cmVhbSkgPT4gZm10VHlwZWRNYXBwaW5ncyhzdHJlYW0sIG1hcHBpbmdzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBbWJpZ3VvdXNNYXBwaW5ncyhwYXRoczogW3N0cmluZ1tdLCBzdHJpbmdbXV1bXSk6IHN0cmluZyB7XG4gIHJldHVybiBmb3JtYXRUb1N0cmVhbSgoc3RyZWFtKSA9PiBmbXRBbWJpZ3VvdXNNYXBwaW5ncyhzdHJlYW0sIHBhdGhzKSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRvU3RyZWFtKGNiOiAoc3RyZWFtOiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pID0+IHZvaWQpOiBzdHJpbmcge1xuICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyaW5nV3JpdGVTdHJlYW0oKTtcbiAgY2Ioc3RyZWFtKTtcbiAgcmV0dXJuIHN0cmVhbS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIHN0YWNrIGdyb3VwcywgZWFjaCBjb250YWluaW5nIHRoZSBsb2NhbCBzdGFja3MgYW5kIHRoZSBkZXBsb3llZCBzdGFja3MgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncm91cFN0YWNrcyhzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sIGFkZGl0aW9uYWxTdGFja05hbWVzOiBzdHJpbmdbXSkge1xuICBjb25zdCBlbnZpcm9ubWVudHM6IE1hcDxzdHJpbmcsIGN4YXBpLkVudmlyb25tZW50PiA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IHN0YWNrIG9mIGxvY2FsU3RhY2tzKSB7XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2suZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IGtleSA9IGhhc2hPYmplY3QoZW52aXJvbm1lbnQpO1xuICAgIGVudmlyb25tZW50cy5zZXQoa2V5LCBlbnZpcm9ubWVudCk7XG4gIH1cblxuICBjb25zdCBsb2NhbEJ5RW52aXJvbm1lbnQgPSBhd2FpdCBpbmRleEJ5KGxvY2FsU3RhY2tzLFxuICAgIGFzeW5jIChzKSA9PiBoYXNoT2JqZWN0KGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzLmVudmlyb25tZW50KSksXG4gICk7XG5cbiAgY29uc3QgZ3JvdXBzOiBTdGFja0dyb3VwW10gPSBbXTtcbiAgZm9yIChsZXQga2V5IG9mIGxvY2FsQnlFbnZpcm9ubWVudC5rZXlzKCkpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50cy5nZXQoa2V5KSE7XG4gICAgY29uc3QgYWxsRGVwbG95ZWRTdGFja3MgPSBhd2FpdCBnZXREZXBsb3llZFN0YWNrcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IGxvY2FsID0gbG9jYWxCeUVudmlyb25tZW50LmdldChrZXkpITtcbiAgICBjb25zdCBoYXNMb2NhbENvdW50ZXJwYXJ0ID0gKHM6IENsb3VkRm9ybWF0aW9uU3RhY2spID0+IGxvY2FsLnNvbWUoKGwpID0+IGwuc3RhY2tOYW1lID09PSBzLnN0YWNrTmFtZSk7XG4gICAgY29uc3Qgd2FzRXhwbGljaXRseVByb3ZpZGVkID0gKHM6IENsb3VkRm9ybWF0aW9uU3RhY2spID0+IGFkZGl0aW9uYWxTdGFja05hbWVzLmluY2x1ZGVzKHMuc3RhY2tOYW1lKTtcblxuICAgIGdyb3Vwcy5wdXNoKHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgZGVwbG95ZWRTdGFja3M6IGFsbERlcGxveWVkU3RhY2tzLmZpbHRlcihzID0+IGhhc0xvY2FsQ291bnRlcnBhcnQocykgfHwgd2FzRXhwbGljaXRseVByb3ZpZGVkKHMpKSxcbiAgICAgIGxvY2FsU3RhY2tzOiBsb2NhbCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBncm91cHM7XG59XG4iXX0=
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBLHNEQXVGQztBQUVELDREQXFCQztBQW1CRCx3RUFHQztBQUVELGtEQUVDO0FBRUQsMERBRUM7QUFXRCxrQ0FrQ0M7QUExTkQsc0VBSXNDO0FBR3RDLHFDQUEyRDtBQUUzRCxzQ0FBaUM7QUFDakMsd0NBQStDO0FBRS9DLHFEQUFxRTtBQUNyRSxxQ0FBc0M7QUFFdEMsK0RBQTJEO0FBQzNELHdEQUFnRDtBQUVoRCw0Q0FBMEI7QUFDMUIsNENBQTBCO0FBY25CLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsYUFBNkIsRUFDN0IsV0FBd0I7SUFNeEIsTUFBTSxXQUFXLEdBQTZCLEVBQUUsQ0FBQztJQUNqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0sVUFBVSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLE1BQU0sR0FBRyxNQUFNLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25ILFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDZixHQUFHLEtBQUs7WUFDUixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxLQUFLLElBQUksS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFdkMsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3pE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QUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLGNBQWM7YUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVUsQ0FBQzthQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sY0FBYyxHQUFHLE1BQU0sd0JBQXdCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUU1RixNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsV0FBVztZQUNYLGNBQWM7WUFDZCxXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHlwZWRNYXBwaW5nIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQge1xuICBmb3JtYXRBbWJpZ3VvdXNNYXBwaW5ncyBhcyBmbXRBbWJpZ3VvdXNNYXBwaW5ncyxcbiAgZm9ybWF0RW52aXJvbm1lbnRTZWN0aW9uSGVhZGVyIGFzIGZtdEVudmlyb25tZW50U2VjdGlvbkhlYWRlcixcbiAgZm9ybWF0VHlwZWRNYXBwaW5ncyBhcyBmbXRUeXBlZE1hcHBpbmdzLFxufSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgU3RhY2tTdW1tYXJ5IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGRlc2VyaWFsaXplU3RydWN0dXJlLCBpbmRleEJ5IH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi4vcGx1Z2luJztcbmltcG9ydCB7IFN0cmluZ1dyaXRlU3RyZWFtIH0gZnJvbSAnLi4vc3RyZWFtcyc7XG5pbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFJlc291cmNlTG9jYXRpb24sIFJlc291cmNlTWFwcGluZyB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgaGFzaE9iamVjdCB9IGZyb20gJy4vZGlnZXN0JztcbmltcG9ydCB0eXBlIHsgTWFwcGluZ0dyb3VwIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgcExpbWl0IH0gZnJvbSAnLi4vLi4vdXRpbC9jb25jdXJyZW5jeSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZXhjbHVkZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQnO1xuXG5pbnRlcmZhY2UgU3RhY2tHcm91cCB7XG4gIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudDtcbiAgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbn1cblxuaW50ZXJmYWNlIFN0YWNrR3JvdXAge1xuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1c2VQcmVzY3JpYmVkTWFwcGluZ3MoXG4gIG1hcHBpbmdHcm91cHM6IE1hcHBpbmdHcm91cFtdLFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4pOiBQcm9taXNlPFJlc291cmNlTWFwcGluZ1tdPiB7XG4gIGludGVyZmFjZSBNYXBwaW5nR3JvdXBXaXRoU3RhY2tzIGV4dGVuZHMgTWFwcGluZ0dyb3VwIHtcbiAgICBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrR3JvdXBzOiBNYXBwaW5nR3JvdXBXaXRoU3RhY2tzW10gPSBbXTtcbiAgZm9yIChjb25zdCBncm91cCBvZiBtYXBwaW5nR3JvdXBzKSB7XG4gICAgY29uc3Qgc3VtbWFyaWVzID0gYXdhaXQgbGlzdFN0YWNrcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnRPZihncm91cCkpO1xuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IGdldERlcGxveWVkU3RhY2tzQnlOYW1lcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnRPZihncm91cCksIHN1bW1hcmllcy5tYXAocyA9PiBzLlN0YWNrTmFtZSEpKTtcbiAgICBzdGFja0dyb3Vwcy5wdXNoKHtcbiAgICAgIC4uLmdyb3VwLFxuICAgICAgc3RhY2tzLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGhhdCB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIGRlc3RpbmF0aW9uc1xuICBmb3IgKGxldCBncm91cCBvZiBzdGFja0dyb3Vwcykge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBkZXN0aW5hdGlvbiBvZiBPYmplY3QudmFsdWVzKGdyb3VwLnJlc291cmNlcykpIHtcbiAgICAgIGlmIChkZXN0aW5hdGlvbnMuaGFzKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgZGVzdGluYXRpb24gcmVzb3VyY2UgJyR7ZGVzdGluYXRpb259JyBpbiBlbnZpcm9ubWVudCAke2dyb3VwLmFjY291bnR9LyR7Z3JvdXAucmVnaW9ufWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZXN0aW5hdGlvbnMuYWRkKGRlc3RpbmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlc291cmNlTWFwcGluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3RhY2tHcm91cHMpIHtcbiAgICBmb3IgKGNvbnN0IFtzb3VyY2UsIGRlc3RpbmF0aW9uXSBvZiBPYmplY3QuZW50cmllcyhncm91cC5yZXNvdXJjZXMpKSB7XG4gICAgICBpZiAoIWluVXNlKHNvdXJjZSwgZ3JvdXAuc3RhY2tzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBTb3VyY2UgcmVzb3VyY2UgJyR7c291cmNlfScgZG9lcyBub3QgZXhpc3QgaW4gZW52aXJvbm1lbnQgJHtncm91cC5hY2NvdW50fS8ke2dyb3VwLnJlZ2lvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluVXNlKGRlc3RpbmF0aW9uLCBncm91cC5zdGFja3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICAgYERlc3RpbmF0aW9uIHJlc291cmNlICcke2Rlc3RpbmF0aW9ufScgYWxyZWFkeSBpbiB1c2UgaW4gZW52aXJvbm1lbnQgJHtncm91cC5hY2NvdW50fS8ke2dyb3VwLnJlZ2lvbn1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50T2YoZ3JvdXApO1xuICAgICAgY29uc3Qgc3JjID0gbWFrZUxvY2F0aW9uKHNvdXJjZSwgZW52aXJvbm1lbnQsIGdyb3VwLnN0YWNrcyk7XG4gICAgICBjb25zdCBkc3QgPSBtYWtlTG9jYXRpb24oZGVzdGluYXRpb24sIGVudmlyb25tZW50KTtcbiAgICAgIHJlc3VsdC5wdXNoKG5ldyBSZXNvdXJjZU1hcHBpbmcoc3JjLCBkc3QpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcblxuICBmdW5jdGlvbiBpblVzZShsb2NhdGlvbjogc3RyaW5nLCBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtzdGFja05hbWUsIGxvZ2ljYWxJZF0gPSBsb2NhdGlvbi5zcGxpdCgnLicpO1xuICAgIGlmIChzdGFja05hbWUgPT0gbnVsbCB8fCBsb2dpY2FsSWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgSW52YWxpZCBsb2NhdGlvbiAnJHtsb2NhdGlvbn0nYCk7XG4gICAgfVxuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzLmZpbmQoKHMpID0+IHMuc3RhY2tOYW1lID09PSBzdGFja05hbWUpO1xuICAgIHJldHVybiBzdGFjayAhPSBudWxsICYmIHN0YWNrLnRlbXBsYXRlLlJlc291cmNlcz8uW2xvZ2ljYWxJZF0gIT0gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVudmlyb25tZW50T2YoZ3JvdXA6IE1hcHBpbmdHcm91cCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50OiBncm91cC5hY2NvdW50LFxuICAgICAgcmVnaW9uOiBncm91cC5yZWdpb24sXG4gICAgICBuYW1lOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUxvY2F0aW9uKFxuICAgIGxvYzogc3RyaW5nLFxuICAgIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbiAgICBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSA9IFtdLFxuICApOiBSZXNvdXJjZUxvY2F0aW9uIHtcbiAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gbG9jLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZmluZCgocykgPT4gcy5zdGFja05hbWUgPT09IHN0YWNrTmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IFJlc291cmNlTG9jYXRpb24oXG4gICAgICB7XG4gICAgICAgIHN0YWNrTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIHRlbXBsYXRlOiBzdGFjaz8udGVtcGxhdGUgPz8ge30sXG4gICAgICB9LFxuICAgICAgbG9naWNhbElkLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlcGxveWVkU3RhY2tzQnlOYW1lcyhcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gIHN0YWNrTmFtZXM6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrW10+IHtcbiAgY29uc3QgY2ZuID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KGVudmlyb25tZW50LCBNb2RlLkZvclJlYWRpbmcpKS5zZGsuY2xvdWRGb3JtYXRpb24oKTtcblxuICBjb25zdCBub3JtYWxpemUgPSBhc3luYyAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZUNvbW1hbmRPdXRwdXQgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRlc2VyaWFsaXplU3RydWN0dXJlKHRlbXBsYXRlQ29tbWFuZE91dHB1dC5UZW1wbGF0ZUJvZHkgPz8gJ3t9Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgc3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICB0ZW1wbGF0ZSxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IGxpbWl0ID0gcExpbWl0KDIwKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgcmV0dXJuIFByb21pc2UuYWxsKHN0YWNrTmFtZXMubWFwKHMgPT4gbGltaXQoKCkgPT4gbm9ybWFsaXplKHMpKSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0U3RhY2tzKFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4gIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbik6IFByb21pc2U8U3RhY2tTdW1tYXJ5W10+IHtcbiAgY29uc3QgY2ZuID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KGVudmlyb25tZW50LCBNb2RlLkZvclJlYWRpbmcpKS5zZGsuY2xvdWRGb3JtYXRpb24oKTtcblxuICByZXR1cm4gY2ZuLnBhZ2luYXRlZExpc3RTdGFja3Moe1xuICAgIFN0YWNrU3RhdHVzRmlsdGVyOiBbXG4gICAgICAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICdVUERBVEVfQ09NUExFVEUnLFxuICAgICAgJ1VQREFURV9ST0xMQkFDS19DT01QTEVURScsXG4gICAgICAnSU1QT1JUX0NPTVBMRVRFJyxcbiAgICAgICdST0xMQkFDS19DT01QTEVURScsXG4gICAgXSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbnZpcm9ubWVudFNlY3Rpb25IZWFkZXIoZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50KSB7XG4gIGNvbnN0IGVudiA9IGBhd3M6Ly8ke2Vudmlyb25tZW50LmFjY291bnR9LyR7ZW52aXJvbm1lbnQucmVnaW9ufWA7XG4gIHJldHVybiBmb3JtYXRUb1N0cmVhbShzdHJlYW0gPT4gZm10RW52aXJvbm1lbnRTZWN0aW9uSGVhZGVyKHN0cmVhbSwgZW52KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUeXBlZE1hcHBpbmdzKG1hcHBpbmdzOiBUeXBlZE1hcHBpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBmb3JtYXRUb1N0cmVhbSgoc3RyZWFtKSA9PiBmbXRUeXBlZE1hcHBpbmdzKHN0cmVhbSwgbWFwcGluZ3MpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFtYmlndW91c01hcHBpbmdzKHBhdGhzOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZvcm1hdFRvU3RyZWFtKChzdHJlYW0pID0+IGZtdEFtYmlndW91c01hcHBpbmdzKHN0cmVhbSwgcGF0aHMpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VG9TdHJlYW0oY2I6IChzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkgPT4gdm9pZCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJpbmdXcml0ZVN0cmVhbSgpO1xuICBjYihzdHJlYW0pO1xuICByZXR1cm4gc3RyZWFtLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2Ygc3RhY2sgZ3JvdXBzLCBlYWNoIGNvbnRhaW5pbmcgdGhlIGxvY2FsIHN0YWNrcyBhbmQgdGhlIGRlcGxveWVkIHN0YWNrcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyb3VwU3RhY2tzKHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlciwgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSwgYWRkaXRpb25hbFN0YWNrTmFtZXM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGVudmlyb25tZW50czogTWFwPHN0cmluZywgY3hhcGkuRW52aXJvbm1lbnQ+ID0gbmV3IE1hcCgpO1xuXG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgbG9jYWxTdGFja3MpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzdGFjay5lbnZpcm9ubWVudCk7XG4gICAgY29uc3Qga2V5ID0gaGFzaE9iamVjdChlbnZpcm9ubWVudCk7XG4gICAgZW52aXJvbm1lbnRzLnNldChrZXksIGVudmlyb25tZW50KTtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsQnlFbnZpcm9ubWVudCA9IGF3YWl0IGluZGV4QnkobG9jYWxTdGFja3MsXG4gICAgYXN5bmMgKHMpID0+IGhhc2hPYmplY3QoYXdhaXQgc2RrUHJvdmlkZXIucmVzb2x2ZUVudmlyb25tZW50KHMuZW52aXJvbm1lbnQpKSxcbiAgKTtcblxuICBjb25zdCBncm91cHM6IFN0YWNrR3JvdXBbXSA9IFtdO1xuICBmb3IgKGxldCBrZXkgb2YgbG9jYWxCeUVudmlyb25tZW50LmtleXMoKSkge1xuICAgIGNvbnN0IGxvY2FsID0gbG9jYWxCeUVudmlyb25tZW50LmdldChrZXkpITtcbiAgICBjb25zdCBoYXNMb2NhbENvdW50ZXJwYXJ0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiBsb2NhbC5zb21lKChsKSA9PiBsLnN0YWNrTmFtZSA9PT0gc3RhY2tOYW1lKTtcbiAgICBjb25zdCB3YXNFeHBsaWNpdGx5UHJvdmlkZWQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IGFkZGl0aW9uYWxTdGFja05hbWVzLmluY2x1ZGVzKHN0YWNrTmFtZSk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50cy5nZXQoa2V5KSE7XG4gICAgY29uc3Qgc3RhY2tTdW1tYXJpZXMgPSBhd2FpdCBsaXN0U3RhY2tzKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCk7XG4gICAgY29uc3Qgc3RhY2tOYW1lcyA9IHN0YWNrU3VtbWFyaWVzXG4gICAgICAubWFwKHMgPT4gcy5TdGFja05hbWUhKVxuICAgICAgLmZpbHRlcihzID0+IGhhc0xvY2FsQ291bnRlcnBhcnQocykgfHwgd2FzRXhwbGljaXRseVByb3ZpZGVkKHMpKTtcbiAgICBjb25zdCBkZXBsb3llZFN0YWNrcyA9IGF3YWl0IGdldERlcGxveWVkU3RhY2tzQnlOYW1lcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnQsIHN0YWNrTmFtZXMpO1xuXG4gICAgZ3JvdXBzLnB1c2goe1xuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBkZXBsb3llZFN0YWNrcyxcbiAgICAgIGxvY2FsU3RhY2tzOiBsb2NhbCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBncm91cHM7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
"organization": true
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@aws-cdk/aws-service-spec": "^0.1.
|
|
38
|
-
"@aws-cdk/cli-plugin-contract": "2.
|
|
37
|
+
"@aws-cdk/aws-service-spec": "^0.1.130",
|
|
38
|
+
"@aws-cdk/cli-plugin-contract": "2.182.0",
|
|
39
39
|
"@cdklabs/eslint-plugin": "^1.3.5",
|
|
40
40
|
"@jest/environment": "^29.7.0",
|
|
41
41
|
"@jest/globals": "^29.7.0",
|
|
42
42
|
"@jest/types": "^29.6.3",
|
|
43
|
-
"@microsoft/api-extractor": "^7.
|
|
44
|
-
"@smithy/util-stream": "^4.
|
|
43
|
+
"@microsoft/api-extractor": "^7.55.2",
|
|
44
|
+
"@smithy/util-stream": "^4.5.6",
|
|
45
45
|
"@stylistic/eslint-plugin": "^3",
|
|
46
46
|
"@types/fs-extra": "^11.0.4",
|
|
47
47
|
"@types/jest": "^29.5.14",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@types/split2": "^4.2.3",
|
|
51
51
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
52
52
|
"@typescript-eslint/parser": "^8",
|
|
53
|
-
"aws-cdk-lib": "2.
|
|
53
|
+
"aws-cdk-lib": "2.232.1",
|
|
54
54
|
"aws-sdk-client-mock": "^4.1.0",
|
|
55
55
|
"aws-sdk-client-mock-jest": "^4.1.0",
|
|
56
56
|
"commit-and-tag-version": "^12",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"eslint-plugin-jest": "^28.14.0",
|
|
63
63
|
"eslint-plugin-jsdoc": "^50.8.0",
|
|
64
64
|
"eslint-plugin-prettier": "^5.5.4",
|
|
65
|
-
"fast-check": "^4.
|
|
65
|
+
"fast-check": "^4.4.0",
|
|
66
66
|
"jest": "^29.7.0",
|
|
67
67
|
"jest-environment-node": "^29.7.0",
|
|
68
68
|
"jest-junit": "^16",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"license-checker": "^25.0.1",
|
|
71
71
|
"nock": "13",
|
|
72
72
|
"prettier": "^2.8",
|
|
73
|
-
"ts-jest": "^29.4.
|
|
73
|
+
"ts-jest": "^29.4.6",
|
|
74
74
|
"typescript": "5.9",
|
|
75
75
|
"xml-js": "^1.6.11"
|
|
76
76
|
},
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
},
|
|
80
80
|
"dependencies": {
|
|
81
81
|
"@aws-cdk/cdk-assets-lib": "^1",
|
|
82
|
-
"@aws-cdk/cloud-assembly-schema": ">=
|
|
82
|
+
"@aws-cdk/cloud-assembly-schema": ">=49.0.0",
|
|
83
83
|
"@aws-cdk/cloudformation-diff": "^2",
|
|
84
84
|
"@aws-cdk/cx-api": "^2",
|
|
85
85
|
"@aws-sdk/client-appsync": "^3",
|
|
@@ -115,9 +115,9 @@
|
|
|
115
115
|
"fast-deep-equal": "^3.1.3",
|
|
116
116
|
"fs-extra": "^9",
|
|
117
117
|
"glob": "^11.1.0",
|
|
118
|
-
"minimatch": "10.0.
|
|
118
|
+
"minimatch": "10.0.1",
|
|
119
119
|
"p-limit": "^3",
|
|
120
|
-
"semver": "^7.7.
|
|
120
|
+
"semver": "^7.7.3",
|
|
121
121
|
"split2": "^4.2.0",
|
|
122
122
|
"uuid": "^11.1.0",
|
|
123
123
|
"wrap-ansi": "^7",
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"publishConfig": {
|
|
137
137
|
"access": "public"
|
|
138
138
|
},
|
|
139
|
-
"version": "1.
|
|
139
|
+
"version": "1.12.0",
|
|
140
140
|
"types": "lib/index.d.ts",
|
|
141
141
|
"exports": {
|
|
142
142
|
".": {
|