aws-cdk 2.37.1 → 2.38.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/README.md +13 -1
- package/THIRD_PARTY_LICENSES +81 -1
- package/build-info.json +2 -2
- package/lib/api/aws-auth/aws-sdk-inifile.js +2 -3
- package/lib/api/aws-auth/awscli-compatible.js +5 -7
- package/lib/api/aws-auth/sdk-provider.js +7 -11
- package/lib/api/aws-auth/sdk.js +2 -3
- package/lib/api/bootstrap/bootstrap-environment.js +14 -15
- package/lib/api/bootstrap/deploy-bootstrap.js +5 -7
- package/lib/api/cloudformation-deployments.js +9 -12
- package/lib/api/cxapp/cloud-assembly.js +3 -4
- package/lib/api/cxapp/cloud-executable.js +2 -3
- package/lib/api/cxapp/exec.js +8 -10
- package/lib/api/deploy-stack.js +11 -13
- package/lib/api/evaluate-cloudformation-template.js +6 -11
- package/lib/api/hotswap/appsync-mapping-templates.js +4 -5
- package/lib/api/hotswap/code-build-projects.js +2 -3
- package/lib/api/hotswap/ecs-services.js +4 -5
- package/lib/api/hotswap/lambda-functions.js +45 -24
- package/lib/api/hotswap/s3-bucket-deployments.js +3 -5
- package/lib/api/hotswap/stepfunctions-state-machines.js +2 -3
- package/lib/api/hotswap-deployments.js +5 -7
- package/lib/api/logs/logs-monitor.js +5 -8
- package/lib/api/nested-stack-helpers.js +9 -11
- package/lib/api/toolkit-info.js +12 -17
- package/lib/api/util/cloudformation/stack-activity-monitor.js +17 -27
- package/lib/api/util/cloudformation.js +7 -11
- package/lib/api/util/placeholders.js +2 -3
- package/lib/assets.js +3 -4
- package/lib/cdk-toolkit.d.ts +14 -0
- package/lib/cdk-toolkit.js +36 -19
- package/lib/cli.js +14 -14
- package/lib/context-providers/load-balancers.js +11 -18
- package/lib/context-providers/security-groups.js +5 -7
- package/lib/deploy.d.ts +7 -0
- package/lib/deploy.js +43 -0
- package/lib/import.js +8 -13
- package/lib/index.js +2500 -1469
- package/lib/notices.js +11 -17
- package/lib/settings.js +4 -5
- package/lib/util/asset-publishing.js +5 -8
- package/lib/util/directories.js +2 -3
- package/lib/version.js +2 -2
- package/package.json +10 -9
- package/test/api/bootstrap2.test.js +2 -3
- package/test/api/cloud-executable.test.js +2 -3
- package/test/api/deploy-stack.test.js +4 -7
- package/test/api/fake-sts.js +6 -8
- package/test/api/hotswap/hotswap-deployments.test.js +4 -4
- package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +3 -3
- package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +179 -7
- package/test/api/sdk-provider.test.js +8 -11
- package/test/aws-sdk-non-public-apis.test.js +2 -3
- package/test/cdk-toolkit.test.js +10 -1
- package/test/context-providers/load-balancers.test.js +3 -5
- package/test/deploy.test.d.ts +1 -0
- package/test/deploy.test.js +175 -0
- package/test/import.test.js +2 -2
- package/test/init.test.js +2 -3
- package/test/integ/cli/app/app.js +19 -0
- package/test/integ/cli/bootstrapping.integtest.js +9 -20
- package/test/integ/cli/cli.integtest.js +62 -31
- package/test/integ/github-helpers.js +2 -3
- package/test/integ/helpers/aws.js +4 -7
- package/test/integ/helpers/cdk.js +21 -30
- package/test/integ/helpers/sam.js +10 -17
- package/test/util/mock-child_process.js +3 -4
- package/test/util/mock-sdk.js +4 -6
- package/test/util/mock-toolkitinfo.js +4 -5
- package/test/util.js +3 -5
package/lib/api/cxapp/exec.js
CHANGED
|
@@ -11,23 +11,22 @@ const settings_1 = require("../../settings");
|
|
|
11
11
|
const version_1 = require("../../version");
|
|
12
12
|
/** Invokes the cloud executable and returns JSON output */
|
|
13
13
|
async function execProgram(aws, config) {
|
|
14
|
-
var _a, _b, _c, _d, _e, _f;
|
|
15
14
|
const env = {};
|
|
16
15
|
const context = config.context.all;
|
|
17
16
|
await populateDefaultEnvironmentIfNeeded(aws, env);
|
|
18
|
-
const debugMode =
|
|
17
|
+
const debugMode = config.settings.get(['debug']) ?? true;
|
|
19
18
|
if (debugMode) {
|
|
20
19
|
env.CDK_DEBUG = 'true';
|
|
21
20
|
}
|
|
22
|
-
const pathMetadata =
|
|
21
|
+
const pathMetadata = config.settings.get(['pathMetadata']) ?? true;
|
|
23
22
|
if (pathMetadata) {
|
|
24
23
|
context[cxapi.PATH_METADATA_ENABLE_CONTEXT] = true;
|
|
25
24
|
}
|
|
26
|
-
const assetMetadata =
|
|
25
|
+
const assetMetadata = config.settings.get(['assetMetadata']) ?? true;
|
|
27
26
|
if (assetMetadata) {
|
|
28
27
|
context[cxapi.ASSET_RESOURCE_METADATA_ENABLED_CONTEXT] = true;
|
|
29
28
|
}
|
|
30
|
-
const versionReporting =
|
|
29
|
+
const versionReporting = config.settings.get(['versionReporting']) ?? true;
|
|
31
30
|
if (versionReporting) {
|
|
32
31
|
context[cxapi.ANALYTICS_REPORTING_ENABLED_CONTEXT] = true;
|
|
33
32
|
}
|
|
@@ -35,11 +34,11 @@ async function execProgram(aws, config) {
|
|
|
35
34
|
if (!versionReporting) {
|
|
36
35
|
context['aws:cdk:disable-version-reporting'] = true;
|
|
37
36
|
}
|
|
38
|
-
const stagingEnabled =
|
|
37
|
+
const stagingEnabled = config.settings.get(['staging']) ?? true;
|
|
39
38
|
if (!stagingEnabled) {
|
|
40
39
|
context[cxapi.DISABLE_ASSET_STAGING_CONTEXT] = true;
|
|
41
40
|
}
|
|
42
|
-
const bundlingStacks =
|
|
41
|
+
const bundlingStacks = config.settings.get(['bundlingStacks']) ?? ['*'];
|
|
43
42
|
context[cxapi.BUNDLING_STACKS] = bundlingStacks;
|
|
44
43
|
logging_1.debug('context:', context);
|
|
45
44
|
env[cxapi.CONTEXT_ENV] = JSON.stringify(context);
|
|
@@ -135,10 +134,9 @@ exports.execProgram = execProgram;
|
|
|
135
134
|
* @param context The context key/value bash.
|
|
136
135
|
*/
|
|
137
136
|
async function populateDefaultEnvironmentIfNeeded(aws, env) {
|
|
138
|
-
var _a;
|
|
139
137
|
env[cxapi.DEFAULT_REGION_ENV] = aws.defaultRegion;
|
|
140
138
|
logging_1.debug(`Setting "${cxapi.DEFAULT_REGION_ENV}" environment variable to`, env[cxapi.DEFAULT_REGION_ENV]);
|
|
141
|
-
const accountId = (
|
|
139
|
+
const accountId = (await aws.defaultAccount())?.accountId;
|
|
142
140
|
if (accountId) {
|
|
143
141
|
env[cxapi.DEFAULT_ACCOUNT_ENV] = accountId;
|
|
144
142
|
logging_1.debug(`Setting "${cxapi.DEFAULT_ACCOUNT_ENV}" environment variable to`, env[cxapi.DEFAULT_ACCOUNT_ENV]);
|
|
@@ -194,4 +192,4 @@ async function guessExecutable(commandLine) {
|
|
|
194
192
|
}
|
|
195
193
|
return commandLine;
|
|
196
194
|
}
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4ZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOENBQThDO0FBQzlDLDZCQUE2QjtBQUM3QiwyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQiwyQ0FBc0M7QUFDdEMsNkNBQThFO0FBQzlFLDJDQUE4QztBQUc5QywyREFBMkQ7QUFDcEQsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFnQixFQUFFLE1BQXFCOztJQUN2RSxNQUFNLEdBQUcsR0FBOEIsRUFBRyxDQUFDO0lBRTNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ25DLE1BQU0sa0NBQWtDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRW5ELE1BQU0sU0FBUyxTQUFZLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsbUNBQUksSUFBSSxDQUFDO0lBQ2xFLElBQUksU0FBUyxFQUFFO1FBQ2IsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7S0FDeEI7SUFFRCxNQUFNLFlBQVksU0FBWSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLG1DQUFJLElBQUksQ0FBQztJQUM1RSxJQUFJLFlBQVksRUFBRTtRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ3BEO0lBRUQsTUFBTSxhQUFhLFNBQVksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxtQ0FBSSxJQUFJLENBQUM7SUFDOUUsSUFBSSxhQUFhLEVBQUU7UUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUMvRDtJQUVELE1BQU0sZ0JBQWdCLFNBQVksTUFBTSxDQUFDLFFB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V0FBVyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZFByb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiwgUFJPSkVDVF9DT05GSUcsIFVTRVJfREVGQVVMVFMgfSBmcm9tICcuLi8uLi9zZXR0aW5ncyc7XG5pbXBvcnQgeyB2ZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vLi4vdmVyc2lvbic7XG5pbXBvcnQgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoJztcblxuLyoqIEludm9rZXMgdGhlIGNsb3VkIGV4ZWN1dGFibGUgYW5kIHJldHVybnMgSlNPTiBvdXRwdXQgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjUHJvZ3JhbShhd3M6IFNka1Byb3ZpZGVyLCBjb25maWc6IENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPGN4YXBpLkNsb3VkQXNzZW1ibHk+IHtcbiAgY29uc3QgZW52OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyB9O1xuXG4gIGNvbnN0IGNvbnRleHQgPSBjb25maWcuY29udGV4dC5hbGw7XG4gIGF3YWl0IHBvcHVsYXRlRGVmYXVsdEVudmlyb25tZW50SWZOZWVkZWQoYXdzLCBlbnYpO1xuXG4gIGNvbnN0IGRlYnVnTW9kZTogYm9vbGVhbiA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydkZWJ1ZyddKSA/PyB0cnVlO1xuICBpZiAoZGVidWdNb2RlKSB7XG4gICAgZW52LkNES19ERUJVRyA9ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IHBhdGhNZXRhZGF0YTogYm9vbGVhbiA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydwYXRoTWV0YWRhdGEnXSkgPz8gdHJ1ZTtcbiAgaWYgKHBhdGhNZXRhZGF0YSkge1xuICAgIGNvbnRleHRbY3hhcGkuUEFUSF9NRVRBREFUQV9FTkFCTEVfQ09OVEVYVF0gPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgYXNzZXRNZXRhZGF0YTogYm9vbGVhbiA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydhc3NldE1ldGFkYXRhJ10pID8/IHRydWU7XG4gIGlmIChhc3NldE1ldGFkYXRhKSB7XG4gICAgY29udGV4dFtjeGFwaS5BU1NFVF9SRVNPVVJDRV9NRVRBREFUQV9FTkFCTEVEX0NPTlRFWFRdID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb25SZXBvcnRpbmc6IGJvb2xlYW4gPSBjb25maWcuc2V0dGluZ3MuZ2V0KFsndmVyc2lvblJlcG9ydGluZyddKSA/PyB0cnVlO1xuICBpZiAodmVyc2lvblJlcG9ydGluZykgeyBjb250ZXh0W2N4YXBpLkFOQUxZVElDU19SRVBPUlRJTkdfRU5BQkxFRF9DT05URVhUXSA9IHRydWU7IH1cbiAgLy8gV2UgbmVlZCB0byBrZWVwIG9uIGRvaW5nIHRoaXMgZm9yIGZyYW1ld29yayB2ZXJzaW9uIGZyb20gYmVmb3JlIHRoaXMgZmxhZyB3YXMgZGVwcmVjYXRlZC5cbiAgaWYgKCF2ZXJzaW9uUmVwb3J0aW5nKSB7IGNvbnRleHRbJ2F3czpjZGs6ZGlzYWJsZS12ZXJzaW9uLXJlcG9ydGluZyddID0gdHJ1ZTsgfVxuXG4gIGNvbnN0IHN0YWdpbmdFbmFibGVkID0gY29uZmlnLnNldHRpbmdzLmdldChbJ3N0YWdpbmcnXSkgPz8gdHJ1ZTtcbiAgaWYgKCFzdGFnaW5nRW5hYmxlZCkge1xuICAgIGNvbnRleHRbY3hhcGkuRElTQUJMRV9BU1NFVF9TVEFHSU5HX0NPTlRFWFRdID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGJ1bmRsaW5nU3RhY2tzID0gY29uZmlnLnNldHRpbmdzLmdldChbJ2J1bmRsaW5nU3RhY2tzJ10pID8/IFsnKiddO1xuICBjb250ZXh0W2N4YXBpLkJVTkRMSU5HX1NUQUNLU10gPSBidW5kbGluZ1N0YWNrcztcblxuICBkZWJ1ZygnY29udGV4dDonLCBjb250ZXh0KTtcbiAgZW52W2N4YXBpLkNPTlRFWFRfRU5WXSA9IEpTT04uc3RyaW5naWZ5KGNvbnRleHQpO1xuXG4gIGNvbnN0IGJ1aWxkID0gY29uZmlnLnNldHRpbmdzLmdldChbJ2J1aWxkJ10pO1xuICBpZiAoYnVpbGQpIHtcbiAgICBhd2FpdCBleGVjKGJ1aWxkKTtcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydhcHAnXSk7XG4gIGlmICghYXBwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAtLWFwcCBpcyByZXF1aXJlZCBlaXRoZXIgaW4gY29tbWFuZC1saW5lLCBpbiAke1BST0pFQ1RfQ09ORklHfSBvciBpbiAke1VTRVJfREVGQVVMVFN9YCk7XG4gIH1cblxuICAvLyBieXBhc3MgXCJzeW50aFwiIGlmIGFwcCBwb2ludHMgdG8gYSBjbG91ZCBhc3NlbWJseVxuICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhhcHApICYmIChhd2FpdCBmcy5zdGF0KGFwcCkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBkZWJ1ZygnLS1hcHAgcG9pbnRzIHRvIGEgY2xvdWQgYXNzZW1ibHksIHNvIHdlIGJ5cGFzcyBzeW50aCcpO1xuICAgIHJldHVybiBjcmVhdGVBc3NlbWJseShhcHApO1xuICB9XG5cbiAgY29uc3QgY29tbWFuZExpbmUgPSBhd2FpdCBndWVzc0V4ZWN1dGFibGUoYXBwVG9BcnJheShhcHApKTtcblxuICBjb25zdCBvdXRkaXIgPSBjb25maWcuc2V0dGluZ3MuZ2V0KFsnb3V0cHV0J10pO1xuICBpZiAoIW91dGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZDogLS1vdXRwdXQgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGZzLm1rZGlycChvdXRkaXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBvdXRwdXQgZGlyZWN0b3J5ICR7b3V0ZGlyfSAoJHtlcnJvci5tZXNzYWdlfSlgKTtcbiAgfVxuXG4gIGRlYnVnKCdvdXRkaXI6Jywgb3V0ZGlyKTtcbiAgZW52W2N4YXBpLk9VVERJUl9FTlZdID0gb3V0ZGlyO1xuXG4gIC8vIFNlbmQgdmVyc2lvbiBpbmZvcm1hdGlvblxuICBlbnZbY3hhcGkuQ0xJX0FTTV9WRVJTSU9OX0VOVl0gPSBjeHNjaGVtYS5NYW5pZmVzdC52ZXJzaW9uKCk7XG4gIGVudltjeGFwaS5DTElfVkVSU0lPTl9FTlZdID0gdmVyc2lvbk51bWJlcigpO1xuXG4gIGRlYnVnKCdlbnY6JywgZW52KTtcblxuICBhd2FpdCBleGVjKGNvbW1hbmRMaW5lLmpvaW4oJyAnKSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUFzc2VtYmx5KG91dGRpcik7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXNzZW1ibHkoYXBwRGlyOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBjeGFwaS5DbG91ZEFzc2VtYmx5KGFwcERpcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKGN4c2NoZW1hLlZFUlNJT05fTUlTTUFUQ0gpKSB7XG4gICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlIENMSSB2ZXJzaW9uIGlzIHRvbyBvbGQuXG4gICAgICAgIC8vIHdlIGluc3RydWN0IHRoZSB1c2VyIHRvIHVwZ3JhZGUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBDREsgQ0xJIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIENESyBsaWJyYXJ5IHVzZWQgYnkgeW91ciBhcHBsaWNhdGlvbi4gUGxlYXNlIHVwZ3JhZGUgdGhlIENMSSB0byB0aGUgbGF0ZXN0IHZlcnNpb24uXFxuKCR7ZXJyb3IubWVzc2FnZX0pYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBleGVjKGNvbW1hbmRBbmRBcmdzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKG9rLCBmYWlsKSA9PiB7XG4gICAgICAvLyBXZSB1c2UgYSBzbGlnaHRseSBsb3dlci1sZXZlbCBpbnRlcmZhY2UgdG86XG4gICAgICAvL1xuICAgICAgLy8gLSBQYXNzIGFyZ3VtZW50cyBpbiBhbiBhcnJheSBpbnN0ZWFkIG9mIGEgc3RyaW5nLCB0byBnZXQgYXJvdW5kIGFcbiAgICAgIC8vICAgbnVtYmVyIG9mIHF1b3RpbmcgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlIGludGVybWVkaWF0ZSBzaGVsbCBsYXllclxuICAgICAgLy8gICAod2hpY2ggd291bGQgYmUgZGlmZmVyZW50IGJldHdlZW4gTGludXggYW5kIFdpbmRvd3MpLlxuICAgICAgLy9cbiAgICAgIC8vIC0gSW5oZXJpdCBzdGRlcnIgZnJvbSBjb250cm9sbGluZyB0ZXJtaW5hbC4gV2UgZG9uJ3QgdXNlIHRoZSBjYXB0dXJlZCB2YWx1ZVxuICAgICAgLy8gICBhbnl3YXksIGFuZCBpZiB0aGUgc3VicHJvY2VzcyBpcyBwcmludGluZyB0byBpdCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHRoZVxuICAgICAgLy8gICB1c2VyIGdldHMgdG8gc2VlIGl0IHNvb25lci4gUGx1cywgY2FwdHVyaW5nIGRvZXNuJ3QgaW50ZXJhY3QgbmljZWx5IHdpdGggc29tZVxuICAgICAgLy8gICBwcm9jZXNzZXMgbGlrZSBNYXZlbi5cbiAgICAgIGNvbnN0IHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24oY29tbWFuZEFuZEFyZ3MsIHtcbiAgICAgICAgc3RkaW86IFsnaWdub3JlJywgJ2luaGVyaXQnLCAnaW5oZXJpdCddLFxuICAgICAgICBkZXRhY2hlZDogZmFsc2UsXG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcHJvYy5vbignZXJyb3InLCBmYWlsKTtcblxuICAgICAgcHJvYy5vbignZXhpdCcsIGNvZGUgPT4ge1xuICAgICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWlsKG5ldyBFcnJvcihgU3VicHJvY2VzcyBleGl0ZWQgd2l0aCBlcnJvciAke2NvZGV9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIElmIHdlIGRvbid0IGhhdmUgcmVnaW9uL2FjY291bnQgZGVmaW5lZCBpbiBjb250ZXh0LCB3ZSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgU0RLIGJlaGF2aW9yXG4gKiB3aGVyZSByZWdpb24gaXMgcmV0cmlldmVkIGZyb20gfi8uYXdzL2NvbmZpZyBhbmQgYWNjb3VudCBpcyBiYXNlZCBvbiBkZWZhdWx0IGNyZWRlbnRpYWxzIHByb3ZpZGVyXG4gKiBjaGFpbiBhbmQgdGhlbiBTVFMgaXMgcXVlcmllZC5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgb3Bwb3J0dW5pc3RpY2FsbHk6IGZvciBleGFtcGxlLCBpZiB3ZSBjYW4ndCBhY2Nlc3MgU1RTIGZvciBzb21lIHJlYXNvbiBvciB0aGUgcmVnaW9uXG4gKiBpcyBub3QgY29uZmlndXJlZCwgdGhlIGNvbnRleHQgdmFsdWUgd2lsbCBiZSAnbnVsbCcgYW5kIHRoZXJlIGNvdWxkIGZhaWx1cmVzIGRvd24gdGhlIGxpbmUuIEluXG4gKiBzb21lIGNhc2VzLCBzeW50aGVzaXMgZG9lcyBub3QgcmVxdWlyZSByZWdpb24vYWNjb3VudCBpbmZvcm1hdGlvbiBhdCBhbGwsIHNvIHRoYXQgbWlnaHQgYmUgcGVyZmVjdGx5XG4gKiBmaW5lIGluIGNlcnRhaW4gc2NlbmFyaW9zLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGtleS92YWx1ZSBiYXNoLlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZURlZmF1bHRFbnZpcm9ubWVudElmTmVlZGVkKGF3czogU2RrUHJvdmlkZXIsIGVudjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWR9KSB7XG4gIGVudltjeGFwaS5ERUZBVUxUX1JFR0lPTl9FTlZdID0gYXdzLmRlZmF1bHRSZWdpb247XG4gIGRlYnVnKGBTZXR0aW5nIFwiJHtjeGFwaS5ERUZBVUxUX1JFR0lPTl9FTlZ9XCIgZW52aXJvbm1lbnQgdmFyaWFibGUgdG9gLCBlbnZbY3hhcGkuREVGQVVMVF9SRUdJT05fRU5WXSk7XG5cbiAgY29uc3QgYWNjb3VudElkID0gKGF3YWl0IGF3cy5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkO1xuICBpZiAoYWNjb3VudElkKSB7XG4gICAgZW52W2N4YXBpLkRFRkFVTFRfQUNDT1VOVF9FTlZdID0gYWNjb3VudElkO1xuICAgIGRlYnVnKGBTZXR0aW5nIFwiJHtjeGFwaS5ERUZBVUxUX0FDQ09VTlRfRU5WfVwiIGVudmlyb25tZW50IHZhcmlhYmxlIHRvYCwgZW52W2N4YXBpLkRFRkFVTFRfQUNDT1VOVF9FTlZdKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2Ugc3VyZSB0aGUgJ2FwcCcgaXMgYW4gYXJyYXlcbiAqXG4gKiBJZiBpdCdzIGEgc3RyaW5nLCBzcGxpdCBvbiBzcGFjZXMgYXMgYSB0cml2aWFsIHdheSBvZiB0b2tlbml6aW5nIHRoZSBjb21tYW5kIGxpbmUuXG4gKi9cbmZ1bmN0aW9uIGFwcFRvQXJyYXkoYXBwOiBhbnkpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcHAgPT09ICdzdHJpbmcnID8gYXBwLnNwbGl0KCcgJykgOiBhcHA7XG59XG5cbnR5cGUgQ29tbWFuZEdlbmVyYXRvciA9IChmaWxlOiBzdHJpbmcpID0+IHN0cmluZ1tdO1xuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIGdpdmVuIGZpbGUgd2l0aCB0aGUgc2FtZSAnbm9kZScgcHJvY2VzcyBhcyBpcyBydW5uaW5nIHRoZSBjdXJyZW50IHByb2Nlc3NcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZU5vZGUoc2NyaXB0RmlsZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW3Byb2Nlc3MuZXhlY1BhdGgsIHNjcmlwdEZpbGVdO1xufVxuXG4vKipcbiAqIE1hcHBpbmcgb2YgZXh0ZW5zaW9ucyB0byBjb21tYW5kLWxpbmUgZ2VuZXJhdG9yc1xuICovXG5jb25zdCBFWFRFTlNJT05fTUFQID0gbmV3IE1hcDxzdHJpbmcsIENvbW1hbmRHZW5lcmF0b3I+KFtcbiAgWycuanMnLCBleGVjdXRlTm9kZV0sXG5dKTtcblxuLyoqXG4gKiBHdWVzcyB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRcbiAqXG4gKiBPbmx5IGRvIHRoaXMgaWYgdGhlIGZpbGUgaXMgTk9UIG1hcmtlZCBhcyBleGVjdXRhYmxlLiBJZiBpdCBpcyxcbiAqIHdlJ2xsIGRlZmVyIHRvIHRoZSBzaGViYW5nIGluc2lkZSB0aGUgZmlsZSBpdHNlbGYuXG4gKlxuICogSWYgd2UncmUgb24gV2luZG93cywgd2UgQUxXQVlTIHRha2UgdGhlIGhhbmRsZXIsIHNpbmNlIGl0J3MgaGFyZCB0b1xuICogdmVyaWZ5IGlmIHJlZ2lzdHJ5IGFzc29jaWF0aW9ucyBoYXZlIG9yIGhhdmUgbm90IGJlZW4gc2V0IHVwIGZvciB0aGlzXG4gKiBmaWxlIHR5cGUsIHNvIHdlJ2xsIGFzc3VtZSB0aGUgd29yc3QgYW5kIHRha2UgY29udHJvbC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ3Vlc3NFeGVjdXRhYmxlKGNvbW1hbmRMaW5lOiBzdHJpbmdbXSkge1xuICBpZiAoY29tbWFuZExpbmUubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IGZzdGF0O1xuXG4gICAgdHJ5IHtcbiAgICAgIGZzdGF0ID0gYXdhaXQgZnMuc3RhdChjb21tYW5kTGluZVswXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnKGBOb3QgYSBmaWxlOiAnJHtjb21tYW5kTGluZVswXX0nLiBVc2luZyAnJHtjb21tYW5kTGluZX0nIGFzIGNvbW1hbmQtbGluZWApO1xuICAgICAgcmV0dXJuIGNvbW1hbmRMaW5lO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgY29uc3QgaXNFeGVjdXRhYmxlID0gKGZzdGF0Lm1vZGUgJiBmcy5jb25zdGFudHMuWF9PSykgIT09IDA7XG4gICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuICAgIGNvbnN0IGhhbmRsZXIgPSBFWFRFTlNJT05fTUFQLmdldChwYXRoLmV4dG5hbWUoY29tbWFuZExpbmVbMF0pKTtcbiAgICBpZiAoaGFuZGxlciAmJiAoIWlzRXhlY3V0YWJsZSB8fCBpc1dpbmRvd3MpKSB7XG4gICAgICByZXR1cm4gaGFuZGxlcihjb21tYW5kTGluZVswXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21tYW5kTGluZTtcbn1cbiJdfQ==
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4ZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOENBQThDO0FBQzlDLDZCQUE2QjtBQUM3QiwyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQiwyQ0FBc0M7QUFDdEMsNkNBQThFO0FBQzlFLDJDQUE4QztBQUc5QywyREFBMkQ7QUFDcEQsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFnQixFQUFFLE1BQXFCO0lBQ3ZFLE1BQU0sR0FBRyxHQUE4QixFQUFHLENBQUM7SUFFM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDbkMsTUFBTSxrQ0FBa0MsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFbkQsTUFBTSxTQUFTLEdBQVksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNsRSxJQUFJLFNBQVMsRUFBRTtRQUNiLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0tBQ3hCO0lBRUQsTUFBTSxZQUFZLEdBQVksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUM1RSxJQUFJLFlBQVksRUFBRTtRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ3BEO0lBRUQsTUFBTSxhQUFhLEdBQVksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUM5RSxJQUFJLGFBQWEsRUFBRTtRQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQy9EO0lBRUQsTUFBTSxnQkFBZ0IsR0FBWSxNQUFNLENBQUMsUUFBUSxD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O0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZFByb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiwgUFJPSkVDVF9DT05GSUcsIFVTRVJfREVGQVVMVFMgfSBmcm9tICcuLi8uLi9zZXR0aW5ncyc7XG5pbXBvcnQgeyB2ZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vLi4vdmVyc2lvbic7XG5pbXBvcnQgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoJztcblxuLyoqIEludm9rZXMgdGhlIGNsb3VkIGV4ZWN1dGFibGUgYW5kIHJldHVybnMgSlNPTiBvdXRwdXQgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjUHJvZ3JhbShhd3M6IFNka1Byb3ZpZGVyLCBjb25maWc6IENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPGN4YXBpLkNsb3VkQXNzZW1ibHk+IHtcbiAgY29uc3QgZW52OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyB9O1xuXG4gIGNvbnN0IGNvbnRleHQgPSBjb25maWcuY29udGV4dC5hbGw7XG4gIGF3YWl0IHBvcHVsYXRlRGVmYXVsdEVudmlyb25tZW50SWZOZWVkZWQoYXdzLCBlbnYpO1xuXG4gIGNvbnN0IGRlYnVnTW9kZTogYm9vbGVhbiA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydkZWJ1ZyddKSA/PyB0cnVlO1xuICBpZiAoZGVidWdNb2RlKSB7XG4gICAgZW52LkNES19ERUJVRyA9ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IHBhdGhNZXRhZGF0YTogYm9vbGVhbiA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydwYXRoTWV0YWRhdGEnXSkgPz8gdHJ1ZTtcbiAgaWYgKHBhdGhNZXRhZGF0YSkge1xuICAgIGNvbnRleHRbY3hhcGkuUEFUSF9NRVRBREFUQV9FTkFCTEVfQ09OVEVYVF0gPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgYXNzZXRNZXRhZGF0YTogYm9vbGVhbiA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydhc3NldE1ldGFkYXRhJ10pID8/IHRydWU7XG4gIGlmIChhc3NldE1ldGFkYXRhKSB7XG4gICAgY29udGV4dFtjeGFwaS5BU1NFVF9SRVNPVVJDRV9NRVRBREFUQV9FTkFCTEVEX0NPTlRFWFRdID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb25SZXBvcnRpbmc6IGJvb2xlYW4gPSBjb25maWcuc2V0dGluZ3MuZ2V0KFsndmVyc2lvblJlcG9ydGluZyddKSA/PyB0cnVlO1xuICBpZiAodmVyc2lvblJlcG9ydGluZykgeyBjb250ZXh0W2N4YXBpLkFOQUxZVElDU19SRVBPUlRJTkdfRU5BQkxFRF9DT05URVhUXSA9IHRydWU7IH1cbiAgLy8gV2UgbmVlZCB0byBrZWVwIG9uIGRvaW5nIHRoaXMgZm9yIGZyYW1ld29yayB2ZXJzaW9uIGZyb20gYmVmb3JlIHRoaXMgZmxhZyB3YXMgZGVwcmVjYXRlZC5cbiAgaWYgKCF2ZXJzaW9uUmVwb3J0aW5nKSB7IGNvbnRleHRbJ2F3czpjZGs6ZGlzYWJsZS12ZXJzaW9uLXJlcG9ydGluZyddID0gdHJ1ZTsgfVxuXG4gIGNvbnN0IHN0YWdpbmdFbmFibGVkID0gY29uZmlnLnNldHRpbmdzLmdldChbJ3N0YWdpbmcnXSkgPz8gdHJ1ZTtcbiAgaWYgKCFzdGFnaW5nRW5hYmxlZCkge1xuICAgIGNvbnRleHRbY3hhcGkuRElTQUJMRV9BU1NFVF9TVEFHSU5HX0NPTlRFWFRdID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGJ1bmRsaW5nU3RhY2tzID0gY29uZmlnLnNldHRpbmdzLmdldChbJ2J1bmRsaW5nU3RhY2tzJ10pID8/IFsnKiddO1xuICBjb250ZXh0W2N4YXBpLkJVTkRMSU5HX1NUQUNLU10gPSBidW5kbGluZ1N0YWNrcztcblxuICBkZWJ1ZygnY29udGV4dDonLCBjb250ZXh0KTtcbiAgZW52W2N4YXBpLkNPTlRFWFRfRU5WXSA9IEpTT04uc3RyaW5naWZ5KGNvbnRleHQpO1xuXG4gIGNvbnN0IGJ1aWxkID0gY29uZmlnLnNldHRpbmdzLmdldChbJ2J1aWxkJ10pO1xuICBpZiAoYnVpbGQpIHtcbiAgICBhd2FpdCBleGVjKGJ1aWxkKTtcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IGNvbmZpZy5zZXR0aW5ncy5nZXQoWydhcHAnXSk7XG4gIGlmICghYXBwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAtLWFwcCBpcyByZXF1aXJlZCBlaXRoZXIgaW4gY29tbWFuZC1saW5lLCBpbiAke1BST0pFQ1RfQ09ORklHfSBvciBpbiAke1VTRVJfREVGQVVMVFN9YCk7XG4gIH1cblxuICAvLyBieXBhc3MgXCJzeW50aFwiIGlmIGFwcCBwb2ludHMgdG8gYSBjbG91ZCBhc3NlbWJseVxuICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhhcHApICYmIChhd2FpdCBmcy5zdGF0KGFwcCkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBkZWJ1ZygnLS1hcHAgcG9pbnRzIHRvIGEgY2xvdWQgYXNzZW1ibHksIHNvIHdlIGJ5cGFzcyBzeW50aCcpO1xuICAgIHJldHVybiBjcmVhdGVBc3NlbWJseShhcHApO1xuICB9XG5cbiAgY29uc3QgY29tbWFuZExpbmUgPSBhd2FpdCBndWVzc0V4ZWN1dGFibGUoYXBwVG9BcnJheShhcHApKTtcblxuICBjb25zdCBvdXRkaXIgPSBjb25maWcuc2V0dGluZ3MuZ2V0KFsnb3V0cHV0J10pO1xuICBpZiAoIW91dGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZDogLS1vdXRwdXQgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGZzLm1rZGlycChvdXRkaXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBvdXRwdXQgZGlyZWN0b3J5ICR7b3V0ZGlyfSAoJHtlcnJvci5tZXNzYWdlfSlgKTtcbiAgfVxuXG4gIGRlYnVnKCdvdXRkaXI6Jywgb3V0ZGlyKTtcbiAgZW52W2N4YXBpLk9VVERJUl9FTlZdID0gb3V0ZGlyO1xuXG4gIC8vIFNlbmQgdmVyc2lvbiBpbmZvcm1hdGlvblxuICBlbnZbY3hhcGkuQ0xJX0FTTV9WRVJTSU9OX0VOVl0gPSBjeHNjaGVtYS5NYW5pZmVzdC52ZXJzaW9uKCk7XG4gIGVudltjeGFwaS5DTElfVkVSU0lPTl9FTlZdID0gdmVyc2lvbk51bWJlcigpO1xuXG4gIGRlYnVnKCdlbnY6JywgZW52KTtcblxuICBhd2FpdCBleGVjKGNvbW1hbmRMaW5lLmpvaW4oJyAnKSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUFzc2VtYmx5KG91dGRpcik7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXNzZW1ibHkoYXBwRGlyOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBjeGFwaS5DbG91ZEFzc2VtYmx5KGFwcERpcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKGN4c2NoZW1hLlZFUlNJT05fTUlTTUFUQ0gpKSB7XG4gICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlIENMSSB2ZXJzaW9uIGlzIHRvbyBvbGQuXG4gICAgICAgIC8vIHdlIGluc3RydWN0IHRoZSB1c2VyIHRvIHVwZ3JhZGUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBDREsgQ0xJIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIENESyBsaWJyYXJ5IHVzZWQgYnkgeW91ciBhcHBsaWNhdGlvbi4gUGxlYXNlIHVwZ3JhZGUgdGhlIENMSSB0byB0aGUgbGF0ZXN0IHZlcnNpb24uXFxuKCR7ZXJyb3IubWVzc2FnZX0pYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBleGVjKGNvbW1hbmRBbmRBcmdzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKG9rLCBmYWlsKSA9PiB7XG4gICAgICAvLyBXZSB1c2UgYSBzbGlnaHRseSBsb3dlci1sZXZlbCBpbnRlcmZhY2UgdG86XG4gICAgICAvL1xuICAgICAgLy8gLSBQYXNzIGFyZ3VtZW50cyBpbiBhbiBhcnJheSBpbnN0ZWFkIG9mIGEgc3RyaW5nLCB0byBnZXQgYXJvdW5kIGFcbiAgICAgIC8vICAgbnVtYmVyIG9mIHF1b3RpbmcgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlIGludGVybWVkaWF0ZSBzaGVsbCBsYXllclxuICAgICAgLy8gICAod2hpY2ggd291bGQgYmUgZGlmZmVyZW50IGJldHdlZW4gTGludXggYW5kIFdpbmRvd3MpLlxuICAgICAgLy9cbiAgICAgIC8vIC0gSW5oZXJpdCBzdGRlcnIgZnJvbSBjb250cm9sbGluZyB0ZXJtaW5hbC4gV2UgZG9uJ3QgdXNlIHRoZSBjYXB0dXJlZCB2YWx1ZVxuICAgICAgLy8gICBhbnl3YXksIGFuZCBpZiB0aGUgc3VicHJvY2VzcyBpcyBwcmludGluZyB0byBpdCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHRoZVxuICAgICAgLy8gICB1c2VyIGdldHMgdG8gc2VlIGl0IHNvb25lci4gUGx1cywgY2FwdHVyaW5nIGRvZXNuJ3QgaW50ZXJhY3QgbmljZWx5IHdpdGggc29tZVxuICAgICAgLy8gICBwcm9jZXNzZXMgbGlrZSBNYXZlbi5cbiAgICAgIGNvbnN0IHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24oY29tbWFuZEFuZEFyZ3MsIHtcbiAgICAgICAgc3RkaW86IFsnaWdub3JlJywgJ2luaGVyaXQnLCAnaW5oZXJpdCddLFxuICAgICAgICBkZXRhY2hlZDogZmFsc2UsXG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcHJvYy5vbignZXJyb3InLCBmYWlsKTtcblxuICAgICAgcHJvYy5vbignZXhpdCcsIGNvZGUgPT4ge1xuICAgICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWlsKG5ldyBFcnJvcihgU3VicHJvY2VzcyBleGl0ZWQgd2l0aCBlcnJvciAke2NvZGV9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIElmIHdlIGRvbid0IGhhdmUgcmVnaW9uL2FjY291bnQgZGVmaW5lZCBpbiBjb250ZXh0LCB3ZSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgU0RLIGJlaGF2aW9yXG4gKiB3aGVyZSByZWdpb24gaXMgcmV0cmlldmVkIGZyb20gfi8uYXdzL2NvbmZpZyBhbmQgYWNjb3VudCBpcyBiYXNlZCBvbiBkZWZhdWx0IGNyZWRlbnRpYWxzIHByb3ZpZGVyXG4gKiBjaGFpbiBhbmQgdGhlbiBTVFMgaXMgcXVlcmllZC5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgb3Bwb3J0dW5pc3RpY2FsbHk6IGZvciBleGFtcGxlLCBpZiB3ZSBjYW4ndCBhY2Nlc3MgU1RTIGZvciBzb21lIHJlYXNvbiBvciB0aGUgcmVnaW9uXG4gKiBpcyBub3QgY29uZmlndXJlZCwgdGhlIGNvbnRleHQgdmFsdWUgd2lsbCBiZSAnbnVsbCcgYW5kIHRoZXJlIGNvdWxkIGZhaWx1cmVzIGRvd24gdGhlIGxpbmUuIEluXG4gKiBzb21lIGNhc2VzLCBzeW50aGVzaXMgZG9lcyBub3QgcmVxdWlyZSByZWdpb24vYWNjb3VudCBpbmZvcm1hdGlvbiBhdCBhbGwsIHNvIHRoYXQgbWlnaHQgYmUgcGVyZmVjdGx5XG4gKiBmaW5lIGluIGNlcnRhaW4gc2NlbmFyaW9zLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGtleS92YWx1ZSBiYXNoLlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZURlZmF1bHRFbnZpcm9ubWVudElmTmVlZGVkKGF3czogU2RrUHJvdmlkZXIsIGVudjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWR9KSB7XG4gIGVudltjeGFwaS5ERUZBVUxUX1JFR0lPTl9FTlZdID0gYXdzLmRlZmF1bHRSZWdpb247XG4gIGRlYnVnKGBTZXR0aW5nIFwiJHtjeGFwaS5ERUZBVUxUX1JFR0lPTl9FTlZ9XCIgZW52aXJvbm1lbnQgdmFyaWFibGUgdG9gLCBlbnZbY3hhcGkuREVGQVVMVF9SRUdJT05fRU5WXSk7XG5cbiAgY29uc3QgYWNjb3VudElkID0gKGF3YWl0IGF3cy5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkO1xuICBpZiAoYWNjb3VudElkKSB7XG4gICAgZW52W2N4YXBpLkRFRkFVTFRfQUNDT1VOVF9FTlZdID0gYWNjb3VudElkO1xuICAgIGRlYnVnKGBTZXR0aW5nIFwiJHtjeGFwaS5ERUZBVUxUX0FDQ09VTlRfRU5WfVwiIGVudmlyb25tZW50IHZhcmlhYmxlIHRvYCwgZW52W2N4YXBpLkRFRkFVTFRfQUNDT1VOVF9FTlZdKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2Ugc3VyZSB0aGUgJ2FwcCcgaXMgYW4gYXJyYXlcbiAqXG4gKiBJZiBpdCdzIGEgc3RyaW5nLCBzcGxpdCBvbiBzcGFjZXMgYXMgYSB0cml2aWFsIHdheSBvZiB0b2tlbml6aW5nIHRoZSBjb21tYW5kIGxpbmUuXG4gKi9cbmZ1bmN0aW9uIGFwcFRvQXJyYXkoYXBwOiBhbnkpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcHAgPT09ICdzdHJpbmcnID8gYXBwLnNwbGl0KCcgJykgOiBhcHA7XG59XG5cbnR5cGUgQ29tbWFuZEdlbmVyYXRvciA9IChmaWxlOiBzdHJpbmcpID0+IHN0cmluZ1tdO1xuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIGdpdmVuIGZpbGUgd2l0aCB0aGUgc2FtZSAnbm9kZScgcHJvY2VzcyBhcyBpcyBydW5uaW5nIHRoZSBjdXJyZW50IHByb2Nlc3NcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZU5vZGUoc2NyaXB0RmlsZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW3Byb2Nlc3MuZXhlY1BhdGgsIHNjcmlwdEZpbGVdO1xufVxuXG4vKipcbiAqIE1hcHBpbmcgb2YgZXh0ZW5zaW9ucyB0byBjb21tYW5kLWxpbmUgZ2VuZXJhdG9yc1xuICovXG5jb25zdCBFWFRFTlNJT05fTUFQID0gbmV3IE1hcDxzdHJpbmcsIENvbW1hbmRHZW5lcmF0b3I+KFtcbiAgWycuanMnLCBleGVjdXRlTm9kZV0sXG5dKTtcblxuLyoqXG4gKiBHdWVzcyB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRcbiAqXG4gKiBPbmx5IGRvIHRoaXMgaWYgdGhlIGZpbGUgaXMgTk9UIG1hcmtlZCBhcyBleGVjdXRhYmxlLiBJZiBpdCBpcyxcbiAqIHdlJ2xsIGRlZmVyIHRvIHRoZSBzaGViYW5nIGluc2lkZSB0aGUgZmlsZSBpdHNlbGYuXG4gKlxuICogSWYgd2UncmUgb24gV2luZG93cywgd2UgQUxXQVlTIHRha2UgdGhlIGhhbmRsZXIsIHNpbmNlIGl0J3MgaGFyZCB0b1xuICogdmVyaWZ5IGlmIHJlZ2lzdHJ5IGFzc29jaWF0aW9ucyBoYXZlIG9yIGhhdmUgbm90IGJlZW4gc2V0IHVwIGZvciB0aGlzXG4gKiBmaWxlIHR5cGUsIHNvIHdlJ2xsIGFzc3VtZSB0aGUgd29yc3QgYW5kIHRha2UgY29udHJvbC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ3Vlc3NFeGVjdXRhYmxlKGNvbW1hbmRMaW5lOiBzdHJpbmdbXSkge1xuICBpZiAoY29tbWFuZExpbmUubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IGZzdGF0O1xuXG4gICAgdHJ5IHtcbiAgICAgIGZzdGF0ID0gYXdhaXQgZnMuc3RhdChjb21tYW5kTGluZVswXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnKGBOb3QgYSBmaWxlOiAnJHtjb21tYW5kTGluZVswXX0nLiBVc2luZyAnJHtjb21tYW5kTGluZX0nIGFzIGNvbW1hbmQtbGluZWApO1xuICAgICAgcmV0dXJuIGNvbW1hbmRMaW5lO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgY29uc3QgaXNFeGVjdXRhYmxlID0gKGZzdGF0Lm1vZGUgJiBmcy5jb25zdGFudHMuWF9PSykgIT09IDA7XG4gICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuICAgIGNvbnN0IGhhbmRsZXIgPSBFWFRFTlNJT05fTUFQLmdldChwYXRoLmV4dG5hbWUoY29tbWFuZExpbmVbMF0pKTtcbiAgICBpZiAoaGFuZGxlciAmJiAoIWlzRXhlY3V0YWJsZSB8fCBpc1dpbmRvd3MpKSB7XG4gICAgICByZXR1cm4gaGFuZGxlcihjb21tYW5kTGluZVswXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21tYW5kTGluZTtcbn1cbiJdfQ==
|
package/lib/api/deploy-stack.js
CHANGED
|
@@ -86,15 +86,14 @@ async function deployStack(options) {
|
|
|
86
86
|
}
|
|
87
87
|
exports.deployStack = deployStack;
|
|
88
88
|
async function prepareAndExecuteChangeSet(options, cloudFormationStack, stackArtifact, stackParams, bodyParameter) {
|
|
89
|
-
var _a, _b, _c, _d, _e;
|
|
90
89
|
// if we got here, and hotswap is enabled, that means changes couldn't be hotswapped,
|
|
91
90
|
// and we had to fall back on a full deployment. Note that fact in our User-Agent
|
|
92
91
|
if (options.hotswap) {
|
|
93
92
|
options.sdk.appendCustomUserAgent('cdk-hotswap/fallback');
|
|
94
93
|
}
|
|
95
94
|
const cfn = options.sdk.cloudFormation();
|
|
96
|
-
const deployName =
|
|
97
|
-
const changeSetName =
|
|
95
|
+
const deployName = options.deployName ?? stackArtifact.stackName;
|
|
96
|
+
const changeSetName = options.changeSetName ?? 'cdk-deploy-change-set';
|
|
98
97
|
if (cloudFormationStack.exists) {
|
|
99
98
|
//Delete any existing change sets generated by CDK since change set names must be unique.
|
|
100
99
|
//The delete request is successful as long as the stack exists (even if the change set does not exist).
|
|
@@ -119,12 +118,12 @@ async function prepareAndExecuteChangeSet(options, cloudFormationStack, stackArt
|
|
|
119
118
|
Capabilities: ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND'],
|
|
120
119
|
Tags: options.tags,
|
|
121
120
|
}).promise();
|
|
122
|
-
const execute =
|
|
121
|
+
const execute = options.execute ?? true;
|
|
123
122
|
logging_1.debug('Initiated creation of changeset: %s; waiting for it to finish creating...', changeSet.Id);
|
|
124
123
|
// Fetching all pages if we'll execute, so we can have the correct change count when monitoring.
|
|
125
124
|
const changeSetDescription = await cloudformation_1.waitForChangeSet(cfn, deployName, changeSetName, { fetchAll: execute });
|
|
126
125
|
// Update termination protection only if it has changed.
|
|
127
|
-
const terminationProtection =
|
|
126
|
+
const terminationProtection = stackArtifact.terminationProtection ?? false;
|
|
128
127
|
if (!!cloudFormationStack.terminationProtection !== terminationProtection) {
|
|
129
128
|
logging_1.debug('Updating termination protection from %s to %s for stack %s', cloudFormationStack.terminationProtection, terminationProtection, deployName);
|
|
130
129
|
await cfn.updateTerminationProtection({
|
|
@@ -149,7 +148,7 @@ async function prepareAndExecuteChangeSet(options, cloudFormationStack, stackArt
|
|
|
149
148
|
const disableRollback = shouldDisableRollback ? { DisableRollback: true } : undefined;
|
|
150
149
|
await cfn.executeChangeSet({ StackName: deployName, ChangeSetName: changeSetName, ...disableRollback }).promise();
|
|
151
150
|
// eslint-disable-next-line max-len
|
|
152
|
-
const changeSetLength = (
|
|
151
|
+
const changeSetLength = (changeSetDescription.Changes ?? []).length;
|
|
153
152
|
const monitor = options.quiet ? undefined : stack_activity_monitor_1.StackActivityMonitor.withDefaultPrinter(cfn, deployName, stackArtifact, {
|
|
154
153
|
// +1 for the extra event emitted from updates.
|
|
155
154
|
resourcesTotal: cloudFormationStack.exists ? changeSetLength + 1 : changeSetLength,
|
|
@@ -167,10 +166,10 @@ async function prepareAndExecuteChangeSet(options, cloudFormationStack, stackArt
|
|
|
167
166
|
cloudFormationStack = finalStack;
|
|
168
167
|
}
|
|
169
168
|
catch (e) {
|
|
170
|
-
throw new Error(suffixWithErrors(e.message, monitor
|
|
169
|
+
throw new Error(suffixWithErrors(e.message, monitor?.errors));
|
|
171
170
|
}
|
|
172
171
|
finally {
|
|
173
|
-
await
|
|
172
|
+
await monitor?.stop();
|
|
174
173
|
}
|
|
175
174
|
logging_1.debug('Stack %s has completed updating', deployName);
|
|
176
175
|
}
|
|
@@ -198,7 +197,7 @@ async function makeBodyParameter(stack, resolvedEnvironment, assetManifest, tool
|
|
|
198
197
|
return { TemplateURL: restUrlFromManifest(stack.stackTemplateAssetObjectUrl, resolvedEnvironment, sdk) };
|
|
199
198
|
}
|
|
200
199
|
// Otherwise, pass via API call (if small) or upload here (if large)
|
|
201
|
-
const templateJson = serialize_1.toYAML(overrideTemplate
|
|
200
|
+
const templateJson = serialize_1.toYAML(overrideTemplate ?? stack.template);
|
|
202
201
|
if (templateJson.length <= LARGE_TEMPLATE_SIZE_KB * 1024) {
|
|
203
202
|
return { TemplateBody: templateJson };
|
|
204
203
|
}
|
|
@@ -263,7 +262,7 @@ async function destroyStack(options) {
|
|
|
263
262
|
}
|
|
264
263
|
}
|
|
265
264
|
catch (e) {
|
|
266
|
-
throw new Error(suffixWithErrors(e.message, monitor
|
|
265
|
+
throw new Error(suffixWithErrors(e.message, monitor?.errors));
|
|
267
266
|
}
|
|
268
267
|
finally {
|
|
269
268
|
if (monitor) {
|
|
@@ -282,7 +281,6 @@ exports.destroyStack = destroyStack;
|
|
|
282
281
|
* do anything.
|
|
283
282
|
*/
|
|
284
283
|
async function canSkipDeploy(deployStackOptions, cloudFormationStack, parameterChanges) {
|
|
285
|
-
var _a;
|
|
286
284
|
const deployName = deployStackOptions.deployName || deployStackOptions.stack.stackName;
|
|
287
285
|
logging_1.debug(`${deployName}: checking if we can skip deploy`);
|
|
288
286
|
// Forced deploy
|
|
@@ -306,7 +304,7 @@ async function canSkipDeploy(deployStackOptions, cloudFormationStack, parameterC
|
|
|
306
304
|
return false;
|
|
307
305
|
}
|
|
308
306
|
// Tags have changed
|
|
309
|
-
if (!compareTags(cloudFormationStack.tags,
|
|
307
|
+
if (!compareTags(cloudFormationStack.tags, deployStackOptions.tags ?? [])) {
|
|
310
308
|
logging_1.debug(`${deployName}: tags have changed`);
|
|
311
309
|
return false;
|
|
312
310
|
}
|
|
@@ -384,4 +382,4 @@ function suffixWithErrors(msg, errors) {
|
|
|
384
382
|
? `${msg}: ${errors.join(', ')}`
|
|
385
383
|
: msg;
|
|
386
384
|
}
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF5QztBQUN6QywrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3QixzQ0FBd0Q7QUFFeEQsd0NBQWlEO0FBQ2pELDRDQUFzQztBQUN0QywyRUFBc0U7QUFDdEUsK0RBQXlEO0FBQ3pELHVEQUFtRDtBQUVuRCx5RkFBNEU7QUFDNUUsK0RBQTZEO0FBQzdELDZDQUF3QztBQUV4QywwREFHK0I7QUFDL0IseUZBQTJHO0FBMkwzRyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUUzQixLQUFLLFVBQVUsV0FBVyxDQUFDLE9BQTJCO0lBQzNELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFFcEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0lBRTdDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ2pFLElBQUksbUJBQW1CLEdBQUcsTUFBTSxvQ0FBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRTVFLElBQUksbUJBQW1CLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFO1FBQ3JELGVBQUssQ0FBQyx3QkFBd0IsVUFBVSxzRkFBc0YsQ0FBQyxDQUFDO1FBQ2hJLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFH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Q2hDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2hDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBhZGRNZXRhZGF0YUFzc2V0c1RvTWFuaWZlc3QgfSBmcm9tICcuLi9hc3NldHMnO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi4vY2RrLXRvb2xraXQnO1xuaW1wb3J0IHsgZGVidWcsIGVycm9yLCBwcmludCB9IGZyb20gJy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgdG9ZQU1MIH0gZnJvbSAnLi4vc2VyaWFsaXplJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi4vdXRpbC9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcbmltcG9ydCB7IHB1Ymxpc2hBc3NldHMgfSBmcm9tICcuLi91dGlsL2Fzc2V0LXB1Ymxpc2hpbmcnO1xuaW1wb3J0IHsgY29udGVudEhhc2ggfSBmcm9tICcuLi91dGlsL2NvbnRlbnQtaGFzaCc7XG5pbXBvcnQgeyBJU0RLLCBTZGtQcm92aWRlciB9IGZyb20gJy4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbiB9IGZyb20gJy4vZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuaW1wb3J0IHsgdHJ5SG90c3dhcERlcGxveW1lbnQgfSBmcm9tICcuL2hvdHN3YXAtZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgSUNPTiB9IGZyb20gJy4vaG90c3dhcC9jb21tb24nO1xuaW1wb3J0IHsgVG9vbGtpdEluZm8gfSBmcm9tICcuL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQge1xuICBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMsIENsb3VkRm9ybWF0aW9uU3RhY2ssIFRlbXBsYXRlUGFyYW1ldGVycywgd2FpdEZvckNoYW5nZVNldCxcbiAgd2FpdEZvclN0YWNrRGVwbG95LCB3YWl0Rm9yU3RhY2tEZWxldGUsIFBhcmFtZXRlclZhbHVlcywgUGFyYW1ldGVyQ2hhbmdlcywgUmVzb3VyY2VzVG9JbXBvcnQsXG59IGZyb20gJy4vdXRpbC9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBTdGFja0FjdGl2aXR5TW9uaXRvciwgU3RhY2tBY3Rpdml0eVByb2dyZXNzIH0gZnJvbSAnLi91dGlsL2Nsb3VkZm9ybWF0aW9uL3N0YWNrLWFjdGl2aXR5LW1vbml0b3InO1xuXG50eXBlIFRlbXBsYXRlQm9keVBhcmFtZXRlciA9IHtcbiAgVGVtcGxhdGVCb2R5Pzogc3RyaW5nXG4gIFRlbXBsYXRlVVJMPzogc3RyaW5nXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWNrUmVzdWx0IHtcbiAgcmVhZG9ubHkgbm9PcDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgb3V0cHV0czogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IHN0YWNrQXJuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95U3RhY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0byBiZSBkZXBsb3llZFxuICAgKi9cbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IHRvIGRlcGxveSB0aGlzIHN0YWNrIGluXG4gICAqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBvbiB0aGUgc3RhY2sgYXJ0aWZhY3QgbWF5IGJlIHVucmVzb2x2ZWQsIHRoaXMgb25lXG4gICAqIG11c3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZXNvbHZlZEVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudDtcblxuICAvKipcbiAgICogVGhlIFNESyB0byB1c2UgZm9yIGRlcGxveWluZyB0aGUgc3RhY2tcbiAgICpcbiAgICogU2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCB3aXRoIHRoZSBjb3JyZWN0IHJvbGUgd2l0aCB3aGljaFxuICAgKiBzdGFjayBvcGVyYXRpb25zIHNob3VsZCBiZSBwZXJmb3JtZWQuXG4gICAqL1xuICBzZGs6IElTREs7XG5cbiAgLyoqXG4gICAqIFNESyBwcm92aWRlciAoc2VlZGVkIHdpdGggZGVmYXVsdCBjcmVkZW50aWFscylcbiAgICpcbiAgICogV2lsbCBleGNsdXNpdmVseSBiZSB1c2VkIHRvIGFzc3VtZSBwdWJsaXNoaW5nIGNyZWRlbnRpYWxzICh3aGljaCBtdXN0XG4gICAqIHN0YXJ0IG91dCBmcm9tIGN1cnJlbnQgY3JlZGVudGlhbHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlJ3ZlIGFzc3VtZWQgYW5cbiAgICogYWN0aW9uIHJvbGUgdG8gdG91Y2ggdGhlIHN0YWNrIG9yIG5vdCkuXG4gICAqXG4gICAqIFVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgcHVycG9zZXM6XG4gICAqXG4gICAqIC0gUHVibGlzaCBsZWdhY3kgYXNzZXRzLlxuICAgKiAtIFVwbG9hZCBsYXJnZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMgdG8gdGhlIHN0YWdpbmcgYnVja2V0LlxuICAgKi9cbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYm9vdHN0cmFwIHN0YWNrIGZvdW5kIGluIHRoZSB0YXJnZXQgZW52aXJvbm1lbnRcbiAgICovXG4gIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mbztcblxuICAvKipcbiAgICogUm9sZSB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIHRvIGV4ZWN1dGUgdGhlIGNoYW5nZSBzZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBSb2xlIHNwZWNpZmllZCBvbiBzdGFjaywgb3RoZXJ3aXNlIGN1cnJlbnRcbiAgICovXG4gIHJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5vdGlmaWNhdGlvbiBBUk5zIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gdG8gbm90aWZ5IHdoZW4gdGhlIGNoYW5nZSBzZXQgaGFzIGNvbXBsZXRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIG5vdGlmaWNhdGlvbkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSB0byBkZXBsb3kgdGhlIHN0YWNrIHVuZGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTmFtZSBmcm9tIGFzc2VtYmx5XG4gICAqL1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBRdWlldCBvciB2ZXJib3NlIGRlcGxveW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHF1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGlzdCBvZiBhc3NldCBJRHMgd2hpY2ggc2hvdWxkbid0IGJlIGJ1aWx0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnVpbGQgYWxsIGFzc2V0c1xuICAgKi9cbiAgcmV1c2VBc3NldHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGFncyB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIHRvIGFkZCB0byBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHRhZ3M/OiBUYWdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBleGVjdXRlIHRoZSBjaGFuZ2VzZXQgb3IgbGVhdmUgaXQgaW4gcmV2aWV3LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBleGVjdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgbmFtZSB0byB1c2UgZm9yIHRoZSBDbG91ZEZvcm1hdGlvbiBjaGFuZ2Ugc2V0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgY2hhbmdlU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgZXh0cmEgcGFyYW1ldGVyc1xuICAgKiAoaW4gYWRkaXRpb24gdG8gdGhvc2UgdXNlZCBmb3IgYXNzZXRzKVxuICAgKiB0byBwYXNzIHRvIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZS5cbiAgICogTm90ZSB0aGF0IHBhcmFtZXRlcnMgd2l0aCBgdW5kZWZpbmVkYCBvciBlbXB0eSB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkLFxuICAgKiBhbmQgbm90IHBhc3NlZCB0byB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcGFyYW1ldGVycz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXG4gIC8qKlxuICAgKiBVc2UgcHJldmlvdXMgdmFsdWVzIGZvciB1bnNwZWNpZmllZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIElmIG5vdCBzZXQsIGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGZvciBldmVyeSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzcGxheSBtb2RlIGZvciBzdGFjayBkZXBsb3ltZW50IHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuQmFyIHN0YWNrIGV2ZW50cyB3aWxsIGJlIGRpc3BsYXllZCBmb3JcbiAgICogICB0aGUgcmVzb3VyY2UgY3VycmVudGx5IGJlaW5nIGRlcGxveWVkLlxuICAgKi9cbiAgcHJvZ3Jlc3M/OiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3M7XG5cbiAgLyoqXG4gICAqIERlcGxveSBldmVuIGlmIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZSBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSB3ZSBhcmUgYWJvdXQgdG8gZGVwbG95LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHdlIGFyZSBvbiBhIENJIHN5c3RlbVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qXG4gICAqIFdoZXRoZXIgdG8gcGVyZm9ybSBhICdob3Rzd2FwJyBkZXBsb3ltZW50LlxuICAgKiBBICdob3Rzd2FwJyBkZXBsb3ltZW50IHdpbGwgYXR0ZW1wdCB0byBzaG9ydC1jaXJjdWl0IENsb3VkRm9ybWF0aW9uXG4gICAqIGFuZCB1cGRhdGUgdGhlIGFmZmVjdGVkIHJlc291cmNlcyBsaWtlIExhbWJkYSBmdW5jdGlvbnMgZGlyZWN0bHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2UgZm9yIHJlZ3VsYXIgZGVwbG95bWVudHMsIHRydWUgZm9yICd3YXRjaCcgZGVwbG95bWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBwZXJmb3JtaW5nIEFXUyBTREsgY2FsbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90aGluZyBleHRyYSBpcyBhcHBlbmRlZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhVXNlckFnZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQsIGNoYW5nZSBzZXQgb2YgdHlwZSBJTVBPUlQgd2lsbCBiZSBjcmVhdGVkLCBhbmQgcmVzb3VyY2VzVG9JbXBvcnRcbiAgICogcGFzc2VkIHRvIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzVG9JbXBvcnQ/OiBSZXNvdXJjZXNUb0ltcG9ydDtcblxuICAvKipcbiAgICogSWYgcHJlc2VudCwgdXNlIHRoaXMgZ2l2ZW4gdGVtcGxhdGUgaW5zdGVhZCBvZiB0aGUgc3RvcmVkIG9uZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZSB0aGUgc3RvcmVkIHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZVRlbXBsYXRlPzogYW55O1xufVxuXG5jb25zdCBMQVJHRV9URU1QTEFURV9TSVpFX0tCID0gNTA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXBsb3lTdGFjayhvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gIGNvbnN0IHN0YWNrQXJ0aWZhY3QgPSBvcHRpb25zLnN0YWNrO1xuXG4gIGNvbnN0IHN0YWNrRW52ID0gb3B0aW9ucy5yZXNvbHZlZEVudmlyb25tZW50O1xuXG4gIG9wdGlvbnMuc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudChvcHRpb25zLmV4dHJhVXNlckFnZW50KTtcbiAgY29uc3QgY2ZuID0gb3B0aW9ucy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgY29uc3QgZGVwbG95TmFtZSA9IG9wdGlvbnMuZGVwbG95TmFtZSB8fCBzdGFja0FydGlmYWN0LnN0YWNrTmFtZTtcbiAgbGV0IGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIGRlcGxveU5hbWUpO1xuXG4gIGlmIChjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLmlzQ3JlYXRpb25GYWlsdXJlKSB7XG4gICAgZGVidWcoYEZvdW5kIGV4aXN0aW5nIHN0YWNrICR7ZGVwbG95TmFtZX0gdGhhdCBoYWQgcHJldmlvdXNseSBmYWlsZWQgY3JlYXRpb24uIERlbGV0aW5nIGl0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlLWNyZWF0ZSBpdC5gKTtcbiAgICBhd2FpdCBjZm4uZGVsZXRlU3RhY2soeyBTdGFja05hbWU6IGRlcGxveU5hbWUgfSkucHJvbWlzZSgpO1xuICAgIGNvbnN0IGRlbGV0ZWRTdGFjayA9IGF3YWl0IHdhaXRGb3JTdGFja0RlbGV0ZShjZm4sIGRlcGxveU5hbWUpO1xuICAgIGlmIChkZWxldGVkU3RhY2sgJiYgZGVsZXRlZFN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdERUxFVEVfQ09NUExFVEUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCBkZWxldGluZyBzdGFjayAke2RlcGxveU5hbWV9IHRoYXQgaGFkIHByZXZpb3VzbHkgZmFpbGVkIGNyZWF0aW9uIChjdXJyZW50IHN0YXRlOiAke2RlbGV0ZWRTdGFjay5zdGFja1N0YXR1c30pYCk7XG4gICAgfVxuICAgIC8vIFVwZGF0ZSB2YXJpYWJsZSB0byBtYXJrIHRoYXQgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIGJ1dCBhdm9pZFxuICAgIC8vIGRvaW5nIGFuIGFjdHVhbCBsb29rdXAgaW4gQ2xvdWRGb3JtYXRpb24gKHdoaWNoIHdvdWxkIGJlIHNpbGx5IHRvIGRvIGlmXG4gICAgLy8gd2UganVzdCBkZWxldGVkIGl0KS5cbiAgICBjbG91ZEZvcm1hdGlvblN0YWNrID0gQ2xvdWRGb3JtYXRpb25TdGFjay5kb2VzTm90RXhpc3QoY2ZuLCBkZXBsb3lOYW1lKTtcbiAgfVxuXG4gIC8vIERldGVjdCBcImxlZ2FjeVwiIGFzc2V0cyAod2hpY2ggcmVtYWluIGluIHRoZSBtZXRhZGF0YSkgYW5kIHB1Ymxpc2ggdGhlbSB2aWFcbiAgLy8gYW4gYWQtaG9jIGFzc2V0IG1hbmlmZXN0LCB3aGlsZSBwYXNzaW5nIHRoZWlyIGxvY2F0aW9ucyB2aWEgdGVtcGxhdGVcbiAgLy8gcGFyYW1ldGVycy5cbiAgY29uc3QgbGVnYWN5QXNzZXRzID0gbmV3IEFzc2V0TWFuaWZlc3RCdWlsZGVyKCk7XG4gIGNvbnN0IGFzc2V0UGFyYW1zID0gYXdhaXQgYWRkTWV0YWRhdGFBc3NldHNUb01hbmlmZXN0KHN0YWNrQXJ0aWZhY3QsIGxlZ2FjeUFzc2V0cywgb3B0aW9ucy50b29sa2l0SW5mbywgb3B0aW9ucy5yZXVzZUFzc2V0cyk7XG5cbiAgY29uc3QgZmluYWxQYXJhbWV0ZXJWYWx1ZXMgPSB7IC4uLm9wdGlvbnMucGFyYW1ldGVycywgLi4uYXNzZXRQYXJhbXMgfTtcblxuICBjb25zdCB0ZW1wbGF0ZVBhcmFtcyA9IFRlbXBsYXRlUGFyYW1ldGVycy5mcm9tVGVtcGxhdGUoc3RhY2tBcnRpZmFjdC50ZW1wbGF0ZSk7XG4gIGNvbnN0IHN0YWNrUGFyYW1zID0gb3B0aW9ucy51c2VQcmV2aW91c1BhcmFtZXRlcnNcbiAgICA/IHRlbXBsYXRlUGFyYW1zLnVwZGF0ZUV4aXN0aW5nKGZpbmFsUGFyYW1ldGVyVmFsdWVzLCBjbG91ZEZvcm1hdGlvblN0YWNrLnBhcmFtZXRlcnMpXG4gICAgOiB0ZW1wbGF0ZVBhcmFtcy5zdXBwbHlBbGwoZmluYWxQYXJhbWV0ZXJWYWx1ZXMpO1xuXG4gIGlmIChhd2FpdCBjYW5Ta2lwRGVwbG95KG9wdGlvbnMsIGNsb3VkRm9ybWF0aW9uU3RhY2ssIHN0YWNrUGFyYW1zLmhhc0NoYW5nZXMoY2xvdWRGb3JtYXRpb25TdGFjay5wYXJhbWV0ZXJzKSkpIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogc2tpcHBpbmcgZGVwbG95bWVudCAodXNlIC0tZm9yY2UgdG8gb3ZlcnJpZGUpYCk7XG4gICAgLy8gaWYgd2UgY2FuIHNraXAgZGVwbG95bWVudCBhbmQgd2UgYXJlIHBlcmZvcm1pbmcgYSBob3Rzd2FwLCBsZXQgdGhlIHVzZXIga25vd1xuICAgIC8vIHRoYXQgbm8gaG90c3dhcCBkZXBsb3ltZW50IGhhcHBlbmVkXG4gICAgaWYgKG9wdGlvbnMuaG90c3dhcCkge1xuICAgICAgcHJpbnQoYFxcbiAke0lDT059ICVzXFxuYCwgY2hhbGsuYm9sZCgnaG90c3dhcCBkZXBsb3ltZW50IHNraXBwZWQgLSBubyBjaGFuZ2VzIHdlcmUgZGV0ZWN0ZWQgKHVzZSAtLWZvcmNlIHRvIG92ZXJyaWRlKScpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vT3A6IHRydWUsXG4gICAgICBvdXRwdXRzOiBjbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICBzdGFja0FybjogY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZGVidWcoYCR7ZGVwbG95TmFtZX06IGRlcGxveWluZy4uLmApO1xuICB9XG5cbiAgY29uc3QgYm9keVBhcmFtZXRlciA9IGF3YWl0IG1ha2VCb2R5UGFyYW1ldGVyKFxuICAgIHN0YWNrQXJ0aWZhY3QsXG4gICAgb3B0aW9ucy5yZXNvbHZlZEVudmlyb25tZW50LFxuICAgIGxlZ2FjeUFzc2V0cyxcbiAgICBvcHRpb25zLnRvb2xraXRJbmZvLFxuICAgIG9wdGlvbnMuc2RrLFxuICAgIG9wdGlvbnMub3ZlcnJpZGVUZW1wbGF0ZSk7XG4gIGF3YWl0IHB1Ymxpc2hBc3NldHMobGVnYWN5QXNzZXRzLnRvTWFuaWZlc3Qoc3RhY2tBcnRpZmFjdC5hc3NlbWJseS5kaXJlY3RvcnkpLCBvcHRpb25zLnNka1Byb3ZpZGVyLCBzdGFja0Vudik7XG5cbiAgaWYgKG9wdGlvbnMuaG90c3dhcCkge1xuICAgIC8vIGF0dGVtcHQgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudCBpZiBwb3NzaWJsZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3Rzd2FwRGVwbG95bWVudFJlc3VsdCA9IGF3YWl0IHRyeUhvdHN3YXBEZXBsb3ltZW50KG9wdGlvbnMuc2RrUHJvdmlkZXIsIGFzc2V0UGFyYW1zLCBjbG91ZEZvcm1hdGlvblN0YWNrLCBzdGFja0FydGlmYWN0KTtcbiAgICAgIGlmIChob3Rzd2FwRGVwbG95bWVudFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gaG90c3dhcERlcGxveW1lbnRSZXN1bHQ7XG4gICAgICB9XG4gICAgICBwcmludCgnQ291bGQgbm90IHBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsIGFzIHRoZSBzdGFjayAlcyBjb250YWlucyBub24tQXNzZXQgY2hhbmdlcycsIHN0YWNrQXJ0aWZhY3QuZGlzcGxheU5hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgcHJpbnQoJ0NvdWxkIG5vdCBwZXJmb3JtIGEgaG90c3dhcCBkZXBsb3ltZW50LCBiZWNhdXNlIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQ6ICVzJywgZS5tZXNzYWdlKTtcbiAgICB9XG4gICAgcHJpbnQoJ0ZhbGxpbmcgYmFjayB0byBkb2luZyBhIGZ1bGwgZGVwbG95bWVudCcpO1xuICB9XG5cbiAgLy8gY291bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIGRlcGxveW1lbnQsIHBlcmZvcm0gYSBmdWxsIENGTiBkZXBsb3kgaW5zdGVhZFxuICByZXR1cm4gcHJlcGFyZUFuZEV4ZWN1dGVDaGFuZ2VTZXQob3B0aW9ucywgY2xvdWRGb3JtYXRpb25TdGFjaywgc3RhY2tBcnRpZmFjdCwgc3RhY2tQYXJhbXMsIGJvZHlQYXJhbWV0ZXIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kRXhlY3V0ZUNoYW5nZVNldChcbiAgb3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zLCBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLFxuICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIHN0YWNrUGFyYW1zOiBQYXJhbWV0ZXJWYWx1ZXMsIGJvZHlQYXJhbWV0ZXI6IFRlbXBsYXRlQm9keVBhcmFtZXRlcixcbik6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgLy8gaWYgd2UgZ290IGhlcmUsIGFuZCBob3Rzd2FwIGlzIGVuYWJsZWQsIHRoYXQgbWVhbnMgY2hhbmdlcyBjb3VsZG4ndCBiZSBob3Rzd2FwcGVkLFxuICAvLyBhbmQgd2UgaGFkIHRvIGZhbGwgYmFjayBvbiBhIGZ1bGwgZGVwbG95bWVudC4gTm90ZSB0aGF0IGZhY3QgaW4gb3VyIFVzZXItQWdlbnRcbiAgaWYgKG9wdGlvbnMuaG90c3dhcCkge1xuICAgIG9wdGlvbnMuc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudCgnY2RrLWhvdHN3YXAvZmFsbGJhY2snKTtcbiAgfVxuXG4gIGNvbnN0IGNmbiA9IG9wdGlvbnMuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gIGNvbnN0IGRlcGxveU5hbWUgPSBvcHRpb25zLmRlcGxveU5hbWUgPz8gc3RhY2tBcnRpZmFjdC5zdGFja05hbWU7XG5cbiAgY29uc3QgY2hhbmdlU2V0TmFtZSA9IG9wdGlvbnMuY2hhbmdlU2V0TmFtZSA/PyAnY2RrLWRlcGxveS1jaGFuZ2Utc2V0JztcbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suZXhpc3RzKSB7XG4gICAgLy9EZWxldGUgYW55IGV4aXN0aW5nIGNoYW5nZSBzZXRzIGdlbmVyYXRlZCBieSBDREsgc2luY2UgY2hhbmdlIHNldCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cbiAgICAvL1RoZSBkZWxldGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsIGFzIGxvbmcgYXMgdGhlIHN0YWNrIGV4aXN0cyAoZXZlbiBpZiB0aGUgY2hhbmdlIHNldCBkb2VzIG5vdCBleGlzdCkuXG4gICAgZGVidWcoYFJlbW92aW5nIGV4aXN0aW5nIGNoYW5nZSBzZXQgd2l0aCBuYW1lICR7Y2hhbmdlU2V0TmFtZX0gaWYgaXQgZXhpc3RzYCk7XG4gICAgYXdhaXQgY2ZuLmRlbGV0ZUNoYW5nZVNldCh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSwgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSB9KS5wcm9taXNlKCk7XG4gIH1cblxuICBjb25zdCB1cGRhdGUgPSBjbG91ZEZvcm1hdGlvblN0YWNrLmV4aXN0cyAmJiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdSRVZJRVdfSU5fUFJPR1JFU1MnO1xuXG4gIGRlYnVnKGBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBDaGFuZ2VTZXQgd2l0aCBuYW1lICR7Y2hhbmdlU2V0TmFtZX0gdG8gJHt1cGRhdGUgPyAndXBkYXRlJyA6ICdjcmVhdGUnfSBzdGFjayAke2RlcGxveU5hbWV9YCk7XG4gIHByaW50KCclczogY3JlYXRpbmcgQ2xvdWRGb3JtYXRpb24gY2hhbmdlc2V0Li4uJywgY2hhbGsuYm9sZChkZXBsb3lOYW1lKSk7XG4gIGNvbnN0IGV4ZWN1dGlvbklkID0gdXVpZC52NCgpO1xuICBjb25zdCBjaGFuZ2VTZXQgPSBhd2FpdCBjZm4uY3JlYXRlQ2hhbmdlU2V0KHtcbiAgICBTdGFja05hbWU6IGRlcGxveU5hbWUsXG4gICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgICBDaGFuZ2VTZXRUeXBlOiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0ID8gJ0lNUE9SVCcgOiB1cGRhdGUgPyAnVVBEQVRFJyA6ICdDUkVBVEUnLFxuICAgIFJlc291cmNlc1RvSW1wb3J0OiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0LFxuICAgIERlc2NyaXB0aW9uOiBgQ0RLIENoYW5nZXNldCBmb3IgZXhlY3V0aW9uICR7ZXhlY3V0aW9uSWR9YCxcbiAgICBUZW1wbGF0ZUJvZHk6IGJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVCb2R5LFxuICAgIFRlbXBsYXRlVVJMOiBib2R5UGFyYW1ldGVyLlRlbXBsYXRlVVJMLFxuICAgIFBhcmFtZXRlcnM6IHN0YWNrUGFyYW1zLmFwaVBhcmFtZXRlcnMsXG4gICAgUm9sZUFSTjogb3B0aW9ucy5yb2xlQXJuLFxuICAgIE5vdGlmaWNhdGlvbkFSTnM6IG9wdGlvbnMubm90aWZpY2F0aW9uQXJucyxcbiAgICBDYXBhYmlsaXRpZXM6IFsnQ0FQQUJJTElUWV9JQU0nLCAnQ0FQQUJJTElUWV9OQU1FRF9JQU0nLCAnQ0FQQUJJTElUWV9BVVRPX0VYUEFORCddLFxuICAgIFRhZ3M6IG9wdGlvbnMudGFncyxcbiAgfSkucHJvbWlzZSgpO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSBvcHRpb25zLmV4ZWN1dGUgPz8gdHJ1ZTtcblxuICBkZWJ1ZygnSW5pdGlhdGVkIGNyZWF0aW9uIG9mIGNoYW5nZXNldDogJXM7IHdhaXRpbmcgZm9yIGl0IHRvIGZpbmlzaCBjcmVhdGluZy4uLicsIGNoYW5nZVNldC5JZCk7XG4gIC8vIEZldGNoaW5nIGFsbCBwYWdlcyBpZiB3ZSdsbCBleGVjdXRlLCBzbyB3ZSBjYW4gaGF2ZSB0aGUgY29ycmVjdCBjaGFuZ2UgY291bnQgd2hlbiBtb25pdG9yaW5nLlxuICBjb25zdCBjaGFuZ2VTZXREZXNjcmlwdGlvbiA9IGF3YWl0IHdhaXRGb3JDaGFuZ2VTZXQoY2ZuLCBkZXBsb3lOYW1lLCBjaGFuZ2VTZXROYW1lLCB7IGZldGNoQWxsOiBleGVjdXRlIH0pO1xuXG4gIC8vIFVwZGF0ZSB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIG9ubHkgaWYgaXQgaGFzIGNoYW5nZWQuXG4gIGNvbnN0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbiA9IHN0YWNrQXJ0aWZhY3QudGVybWluYXRpb25Qcm90ZWN0aW9uID8/IGZhbHNlO1xuICBpZiAoISFjbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gdGVybWluYXRpb25Qcm90ZWN0aW9uKSB7XG4gICAgZGVidWcoJ1VwZGF0aW5nIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZnJvbSAlcyB0byAlcyBmb3Igc3RhY2sgJXMnLCBjbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiwgdGVybWluYXRpb25Qcm90ZWN0aW9uLCBkZXBsb3lOYW1lKTtcbiAgICBhd2FpdCBjZm4udXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKHtcbiAgICAgIFN0YWNrTmFtZTogZGVwbG95TmFtZSxcbiAgICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogdGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgIH0pLnByb21pc2UoKTtcbiAgICBkZWJ1ZygnVGVybWluYXRpb24gcHJvdGVjdGlvbiB1cGRhdGVkIHRvICVzIGZvciBzdGFjayAlcycsIHRlcm1pbmF0aW9uUHJvdGVjdGlvbiwgZGVwbG95TmFtZSk7XG4gIH1cblxuICBpZiAoY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGNoYW5nZVNldERlc2NyaXB0aW9uKSkge1xuICAgIGRlYnVnKCdObyBjaGFuZ2VzIGFyZSB0byBiZSBwZXJmb3JtZWQgb24gJXMuJywgZGVwbG95TmFtZSk7XG4gICAgaWYgKG9wdGlvbnMuZXhlY3V0ZSkge1xuICAgICAgZGVidWcoJ0RlbGV0aW5nIGVtcHR5IGNoYW5nZSBzZXQgJXMnLCBjaGFuZ2VTZXQuSWQpO1xuICAgICAgYXdhaXQgY2ZuLmRlbGV0ZUNoYW5nZVNldCh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSwgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSB9KS5wcm9taXNlKCk7XG4gICAgfVxuICAgIHJldHVybiB7IG5vT3A6IHRydWUsIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cywgc3RhY2tBcm46IGNoYW5nZVNldC5TdGFja0lkISB9O1xuICB9XG5cbiAgaWYgKGV4ZWN1dGUpIHtcbiAgICBkZWJ1ZygnSW5pdGlhdGluZyBleGVjdXRpb24gb2YgY2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzJywgY2hhbmdlU2V0LklkLCBkZXBsb3lOYW1lKTtcblxuICAgIGNvbnN0IHNob3VsZERpc2FibGVSb2xsYmFjayA9IG9wdGlvbnMucm9sbGJhY2sgPT09IGZhbHNlO1xuICAgIC8vIERvIGEgYml0IG9mIGNvbnRvcnRpb25zIHRvIG9ubHkgcGFzcyB0aGUgYERpc2FibGVSb2xsYmFja2AgZmxhZyBpZiBpdCdzIHRydWUuIFRoYXQgd2F5LFxuICAgIC8vIENsb3VkRm9ybWF0aW9uIHdvbid0IGJhbGsgYXQgdGhlIHVucmVjb2duaXplZCBvcHRpb24gaW4gcmVnaW9ucyB3aGVyZSB0aGUgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIHlldC5cbiAgICBjb25zdCBkaXNhYmxlUm9sbGJhY2sgPSBzaG91bGREaXNhYmxlUm9sbGJhY2sgPyB7IERpc2FibGVSb2xsYmFjazogdHJ1ZSB9IDogdW5kZWZpbmVkO1xuXG4gICAgYXdhaXQgY2ZuLmV4ZWN1dGVDaGFuZ2VTZXQoeyBTdGFja05hbWU6IGRlcGxveU5hbWUsIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsIC4uLmRpc2FibGVSb2xsYmFjayB9KS5wcm9taXNlKCk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIGNvbnN0IGNoYW5nZVNldExlbmd0aDogbnVtYmVyID0gKGNoYW5nZVNldERlc2NyaXB0aW9uLkNoYW5nZXMgPz8gW10pLmxlbmd0aDtcbiAgICBjb25zdCBtb25pdG9yID0gb3B0aW9ucy5xdWlldCA/IHVuZGVmaW5lZCA6IFN0YWNrQWN0aXZpdHlNb25pdG9yLndpdGhEZWZhdWx0UHJpbnRlcihjZm4sIGRlcGxveU5hbWUsIHN0YWNrQXJ0aWZhY3QsIHtcbiAgICAgIC8vICsxIGZvciB0aGUgZXh0cmEgZXZlbnQgZW1pdHRlZCBmcm9tIHVwZGF0ZXMuXG4gICAgICByZXNvdXJjZXNUb3RhbDogY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMgPyBjaGFuZ2VTZXRMZW5ndGggKyAxIDogY2hhbmdlU2V0TGVuZ3RoLFxuICAgICAgcHJvZ3Jlc3M6IG9wdGlvbnMucHJvZ3Jlc3MsXG4gICAgICBjaGFuZ2VTZXRDcmVhdGlvblRpbWU6IGNoYW5nZVNldERlc2NyaXB0aW9uLkNyZWF0aW9uVGltZSxcbiAgICAgIGNpOiBvcHRpb25zLmNpLFxuICAgIH0pLnN0YXJ0KCk7XG4gICAgZGVidWcoJ0V4ZWN1dGlvbiBvZiBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMgaGFzIHN0YXJ0ZWQ7IHdhaXRpbmcgZm9yIHRoZSB1cGRhdGUgdG8gY29tcGxldGUuLi4nLCBjaGFuZ2VTZXQuSWQsIGRlcGxveU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaW5hbFN0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVwbG95KGNmbiwgZGVwbG95TmFtZSk7XG5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IHJlYWxseSBoYXBwZW4sIGJ1dCBjYXRjaCBpdCBhbnl3YXkuIFlvdSBuZXZlciBrbm93LlxuICAgICAgaWYgKCFmaW5hbFN0YWNrKSB7IHRocm93IG5ldyBFcnJvcignU3RhY2sgZGVwbG95IGZhaWxlZCAodGhlIHN0YWNrIGRpc2FwcGVhcmVkIHdoaWxlIHdlIHdlcmUgZGVwbG95aW5nIGl0KScpOyB9XG4gICAgICBjbG91ZEZvcm1hdGlvblN0YWNrID0gZmluYWxTdGFjaztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3VmZml4V2l0aEVycm9ycyhlLm1lc3NhZ2UsIG1vbml0b3I/LmVycm9ycykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBtb25pdG9yPy5zdG9wKCk7XG4gICAgfVxuICAgIGRlYnVnKCdTdGFjayAlcyBoYXMgY29tcGxldGVkIHVwZGF0aW5nJywgZGVwbG95TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnQoJ0NoYW5nZXNldCAlcyBjcmVhdGVkIGFuZCB3YWl0aW5nIGluIHJldmlldyBmb3IgbWFudWFsIGV4ZWN1dGlvbiAoLS1uby1leGVjdXRlKScsIGNoYW5nZVNldC5JZCk7XG4gIH1cblxuICByZXR1cm4geyBub09wOiBmYWxzZSwgb3V0cHV0czogY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLCBzdGFja0FybjogY2hhbmdlU2V0LlN0YWNrSWQhIH07XG59XG5cbi8qKlxuICogUHJlcGFyZXMgdGhlIGJvZHkgcGFyYW1ldGVyIGZvciArQ3JlYXRlQ2hhbmdlU2V0Ky5cbiAqXG4gKiBJZiB0aGUgdGVtcGxhdGUgaXMgc21hbGwgZW5vdWdoIHRvIGJlIGlubGluZWQgaW50byB0aGUgQVBJIGNhbGwsIGp1c3QgcmV0dXJuXG4gKiBpdCBpbW1lZGlhdGVseS5cbiAqXG4gKiBPdGhlcndpc2UsIGFkZCBpdCB0byB0aGUgYXNzZXQgbWFuaWZlc3QgdG8gZ2V0IHVwbG9hZGVkIHRvIHRoZSBzdGFnaW5nXG4gKiBidWNrZXQgYW5kIHJldHVybiBpdHMgY29vcmRpbmF0ZXMuIElmIHRoZXJlIGlzIG5vIHN0YWdpbmcgYnVja2V0LCBhbiBlcnJvclxuICogaXMgdGhyb3duLlxuICpcbiAqIEBwYXJhbSBzdGFjayAgICAgdGhlIHN5bnRoZXNpemVkIHN0YWNrIHRoYXQgcHJvdmlkZXMgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gKiBAcGFyYW0gdG9vbGtpdEluZm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRvb2xraXQgc3RhY2tcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWFrZUJvZHlQYXJhbWV0ZXIoXG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gIHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0QnVpbGRlcixcbiAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvLFxuICBzZGs6IElTREssXG4gIG92ZXJyaWRlVGVtcGxhdGU/OiBhbnksXG4pOiBQcm9taXNlPFRlbXBsYXRlQm9keVBhcmFtZXRlcj4ge1xuXG4gIC8vIElmIHRoZSB0ZW1wbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIHVwbG9hZGVkIHRvIFMzLCBqdXN0IHVzZSBpdCBmcm9tIHRoZXJlLlxuICBpZiAoc3RhY2suc3RhY2tUZW1wbGF0ZUFzc2V0T2JqZWN0VXJsICYmICFvdmVycmlkZVRlbXBsYXRlKSB7XG4gICAgcmV0dXJuIHsgVGVtcGxhdGVVUkw6IHJlc3RVcmxGcm9tTWFuaWZlc3Qoc3RhY2suc3RhY2tUZW1wbGF0ZUFzc2V0T2JqZWN0VXJsLCByZXNvbHZlZEVudmlyb25tZW50LCBzZGspIH07XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIHBhc3MgdmlhIEFQSSBjYWxsIChpZiBzbWFsbCkgb3IgdXBsb2FkIGhlcmUgKGlmIGxhcmdlKVxuICBjb25zdCB0ZW1wbGF0ZUpzb24gPSB0b1lBTUwob3ZlcnJpZGVUZW1wbGF0ZSA/PyBzdGFjay50ZW1wbGF0ZSk7XG5cbiAgaWYgKHRlbXBsYXRlSnNvbi5sZW5ndGggPD0gTEFSR0VfVEVNUExBVEVfU0laRV9LQiAqIDEwMjQpIHtcbiAgICByZXR1cm4geyBUZW1wbGF0ZUJvZHk6IHRlbXBsYXRlSnNvbiB9O1xuICB9XG5cbiAgaWYgKCF0b29sa2l0SW5mby5mb3VuZCkge1xuICAgIGVycm9yKFxuICAgICAgYFRoZSB0ZW1wbGF0ZSBmb3Igc3RhY2sgXCIke3N0YWNrLmRpc3BsYXlOYW1lfVwiIGlzICR7TWF0aC5yb3VuZCh0ZW1wbGF0ZUpzb24ubGVuZ3RoIC8gMTAyNCl9S2lCLiBgICtcbiAgICAgIGBUZW1wbGF0ZXMgbGFyZ2VyIHRoYW4gJHtMQVJHRV9URU1QTEFURV9TSVpFX0tCfUtpQiBtdXN0IGJlIHVwbG9hZGVkIHRvIFMzLlxcbmAgK1xuICAgICAgJ1J1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gb3JkZXIgdG8gc2V0dXAgYW4gUzMgYnVja2V0IGluIHRoaXMgZW52aXJvbm1lbnQsIGFuZCB0aGVuIHJlLWRlcGxveTpcXG5cXG4nLFxuICAgICAgY2hhbGsuYmx1ZShgXFx0JCBjZGsgYm9vdHN0cmFwICR7cmVzb2x2ZWRFbnZpcm9ubWVudC5uYW1lfVxcbmApKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignVGVtcGxhdGUgdG9vIGxhcmdlIHRvIGRlcGxveSAoXCJjZGsgYm9vdHN0cmFwXCIgaXMgcmVxdWlyZWQpJyk7XG4gIH1cblxuICBjb25zdCB0ZW1wbGF0ZUhhc2ggPSBjb250ZW50SGFzaCh0ZW1wbGF0ZUpzb24pO1xuICBjb25zdCBrZXkgPSBgY2RrLyR7c3RhY2suaWR9LyR7dGVtcGxhdGVIYXNofS55bWxgO1xuXG4gIGxldCB0ZW1wbGF0ZUZpbGUgPSBzdGFjay50ZW1wbGF0ZUZpbGU7XG4gIGlmIChvdmVycmlkZVRlbXBsYXRlKSB7XG4gICAgLy8gQWRkIGEgdmFyaWFudCBvZiB0aGlzIHRlbXBsYXRlXG4gICAgdGVtcGxhdGVGaWxlID0gYCR7c3RhY2sudGVtcGxhdGVGaWxlfS0ke3RlbXBsYXRlSGFzaH0ueWFtbGA7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBsYXRlRmlsZSwgdGVtcGxhdGVKc29uLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9XG5cbiAgYXNzZXRNYW5pZmVzdC5hZGRGaWxlQXNzZXQodGVtcGxhdGVIYXNoLCB7XG4gICAgcGF0aDogdGVtcGxhdGVGaWxlLFxuICB9LCB7XG4gICAgYnVja2V0TmFtZTogdG9vbGtpdEluZm8uYnVja2V0TmFtZSxcbiAgICBvYmplY3RLZXk6IGtleSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGVVUkwgPSBgJHt0b29sa2l0SW5mby5idWNrZXRVcmx9LyR7a2V5fWA7XG4gIGRlYnVnKCdTdG9yaW5nIHRlbXBsYXRlIGluIFMzIGF0OicsIHRlbXBsYXRlVVJMKTtcbiAgcmV0dXJuIHsgVGVtcGxhdGVVUkw6IHRlbXBsYXRlVVJMIH07XG59XG5cbi8qKlxuICogUHJlcGFyZSBhIGJvZHkgcGFyYW1ldGVyIGZvciBDRk4sIHBlcmZvcm1pbmcgdGhlIHVwbG9hZFxuICpcbiAqIFJldHVybiBpdCBhcy1pcyBpZiBpdCBpcyBzbWFsbCBlbm91Z2ggdG8gcGFzcyBpbiB0aGUgQVBJIGNhbGwsXG4gKiB1cGxvYWQgdG8gUzMgYW5kIHJldHVybiB0aGUgY29vcmRpbmF0ZXMgaWYgaXQgaXMgbm90LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUJvZHlQYXJhbWV0ZXJBbmRVcGxvYWQoXG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gIHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8sXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgc2RrOiBJU0RLLFxuICBvdmVycmlkZVRlbXBsYXRlPzogYW55KTogUHJvbWlzZTxUZW1wbGF0ZUJvZHlQYXJhbWV0ZXI+IHtcblxuICAvLyBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgYWN0dWFsIGFzc2V0IG1hbmlmZXN0IGhlcmUsIHNvIHByZXRlbmQgdGhhdCB0aGVcbiAgLy8gc3RhY2sgZG9lc24ndCBoYXZlIGEgcHJlLXB1Ymxpc2hlZCBVUkwuXG4gIGNvbnN0IGZvcmNlVXBsb2FkU3RhY2sgPSBPYmplY3QuY3JlYXRlKHN0YWNrLCB7XG4gICAgc3RhY2tUZW1wbGF0ZUFzc2V0T2JqZWN0VXJsOiB7IHZhbHVlOiB1bmRlZmluZWQgfSxcbiAgfSk7XG5cbiAgY29uc3QgYnVpbGRlciA9IG5ldyBBc3NldE1hbmlmZXN0QnVpbGRlcigpO1xuICBjb25zdCBib2R5cGFyYW0gPSBhd2FpdCBtYWtlQm9keVBhcmFtZXRlcihmb3JjZVVwbG9hZFN0YWNrLCByZXNvbHZlZEVudmlyb25tZW50LCBidWlsZGVyLCB0b29sa2l0SW5mbywgc2RrLCBvdmVycmlkZVRlbXBsYXRlKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBidWlsZGVyLnRvTWFuaWZlc3Qoc3RhY2suYXNzZW1ibHkuZGlyZWN0b3J5KTtcbiAgYXdhaXQgcHVibGlzaEFzc2V0cyhtYW5pZmVzdCwgc2RrUHJvdmlkZXIsIHJlc29sdmVkRW52aXJvbm1lbnQsIHsgcXVpZXQ6IHRydWUgfSk7XG4gIHJldHVybiBib2R5cGFyYW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gYmUgZGVzdHJveWVkXG4gICAqL1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIHNkazogSVNESztcbiAgcm9sZUFybj86IHN0cmluZztcbiAgZGVwbG95TmFtZT86IHN0cmluZztcbiAgcXVpZXQ/OiBib29sZWFuO1xuICBjaT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXN0cm95U3RhY2sob3B0aW9uczogRGVzdHJveVN0YWNrT3B0aW9ucykge1xuICBjb25zdCBkZXBsb3lOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lIHx8IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lO1xuICBjb25zdCBjZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gIGNvbnN0IGN1cnJlbnRTdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgZGVwbG95TmFtZSk7XG4gIGlmICghY3VycmVudFN0YWNrLmV4aXN0cykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtb25pdG9yID0gb3B0aW9ucy5xdWlldCA/IHVuZGVmaW5lZCA6IFN0YWNrQWN0aXZpdHlNb25pdG9yLndpdGhEZWZhdWx0UHJpbnRlcihjZm4sIGRlcGxveU5hbWUsIG9wdGlvbnMuc3RhY2ssIHtcbiAgICBjaTogb3B0aW9ucy5jaSxcbiAgfSkuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNmbi5kZWxldGVTdGFjayh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSwgUm9sZUFSTjogb3B0aW9ucy5yb2xlQXJuIH0pLnByb21pc2UoKTtcbiAgICBjb25zdCBkZXN0cm95ZWRTdGFjayA9IGF3YWl0IHdhaXRGb3JTdGFja0RlbGV0ZShjZm4sIGRlcGxveU5hbWUpO1xuICAgIGlmIChkZXN0cm95ZWRTdGFjayAmJiBkZXN0cm95ZWRTdGFjay5zdGFja1N0YXR1cy5uYW1lICE9PSAnREVMRVRFX0NPTVBMRVRFJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVzdHJveSAke2RlcGxveU5hbWV9OiAke2Rlc3Ryb3llZFN0YWNrLnN0YWNrU3RhdHVzfWApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihzdWZmaXhXaXRoRXJyb3JzKGUubWVzc2FnZSwgbW9uaXRvcj8uZXJyb3JzKSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKG1vbml0b3IpIHsgYXdhaXQgbW9uaXRvci5zdG9wKCk7IH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHdlIGNhbiBza2lwIGRlcGxveW1lbnRcbiAqXG4gKiBXZSBkbyB0aGlzIGluIGEgY29tcGxpY2F0ZWQgd2F5IGJ5IHByZXByb2Nlc3NpbmcgKGluc3RlYWQgb2YganVzdFxuICogbG9va2luZyBhdCB0aGUgY2hhbmdlc2V0KSwgYmVjYXVzZSBpZiB0aGVyZSBhcmUgbmVzdGVkIHN0YWNrcyBpbnZvbHZlZFxuICogdGhlIGNoYW5nZXNldCB3aWxsIGFsd2F5cyBzaG93IHRoZSBuZXN0ZWQgc3RhY2tzIGFzIG5lZWRpbmcgdG8gYmVcbiAqIHVwZGF0ZWQsIGFuZCB0aGUgZGVwbG95bWVudCB3aWxsIHRha2UgYSBsb25nIHRpbWUgdG8gaW4gZWZmZWN0IG5vdFxuICogZG8gYW55dGhpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhblNraXBEZXBsb3koXG4gIGRlcGxveVN0YWNrT3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zLFxuICBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLFxuICBwYXJhbWV0ZXJDaGFuZ2VzOiBQYXJhbWV0ZXJDaGFuZ2VzKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgY29uc3QgZGVwbG95TmFtZSA9IGRlcGxveVN0YWNrT3B0aW9ucy5kZXBsb3lOYW1lIHx8IGRlcGxveVN0YWNrT3B0aW9ucy5zdGFjay5zdGFja05hbWU7XG4gIGRlYnVnKGAke2RlcGxveU5hbWV9OiBjaGVja2luZyBpZiB3ZSBjYW4gc2tpcCBkZXBsb3lgKTtcblxuICAvLyBGb3JjZWQgZGVwbG95XG4gIGlmIChkZXBsb3lTdGFja09wdGlvbnMuZm9yY2UpIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogZm9yY2VkIGRlcGxveW1lbnRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDcmVhdGluZyBjaGFuZ2VzZXQgb25seSAoZGVmYXVsdCB0cnVlKSwgbmV2ZXIgc2tpcFxuICBpZiAoZGVwbG95U3RhY2tPcHRpb25zLmV4ZWN1dGUgPT09IGZhbHNlKSB7XG4gICAgZGVidWcoYCR7ZGVwbG95TmFtZX06IC0tbm8tZXhlY3V0ZSwgYWx3YXlzIGNyZWF0aW5nIGNoYW5nZSBzZXRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBObyBleGlzdGluZyBzdGFja1xuICBpZiAoIWNsb3VkRm9ybWF0aW9uU3RhY2suZXhpc3RzKSB7XG4gICAgZGVidWcoYCR7ZGVwbG95TmFtZX06IG5vIGV4aXN0aW5nIHN0YWNrYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGVtcGxhdGUgaGFzIGNoYW5nZWQgKGFzc2V0cyB0YWtlbiBpbnRvIGFjY291bnQgaGVyZSlcbiAgaWYgKEpTT04uc3RyaW5naWZ5KGRlcGxveVN0YWNrT3B0aW9ucy5zdGFjay50ZW1wbGF0ZSkgIT09IEpTT04uc3RyaW5naWZ5KGF3YWl0IGNsb3VkRm9ybWF0aW9uU3RhY2sudGVtcGxhdGUoKSkpIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogdGVtcGxhdGUgaGFzIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUYWdzIGhhdmUgY2hhbmdlZFxuICBpZiAoIWNvbXBhcmVUYWdzKGNsb3VkRm9ybWF0aW9uU3RhY2sudGFncywgZGVwbG95U3RhY2tPcHRpb25zLnRhZ3MgPz8gW10pKSB7XG4gICAgZGVidWcoYCR7ZGVwbG95TmFtZX06IHRhZ3MgaGF2ZSBjaGFuZ2VkYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGVybWluYXRpb24gcHJvdGVjdGlvbiBoYXMgYmVlbiB1cGRhdGVkXG4gIGlmICghIWRlcGxveVN0YWNrT3B0aW9ucy5zdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24gIT09ICEhY2xvdWRGb3JtYXRpb25TdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24pIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogdGVybWluYXRpb24gcHJvdGVjdGlvbiBoYXMgYmVlbiB1cGRhdGVkYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gUGFyYW1ldGVycyBoYXZlIGNoYW5nZWRcbiAgaWYgKHBhcmFtZXRlckNoYW5nZXMpIHtcbiAgICBpZiAocGFyYW1ldGVyQ2hhbmdlcyA9PT0gJ3NzbScpIHtcbiAgICAgIGRlYnVnKGAke2RlcGxveU5hbWV9OiBzb21lIHBhcmFtZXRlcnMgY29tZSBmcm9tIFNTTSBzbyB3ZSBoYXZlIHRvIGFzc3VtZSB0aGV5IG1heSBoYXZlIGNoYW5nZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoYCR7ZGVwbG95TmFtZX06IHBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VkYCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEV4aXN0aW5nIHN0YWNrIGlzIGluIGEgZmFpbGVkIHN0YXRlXG4gIGlmIChjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLmlzRmFpbHVyZSkge1xuICAgIGRlYnVnKGAke2RlcGxveU5hbWV9OiBzdGFjayBpcyBpbiBhIGZhaWx1cmUgc3RhdGVgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBXZSBjYW4gc2tpcCBkZXBsb3lcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIGxpc3Qgb2YgdGFncywgcmV0dXJucyB0cnVlIGlmIGlkZW50aWNhbC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZVRhZ3MoYTogVGFnW10sIGI6IFRhZ1tdKTogYm9vbGVhbiB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGFUYWcgb2YgYSkge1xuICAgIGNvbnN0IGJUYWcgPSBiLmZpbmQodGFnID0+IHRhZy5LZXkgPT09IGFUYWcuS2V5KTtcblxuICAgIGlmICghYlRhZyB8fCBiVGFnLlZhbHVlICE9PSBhVGFnLlZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRm9ybWF0IGFuIFMzIFVSTCBpbiB0aGUgbWFuaWZlc3QgZm9yIHVzZSB3aXRoIENsb3VkRm9ybWF0aW9uXG4gKlxuICogUmVwbGFjZXMgZW52aXJvbm1lbnQgcGxhY2Vob2xkZXJzICh3aGljaCB0aGlzIGZpZWxkIG1heSBjb250YWluKSxcbiAqIGFuZCByZWZvcm1hdHMgczM6Ly8uLi4vLi4uIHVybHMgaW50byBTMyBSRVNUIFVSTHMgKHdoaWNoIENsb3VkRm9ybWF0aW9uXG4gKiBleHBlY3RzKVxuICovXG5mdW5jdGlvbiByZXN0VXJsRnJvbU1hbmlmZXN0KHVybDogc3RyaW5nLCBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsIHNkazogSVNESyk6IHN0cmluZyB7XG4gIGNvbnN0IGRvTm90VXNlTWFya2VyID0gJyoqRE9OT1RVU0UqKic7XG4gIC8vIFRoaXMgVVJMIG1heSBjb250YWluIHBsYWNlaG9sZGVycywgc28gc3RpbGwgc3Vic3RpdHV0ZSB0aG9zZS5cbiAgdXJsID0gY3hhcGkuRW52aXJvbm1lbnRQbGFjZWhvbGRlcnMucmVwbGFjZSh1cmwsIHtcbiAgICBhY2NvdW50SWQ6IGVudmlyb25tZW50LmFjY291bnQsXG4gICAgcmVnaW9uOiBlbnZpcm9ubWVudC5yZWdpb24sXG4gICAgcGFydGl0aW9uOiBkb05vdFVzZU1hcmtlcixcbiAgfSk7XG5cbiAgLy8gWWVzLCB0aGlzIGlzIGV4dHJlbWVseSBjcnVkZSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhpcyBzbyBJJ20gbm90IGluY2xpbmVkIHRvIHNwZW5kXG4gIC8vIGEgbG90IG9mIGVmZm9ydCB0cnlpbmcgdG8gdGhyZWFkIHRoZSByaWdodCB2YWx1ZSB0byB0aGlzIGxvY2F0aW9uLlxuICBpZiAodXJsLmluZGV4T2YoZG9Ob3RVc2VNYXJrZXIpID4gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgXFwnJHtBV1M6OlBhcnRpdGlvbn1cXCcgaW4gdGhlIFxcJ3N0YWNrVGVtcGxhdGVBc3NldE9iamVjdFVybFxcJyBmaWVsZCcpO1xuICB9XG5cbiAgY29uc3QgczNVcmwgPSB1cmwubWF0Y2goL3MzOlxcL1xcLyhbXi9dKylcXC8oLiopJC8pO1xuICBpZiAoIXMzVXJsKSB7IHJldHVybiB1cmw7IH1cblxuICAvLyBXZSBuZWVkIHRvIHBhc3MgYW4gJ2h0dHBzOi8vczMuUkVHSU9OLmFtYXpvbmF3cy5jb21bLmNuXS9idWNrZXQvb2JqZWN0JyBVUkwgdG8gQ2xvdWRGb3JtYXRpb24sIGJ1dCB3ZVxuICAvLyBnb3QgYW4gJ3MzOi8vYnVja2V0L29iamVjdCcgVVJMIGluc3RlYWQuIENvbnN0cnVjdCB0aGUgcmVzdCBBUEkgVVJMIGhlcmUuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBzM1VybFsxXTtcbiAgY29uc3Qgb2JqZWN0S2V5ID0gczNVcmxbMl07XG5cbiAgY29uc3QgdXJsU3VmZml4OiBzdHJpbmcgPSBzZGsuZ2V0RW5kcG9pbnRTdWZmaXgoZW52aXJvbm1lbnQucmVnaW9uKTtcbiAgcmV0dXJuIGBodHRwczovL3MzLiR7ZW52aXJvbm1lbnQucmVnaW9ufS4ke3VybFN1ZmZpeH0vJHtidWNrZXROYW1lfS8ke29iamVjdEtleX1gO1xufVxuXG5mdW5jdGlvbiBzdWZmaXhXaXRoRXJyb3JzKG1zZzogc3RyaW5nLCBlcnJvcnM/OiBzdHJpbmdbXSkge1xuICByZXR1cm4gZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwXG4gICAgPyBgJHttc2d9OiAke2Vycm9ycy5qb2luKCcsICcpfWBcbiAgICA6IG1zZztcbn1cbiJdfQ==
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF5QztBQUN6QywrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3QixzQ0FBd0Q7QUFFeEQsd0NBQWlEO0FBQ2pELDRDQUFzQztBQUN0QywyRUFBc0U7QUFDdEUsK0RBQXlEO0FBQ3pELHVEQUFtRDtBQUVuRCx5RkFBNEU7QUFDNUUsK0RBQTZEO0FBQzdELDZDQUF3QztBQUV4QywwREFHK0I7QUFDL0IseUZBQTJHO0FBMkwzRyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUUzQixLQUFLLFVBQVUsV0FBVyxDQUFDLE9BQTJCO0lBQzNELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFFcEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0lBRTdDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ2pFLElBQUksbUJBQW1CLEdBQUcsTUFBTSxvQ0FBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRTVFLElBQUksbUJBQW1CLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFO1FBQ3JELGVBQUssQ0FBQyx3QkFBd0IsVUFBVSxzRkFBc0YsQ0FBQyxDQUFDO1FBQ2hJLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLE1BQU0sbUNBQWtCLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFVBQVUsd0RBQXdELFlBQVksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ3pJO1FBQ0QsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSx1QkFBdUI7UUFDdkIsbUJBQW1CLEdBQUcsb0NBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUN6RTtJQUVELDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUsY0FBYztJQUNkLE1BQU0sWUFBWSxHQUFHLElBQUksNkNBQW9CLEVBQUUsQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBRyxNQUFNLG9DQUEyQixDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFN0gsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBRXZFLE1BQU0sY0FBYyxHQUFHLG1DQUFrQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0UsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLHFCQUFxQjtRQUMvQyxDQUFDLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7UUFDckYsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVuRCxJQUFJLE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7UUFDN0csZUFBSyxDQUFDLEdBQUcsVUFBVSxpREFBaUQsQ0FBQyxDQUFDO1FBQ3RFLCtFQUErRTtRQUMvRSxzQ0FBc0M7UUFDdEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLGVBQUssQ0FBQyxNQUFNLGFBQUksT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsaUZBQWlGLENBQUMsQ0FBQyxDQUFDO1NBQ3pIO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLE9BQU87U0FDdEMsQ0FBQztLQUNIO1NBQU07UUFDTCxlQUFLLENBQUMsR0FBRyxVQUFVLGdCQUFnQixDQUFDLENBQUM7S0FDdEM7SUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLGlCQUFpQixDQUMzQyxhQUFhLEVBQ2IsT0FBTyxDQUFDLG1CQUFtQixFQUMzQixZQUFZLEVBQ1osT0FBTyxDQUFDLFdBQVcsRUFDbkIsT0FBTyxDQUFDLEdBQUcsRUFDWCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QixNQUFNLGdDQUFhLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFOUcsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ25CLHNEQUFzRDtRQUN0RCxJQUFJO1lBQ0YsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLDBDQUFvQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2pJLElBQUksdUJBQXVCLEVBQUU7Z0JBQzNCLE9BQU8sdUJBQXVCLENBQUM7YUFDaEM7WUFDRCxlQUFLLENBQUMsb0ZBQW9GLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVkseURBQXNCLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxDQUFDLENBQUM7YUFDVDtZQUNELGVBQUssQ0FBQyx1R0FBdUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0g7UUFDRCxlQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztLQUNsRDtJQUVELDRFQUE0RTtJQUM1RSxPQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzdHLENBQUM7QUFoRkQsa0NBZ0ZDO0FBRUQsS0FBSyxVQUFVLDBCQUEwQixDQUN2QyxPQUEyQixFQUFFLG1CQUF3QyxFQUNyRSxhQUFnRCxFQUFFLFdBQTRCLEVBQUUsYUFBb0M7SUFFcEgscUZBQXFGO0lBQ3JGLGlGQUFpRjtJQUNqRixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQzNEO0lBRUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFFakUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSx1QkFBdUIsQ0FBQztJQUN2RSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtRQUM5Qix5RkFBeUY7UUFDekYsdUdBQXVHO1FBQ3ZHLGVBQUssQ0FBQywwQ0FBMEMsYUFBYSxlQUFlLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzlGO0lBRUQsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUM7SUFFM0csZUFBSyxDQUFDLDRDQUE0QyxhQUFhLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsVUFBVSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFILGVBQUssQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLGVBQWUsQ0FBQztRQUMxQyxTQUFTLEVBQUUsVUFBVTtRQUNyQixhQUFhLEVBQUUsYUFBYTtRQUM1QixhQUFhLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ2xGLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7UUFDNUMsV0FBVyxFQUFFLCtCQUErQixXQUFXLEVBQUU7UUFDekQsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZO1FBQ3hDLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVztRQUN0QyxVQUFVLEVBQUUsV0FBVyxDQUFDLGFBQWE7UUFDckMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7UUFDMUMsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLENBQUM7UUFDbEYsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUViLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0lBRXhDLGVBQUssQ0FBQywyRUFBMkUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakcsZ0dBQWdHO0lBQ2hHLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxpQ0FBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRTNHLHdEQUF3RDtJQUN4RCxNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLENBQUM7SUFDM0UsSUFBSSxDQUFDLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLEtBQUsscUJBQXFCLEVBQUU7UUFDekUsZUFBSyxDQUFDLDREQUE0RCxFQUFFLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xKLE1BQU0sR0FBRyxDQUFDLDJCQUEyQixDQUFDO1lBQ3BDLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLDJCQUEyQixFQUFFLHFCQUFxQjtTQUNuRCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixlQUFLLENBQUMsbURBQW1ELEVBQUUscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDL0Y7SUFFRCxJQUFJLHNDQUFxQixDQUFDLG9CQUFvQixDQUFDLEVBQUU7UUFDL0MsZUFBSyxDQUFDLHVDQUF1QyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixlQUFLLENBQUMsOEJBQThCLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDOUY7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBUSxFQUFFLENBQUM7S0FDM0Y7SUFFRCxJQUFJLE9BQU8sRUFBRTtRQUNYLGVBQUssQ0FBQyxrREFBa0QsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBGLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7UUFDekQsMEZBQTBGO1FBQzFGLDBHQUEwRztRQUMxRyxNQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUV0RixNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbEgsbUNBQW1DO1FBQ25DLE1BQU0sZUFBZSxHQUFXLENBQUMsb0JBQW9CLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDZDQUFvQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFO1lBQ2xILCtDQUErQztZQUMvQyxjQUFjLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ2xGLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxZQUFZO1lBQ3hELEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtTQUNmLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLGVBQUssQ0FBQywwRkFBMEYsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVILElBQUk7WUFDRixNQUFNLFVBQVUsR0FBRyxNQUFNLG1DQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUU3RCxxRUFBcUU7WUFDckUsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7YUFBRTtZQUMvRyxtQkFBbUIsR0FBRyxVQUFVLENBQUM7U0FDbEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMvRDtnQkFBUztZQUNSLE1BQU0sT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsZUFBSyxDQUFDLGlDQUFpQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3REO1NBQU07UUFDTCxlQUFLLENBQUMsZ0ZBQWdGLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZHO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLE9BQVEsRUFBRSxDQUFDO0FBQzdGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxLQUFLLFVBQVUsaUJBQWlCLENBQzlCLEtBQXdDLEVBQ3hDLG1CQUFzQyxFQUN0QyxhQUFtQyxFQUNuQyxXQUF3QixFQUN4QixHQUFTLEVBQ1QsZ0JBQXNCO0lBR3RCLDJFQUEyRTtJQUMzRSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7S0FDMUc7SUFFRCxvRUFBb0U7SUFDcEUsTUFBTSxZQUFZLEdBQUcsa0JBQU0sQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFaEUsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLHNCQUFzQixHQUFHLElBQUksRUFBRTtRQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDO0tBQ3ZDO0lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDdEIsZUFBSyxDQUNILDJCQUEyQixLQUFLLENBQUMsV0FBVyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTztZQUNqRyx5QkFBeUIsc0JBQXNCLCtCQUErQjtZQUM5RSx1R0FBdUcsRUFDdkcsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsbUJBQW1CLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztLQUMvRTtJQUVELE1BQU0sWUFBWSxHQUFHLDBCQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRSxJQUFJLFlBQVksTUFBTSxDQUFDO0lBRWxELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDdEMsSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQixpQ0FBaUM7UUFDakMsWUFBWSxHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxZQUFZLE9BQU8sQ0FBQztRQUM1RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZFO0lBRUQsYUFBYSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUU7UUFDdkMsSUFBSSxFQUFFLFlBQVk7S0FDbkIsRUFBRTtRQUNELFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTtRQUNsQyxTQUFTLEVBQUUsR0FBRztLQUNmLENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN0RCxlQUFLLENBQUMsNEJBQTRCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsMEJBQTBCLENBQzlDLEtBQXdDLEVBQ3hDLG1CQUFzQyxFQUN0QyxXQUF3QixFQUN4QixXQUF3QixFQUN4QixHQUFTLEVBQ1QsZ0JBQXNCO0lBRXRCLDhFQUE4RTtJQUM5RSwwQ0FBMEM7SUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUM1QywyQkFBMkIsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7S0FDbEQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLEdBQUcsSUFBSSw2Q0FBb0IsRUFBRSxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLE1BQU0saUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM5SCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsTUFBTSxnQ0FBYSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBbkJELGdFQW1CQztBQWVNLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBNEI7SUFDN0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNqRSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBRXpDLE1BQU0sWUFBWSxHQUFHLE1BQU0sb0NBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUN4QixPQUFPO0tBQ1I7SUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDZDQUFvQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUNsSCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7S0FDZixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFWCxJQUFJO1FBQ0YsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckYsTUFBTSxjQUFjLEdBQUcsTUFBTSxtQ0FBa0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUU7WUFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsVUFBVSxLQUFLLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ25GO0tBQ0Y7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUMvRDtZQUFTO1FBQ1IsSUFBSSxPQUFPLEVBQUU7WUFBRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUFFO0tBQ3ZDO0FBQ0gsQ0FBQztBQXZCRCxvQ0F1QkM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILEtBQUssVUFBVSxhQUFhLENBQzFCLGtCQUFzQyxFQUN0QyxtQkFBd0MsRUFDeEMsZ0JBQWtDO0lBRWxDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ3ZGLGVBQUssQ0FBQyxHQUFHLFVBQVUsa0NBQWtDLENBQUMsQ0FBQztJQUV2RCxnQkFBZ0I7SUFDaEIsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7UUFDNUIsZUFBSyxDQUFDLEdBQUcsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxxREFBcUQ7SUFDckQsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO1FBQ3hDLGVBQUssQ0FBQyxHQUFHLFVBQVUsNENBQTRDLENBQUMsQ0FBQztRQUNqRSxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsZUFBSyxDQUFDLEdBQUcsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRTtRQUM5RyxlQUFLLENBQUMsR0FBRyxVQUFVLHdCQUF3QixDQUFDLENBQUM7UUFDN0MsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELG9CQUFvQjtJQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDekUsZUFBSyxDQUFDLEdBQUcsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixLQUFLLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRTtRQUNwRyxlQUFLLENBQUMsR0FBRyxVQUFVLDJDQUEyQyxDQUFDLENBQUM7UUFDaEUsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELDBCQUEwQjtJQUMxQixJQUFJLGdCQUFnQixFQUFFO1FBQ3BCLElBQUksZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1lBQzlCLGVBQUssQ0FBQyxHQUFHLFVBQVUsNEVBQTRFLENBQUMsQ0FBQztTQUNsRzthQUFNO1lBQ0wsZUFBSyxDQUFDLEdBQUcsVUFBVSwyQkFBMkIsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELHNDQUFzQztJQUN0QyxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7UUFDN0MsZUFBSyxDQUFDLEdBQUcsVUFBVSwrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxxQkFBcUI7SUFDckIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxDQUFRLEVBQUUsQ0FBUTtJQUNyQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUN6QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUU7UUFDcEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3RDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsbUJBQW1CLENBQUMsR0FBVyxFQUFFLFdBQThCLEVBQUUsR0FBUztJQUNqRixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdEMsZ0VBQWdFO0lBQ2hFLEdBQUcsR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUMvQyxTQUFTLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDOUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLFNBQVMsRUFBRSxjQUFjO0tBQzFCLENBQUMsQ0FBQztJQUVILDZGQUE2RjtJQUM3RixxRUFBcUU7SUFDckUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztLQUNsRztJQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQUUsT0FBTyxHQUFHLENBQUM7S0FBRTtJQUUzQix3R0FBd0c7SUFDeEcsNEVBQTRFO0lBQzVFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0IsTUFBTSxTQUFTLEdBQVcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxPQUFPLGNBQWMsV0FBVyxDQUFDLE1BQU0sSUFBSSxTQUFTLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ3BGLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxNQUFpQjtJQUN0RCxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDaEMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IGFkZE1ldGFkYXRhQXNzZXRzVG9NYW5pZmVzdCB9IGZyb20gJy4uL2Fzc2V0cyc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBkZWJ1ZywgZXJyb3IsIHByaW50IH0gZnJvbSAnLi4vbG9nZ2luZyc7XG5pbXBvcnQgeyB0b1lBTUwgfSBmcm9tICcuLi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgQXNzZXRNYW5pZmVzdEJ1aWxkZXIgfSBmcm9tICcuLi91dGlsL2Fzc2V0LW1hbmlmZXN0LWJ1aWxkZXInO1xuaW1wb3J0IHsgcHVibGlzaEFzc2V0cyB9IGZyb20gJy4uL3V0aWwvYXNzZXQtcHVibGlzaGluZyc7XG5pbXBvcnQgeyBjb250ZW50SGFzaCB9IGZyb20gJy4uL3V0aWwvY29udGVudC1oYXNoJztcbmltcG9ydCB7IElTREssIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi9hd3MtYXV0aCc7XG5pbXBvcnQgeyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uIH0gZnJvbSAnLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyB0cnlIb3Rzd2FwRGVwbG95bWVudCB9IGZyb20gJy4vaG90c3dhcC1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBJQ09OIH0gZnJvbSAnLi9ob3Rzd2FwL2NvbW1vbic7XG5pbXBvcnQgeyBUb29sa2l0SW5mbyB9IGZyb20gJy4vdG9vbGtpdC1pbmZvJztcbmltcG9ydCB7XG4gIGNoYW5nZVNldEhhc05vQ2hhbmdlcywgQ2xvdWRGb3JtYXRpb25TdGFjaywgVGVtcGxhdGVQYXJhbWV0ZXJzLCB3YWl0Rm9yQ2hhbmdlU2V0LFxuICB3YWl0Rm9yU3RhY2tEZXBsb3ksIHdhaXRGb3JTdGFja0RlbGV0ZSwgUGFyYW1ldGVyVmFsdWVzLCBQYXJhbWV0ZXJDaGFuZ2VzLCBSZXNvdXJjZXNUb0ltcG9ydCxcbn0gZnJvbSAnLi91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFN0YWNrQWN0aXZpdHlNb25pdG9yLCBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MgfSBmcm9tICcuL3V0aWwvY2xvdWRmb3JtYXRpb24vc3RhY2stYWN0aXZpdHktbW9uaXRvcic7XG5cbnR5cGUgVGVtcGxhdGVCb2R5UGFyYW1ldGVyID0ge1xuICBUZW1wbGF0ZUJvZHk/OiBzdHJpbmdcbiAgVGVtcGxhdGVVUkw/OiBzdHJpbmdcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95U3RhY2tSZXN1bHQge1xuICByZWFkb25seSBub09wOiBib29sZWFuO1xuICByZWFkb25seSBvdXRwdXRzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgc3RhY2tBcm46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lTdGFja09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIGJlIGRlcGxveWVkXG4gICAqL1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdG8gZGVwbG95IHRoaXMgc3RhY2sgaW5cbiAgICpcbiAgICogVGhlIGVudmlyb25tZW50IG9uIHRoZSBzdGFjayBhcnRpZmFjdCBtYXkgYmUgdW5yZXNvbHZlZCwgdGhpcyBvbmVcbiAgICogbXVzdCBiZSByZXNvbHZlZC5cbiAgICovXG4gIHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgU0RLIHRvIHVzZSBmb3IgZGVwbG95aW5nIHRoZSBzdGFja1xuICAgKlxuICAgKiBTaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHdpdGggdGhlIGNvcnJlY3Qgcm9sZSB3aXRoIHdoaWNoXG4gICAqIHN0YWNrIG9wZXJhdGlvbnMgc2hvdWxkIGJlIHBlcmZvcm1lZC5cbiAgICovXG4gIHNkazogSVNESztcblxuICAvKipcbiAgICogU0RLIHByb3ZpZGVyIChzZWVkZWQgd2l0aCBkZWZhdWx0IGNyZWRlbnRpYWxzKVxuICAgKlxuICAgKiBXaWxsIGV4Y2x1c2l2ZWx5IGJlIHVzZWQgdG8gYXNzdW1lIHB1Ymxpc2hpbmcgY3JlZGVudGlhbHMgKHdoaWNoIG11c3RcbiAgICogc3RhcnQgb3V0IGZyb20gY3VycmVudCBjcmVkZW50aWFscyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UndmUgYXNzdW1lZCBhblxuICAgKiBhY3Rpb24gcm9sZSB0byB0b3VjaCB0aGUgc3RhY2sgb3Igbm90KS5cbiAgICpcbiAgICogVXNlZCBmb3IgdGhlIGZvbGxvd2luZyBwdXJwb3NlczpcbiAgICpcbiAgICogLSBQdWJsaXNoIGxlZ2FjeSBhc3NldHMuXG4gICAqIC0gVXBsb2FkIGxhcmdlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlcyB0byB0aGUgc3RhZ2luZyBidWNrZXQuXG4gICAqL1xuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBib290c3RyYXAgc3RhY2sgZm91bmQgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudFxuICAgKi9cbiAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvO1xuXG4gIC8qKlxuICAgKiBSb2xlIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gdG8gZXhlY3V0ZSB0aGUgY2hhbmdlIHNldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFJvbGUgc3BlY2lmaWVkIG9uIHN0YWNrLCBvdGhlcndpc2UgY3VycmVudFxuICAgKi9cbiAgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIEFSTnMgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiB0byBub3RpZnkgd2hlbiB0aGUgY2hhbmdlIHNldCBoYXMgY29tcGxldGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgbm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYW1lIHRvIGRlcGxveSB0aGUgc3RhY2sgdW5kZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOYW1lIGZyb20gYXNzZW1ibHlcbiAgICovXG4gIGRlcGxveU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFF1aWV0IG9yIHZlcmJvc2UgZGVwbG95bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcXVpZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFzc2V0IElEcyB3aGljaCBzaG91bGRuJ3QgYmUgYnVpbHRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBCdWlsZCBhbGwgYXNzZXRzXG4gICAqL1xuICByZXVzZUFzc2V0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUYWdzIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gdG8gYWRkIHRvIHN0YWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnc1xuICAgKi9cbiAgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4ZWN1dGUgdGhlIGNoYW5nZXNldCBvciBsZWF2ZSBpdCBpbiByZXZpZXcuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGV4ZWN1dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBuYW1lIHRvIHVzZSBmb3IgdGhlIENsb3VkRm9ybWF0aW9uIGNoYW5nZSBzZXQuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBjaGFuZ2VTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBleHRyYSBwYXJhbWV0ZXJzXG4gICAqIChpbiBhZGRpdGlvbiB0byB0aG9zZSB1c2VkIGZvciBhc3NldHMpXG4gICAqIHRvIHBhc3MgdG8gdGhlIGRlcGxveWVkIHRlbXBsYXRlLlxuICAgKiBOb3RlIHRoYXQgcGFyYW1ldGVycyB3aXRoIGB1bmRlZmluZWRgIG9yIGVtcHR5IHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQsXG4gICAqIGFuZCBub3QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlXG4gICAqL1xuICBwYXJhbWV0ZXJzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbiAgLyoqXG4gICAqIFVzZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICpcbiAgICogSWYgbm90IHNldCwgYWxsIHBhcmFtZXRlcnMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGV2ZXJ5IGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VQcmV2aW91c1BhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG1vZGUgZm9yIHN0YWNrIGRlcGxveW1lbnQgcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CYXIgc3RhY2sgZXZlbnRzIHdpbGwgYmUgZGlzcGxheWVkIGZvclxuICAgKiAgIHRoZSByZXNvdXJjZSBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWQuXG4gICAqL1xuICBwcm9ncmVzcz86IFN0YWNrQWN0aXZpdHlQcm9ncmVzcztcblxuICAvKipcbiAgICogRGVwbG95IGV2ZW4gaWYgdGhlIGRlcGxveWVkIHRlbXBsYXRlIGlzIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBkZXBsb3kuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2UgYXJlIG9uIGEgQ0kgc3lzdGVtXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjaT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJvbGxiYWNrIGZhaWxlZCBkZXBsb3ltZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByb2xsYmFjaz86IGJvb2xlYW47XG5cbiAgLypcbiAgICogV2hldGhlciB0byBwZXJmb3JtIGEgJ2hvdHN3YXAnIGRlcGxveW1lbnQuXG4gICAqIEEgJ2hvdHN3YXAnIGRlcGxveW1lbnQgd2lsbCBhdHRlbXB0IHRvIHNob3J0LWNpcmN1aXQgQ2xvdWRGb3JtYXRpb25cbiAgICogYW5kIHVwZGF0ZSB0aGUgYWZmZWN0ZWQgcmVzb3VyY2VzIGxpa2UgTGFtYmRhIGZ1bmN0aW9ucyBkaXJlY3RseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZSBmb3IgcmVndWxhciBkZXBsb3ltZW50cywgdHJ1ZSBmb3IgJ3dhdGNoJyBkZXBsb3ltZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgaG90c3dhcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBleHRyYSBzdHJpbmcgdG8gYXBwZW5kIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHBlcmZvcm1pbmcgQVdTIFNESyBjYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3RoaW5nIGV4dHJhIGlzIGFwcGVuZGVkIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlclxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFVc2VyQWdlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgY2hhbmdlIHNldCBvZiB0eXBlIElNUE9SVCB3aWxsIGJlIGNyZWF0ZWQsIGFuZCByZXNvdXJjZXNUb0ltcG9ydFxuICAgKiBwYXNzZWQgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlc1RvSW1wb3J0O1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB1c2UgdGhpcyBnaXZlbiB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHRoZSBzdG9yZWQgb25lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIHRoZSBzdG9yZWQgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlVGVtcGxhdGU/OiBhbnk7XG59XG5cbmNvbnN0IExBUkdFX1RFTVBMQVRFX1NJWkVfS0IgPSA1MDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhY2tBcnRpZmFjdCA9IG9wdGlvbnMuc3RhY2s7XG5cbiAgY29uc3Qgc3RhY2tFbnYgPSBvcHRpb25zLnJlc29sdmVkRW52aXJvbm1lbnQ7XG5cbiAgb3B0aW9ucy5zZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KG9wdGlvbnMuZXh0cmFVc2VyQWdlbnQpO1xuICBjb25zdCBjZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuICBjb25zdCBkZXBsb3lOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lIHx8IHN0YWNrQXJ0aWZhY3Quc3RhY2tOYW1lO1xuICBsZXQgY2xvdWRGb3JtYXRpb25TdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgZGVwbG95TmFtZSk7XG5cbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMuaXNDcmVhdGlvbkZhaWx1cmUpIHtcbiAgICBkZWJ1ZyhgRm91bmQgZXhpc3Rpbmcgc3RhY2sgJHtkZXBsb3lOYW1lfSB0aGF0IGhhZCBwcmV2aW91c2x5IGZhaWxlZCBjcmVhdGlvbi4gRGVsZXRpbmcgaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmUtY3JlYXRlIGl0LmApO1xuICAgIGF3YWl0IGNmbi5kZWxldGVTdGFjayh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSB9KS5wcm9taXNlKCk7XG4gICAgY29uc3QgZGVsZXRlZFN0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVsZXRlKGNmbiwgZGVwbG95TmFtZSk7XG4gICAgaWYgKGRlbGV0ZWRTdGFjayAmJiBkZWxldGVkU3RhY2suc3RhY2tTdGF0dXMubmFtZSAhPT0gJ0RFTEVURV9DT01QTEVURScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIGRlbGV0aW5nIHN0YWNrICR7ZGVwbG95TmFtZX0gdGhhdCBoYWQgcHJldmlvdXNseSBmYWlsZWQgY3JlYXRpb24gKGN1cnJlbnQgc3RhdGU6ICR7ZGVsZXRlZFN0YWNrLnN0YWNrU3RhdHVzfSlgKTtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHZhcmlhYmxlIHRvIG1hcmsgdGhhdCB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgYnV0IGF2b2lkXG4gICAgLy8gZG9pbmcgYW4gYWN0dWFsIGxvb2t1cCBpbiBDbG91ZEZvcm1hdGlvbiAod2hpY2ggd291bGQgYmUgc2lsbHkgdG8gZG8gaWZcbiAgICAvLyB3ZSBqdXN0IGRlbGV0ZWQgaXQpLlxuICAgIGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBDbG91ZEZvcm1hdGlvblN0YWNrLmRvZXNOb3RFeGlzdChjZm4sIGRlcGxveU5hbWUpO1xuICB9XG5cbiAgLy8gRGV0ZWN0IFwibGVnYWN5XCIgYXNzZXRzICh3aGljaCByZW1haW4gaW4gdGhlIG1ldGFkYXRhKSBhbmQgcHVibGlzaCB0aGVtIHZpYVxuICAvLyBhbiBhZC1ob2MgYXNzZXQgbWFuaWZlc3QsIHdoaWxlIHBhc3NpbmcgdGhlaXIgbG9jYXRpb25zIHZpYSB0ZW1wbGF0ZVxuICAvLyBwYXJhbWV0ZXJzLlxuICBjb25zdCBsZWdhY3lBc3NldHMgPSBuZXcgQXNzZXRNYW5pZmVzdEJ1aWxkZXIoKTtcbiAgY29uc3QgYXNzZXRQYXJhbXMgPSBhd2FpdCBhZGRNZXRhZGF0YUFzc2V0c1RvTWFuaWZlc3Qoc3RhY2tBcnRpZmFjdCwgbGVnYWN5QXNzZXRzLCBvcHRpb25zLnRvb2xraXRJbmZvLCBvcHRpb25zLnJldXNlQXNzZXRzKTtcblxuICBjb25zdCBmaW5hbFBhcmFtZXRlclZhbHVlcyA9IHsgLi4ub3B0aW9ucy5wYXJhbWV0ZXJzLCAuLi5hc3NldFBhcmFtcyB9O1xuXG4gIGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZShzdGFja0FydGlmYWN0LnRlbXBsYXRlKTtcbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSBvcHRpb25zLnVzZVByZXZpb3VzUGFyYW1ldGVyc1xuICAgID8gdGVtcGxhdGVQYXJhbXMudXBkYXRlRXhpc3RpbmcoZmluYWxQYXJhbWV0ZXJWYWx1ZXMsIGNsb3VkRm9ybWF0aW9uU3RhY2sucGFyYW1ldGVycylcbiAgICA6IHRlbXBsYXRlUGFyYW1zLnN1cHBseUFsbChmaW5hbFBhcmFtZXRlclZhbHVlcyk7XG5cbiAgaWYgKGF3YWl0IGNhblNraXBEZXBsb3kob3B0aW9ucywgY2xvdWRGb3JtYXRpb25TdGFjaywgc3RhY2tQYXJhbXMuaGFzQ2hhbmdlcyhjbG91ZEZvcm1hdGlvblN0YWNrLnBhcmFtZXRlcnMpKSkge1xuICAgIGRlYnVnKGAke2RlcGxveU5hbWV9OiBza2lwcGluZyBkZXBsb3ltZW50ICh1c2UgLS1mb3JjZSB0byBvdmVycmlkZSlgKTtcbiAgICAvLyBpZiB3ZSBjYW4gc2tpcCBkZXBsb3ltZW50IGFuZCB3ZSBhcmUgcGVyZm9ybWluZyBhIGhvdHN3YXAsIGxldCB0aGUgdXNlciBrbm93XG4gICAgLy8gdGhhdCBubyBob3Rzd2FwIGRlcGxveW1lbnQgaGFwcGVuZWRcbiAgICBpZiAob3B0aW9ucy5ob3Rzd2FwKSB7XG4gICAgICBwcmludChgXFxuICR7SUNPTn0gJXNcXG5gLCBjaGFsay5ib2xkKCdob3Rzd2FwIGRlcGxveW1lbnQgc2tpcHBlZCAtIG5vIGNoYW5nZXMgd2VyZSBkZXRlY3RlZCAodXNlIC0tZm9yY2UgdG8gb3ZlcnJpZGUpJykpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbm9PcDogdHJ1ZSxcbiAgICAgIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogZGVwbG95aW5nLi4uYCk7XG4gIH1cblxuICBjb25zdCBib2R5UGFyYW1ldGVyID0gYXdhaXQgbWFrZUJvZHlQYXJhbWV0ZXIoXG4gICAgc3RhY2tBcnRpZmFjdCxcbiAgICBvcHRpb25zLnJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgbGVnYWN5QXNzZXRzLFxuICAgIG9wdGlvbnMudG9vbGtpdEluZm8sXG4gICAgb3B0aW9ucy5zZGssXG4gICAgb3B0aW9ucy5vdmVycmlkZVRlbXBsYXRlKTtcbiAgYXdhaXQgcHVibGlzaEFzc2V0cyhsZWdhY3lBc3NldHMudG9NYW5pZmVzdChzdGFja0FydGlmYWN0LmFzc2VtYmx5LmRpcmVjdG9yeSksIG9wdGlvbnMuc2RrUHJvdmlkZXIsIHN0YWNrRW52KTtcblxuICBpZiAob3B0aW9ucy5ob3Rzd2FwKSB7XG4gICAgLy8gYXR0ZW1wdCB0byBzaG9ydC1jaXJjdWl0IHRoZSBkZXBsb3ltZW50IGlmIHBvc3NpYmxlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvdHN3YXBEZXBsb3ltZW50UmVzdWx0ID0gYXdhaXQgdHJ5SG90c3dhcERlcGxveW1lbnQob3B0aW9ucy5zZGtQcm92aWRlciwgYXNzZXRQYXJhbXMsIGNsb3VkRm9ybWF0aW9uU3RhY2ssIHN0YWNrQXJ0aWZhY3QpO1xuICAgICAgaWYgKGhvdHN3YXBEZXBsb3ltZW50UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBob3Rzd2FwRGVwbG95bWVudFJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHByaW50KCdDb3VsZCBub3QgcGVyZm9ybSBhIGhvdHN3YXAgZGVwbG95bWVudCwgYXMgdGhlIHN0YWNrICVzIGNvbnRhaW5zIG5vbi1Bc3NldCBjaGFuZ2VzJywgc3RhY2tBcnRpZmFjdC5kaXNwbGF5TmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIENmbkV2YWx1YXRpb25FeGNlcHRpb24pKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBwcmludCgnQ291bGQgbm90IHBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsIGJlY2F1c2UgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJXMnLCBlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBwcmludCgnRmFsbGluZyBiYWNrIHRvIGRvaW5nIGEgZnVsbCBkZXBsb3ltZW50Jyk7XG4gIH1cblxuICAvLyBjb3VsZCBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudCwgcGVyZm9ybSBhIGZ1bGwgQ0ZOIGRlcGxveSBpbnN0ZWFkXG4gIHJldHVybiBwcmVwYXJlQW5kRXhlY3V0ZUNoYW5nZVNldChvcHRpb25zLCBjbG91ZEZvcm1hdGlvblN0YWNrLCBzdGFja0FydGlmYWN0LCBzdGFja1BhcmFtcywgYm9keVBhcmFtZXRlcik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVBbmRFeGVjdXRlQ2hhbmdlU2V0KFxuICBvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsIGNsb3VkRm9ybWF0aW9uU3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCwgc3RhY2tQYXJhbXM6IFBhcmFtZXRlclZhbHVlcywgYm9keVBhcmFtZXRlcjogVGVtcGxhdGVCb2R5UGFyYW1ldGVyLFxuKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAvLyBpZiB3ZSBnb3QgaGVyZSwgYW5kIGhvdHN3YXAgaXMgZW5hYmxlZCwgdGhhdCBtZWFucyBjaGFuZ2VzIGNvdWxkbid0IGJlIGhvdHN3YXBwZWQsXG4gIC8vIGFuZCB3ZSBoYWQgdG8gZmFsbCBiYWNrIG9uIGEgZnVsbCBkZXBsb3ltZW50LiBOb3RlIHRoYXQgZmFjdCBpbiBvdXIgVXNlci1BZ2VudFxuICBpZiAob3B0aW9ucy5ob3Rzd2FwKSB7XG4gICAgb3B0aW9ucy5zZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KCdjZGstaG90c3dhcC9mYWxsYmFjaycpO1xuICB9XG5cbiAgY29uc3QgY2ZuID0gb3B0aW9ucy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgY29uc3QgZGVwbG95TmFtZSA9IG9wdGlvbnMuZGVwbG95TmFtZSA/PyBzdGFja0FydGlmYWN0LnN0YWNrTmFtZTtcblxuICBjb25zdCBjaGFuZ2VTZXROYW1lID0gb3B0aW9ucy5jaGFuZ2VTZXROYW1lID8/ICdjZGstZGVwbG95LWNoYW5nZS1zZXQnO1xuICBpZiAoY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMpIHtcbiAgICAvL0RlbGV0ZSBhbnkgZXhpc3RpbmcgY2hhbmdlIHNldHMgZ2VuZXJhdGVkIGJ5IENESyBzaW5jZSBjaGFuZ2Ugc2V0IG5hbWVzIG11c3QgYmUgdW5pcXVlLlxuICAgIC8vVGhlIGRlbGV0ZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwgYXMgbG9uZyBhcyB0aGUgc3RhY2sgZXhpc3RzIChldmVuIGlmIHRoZSBjaGFuZ2Ugc2V0IGRvZXMgbm90IGV4aXN0KS5cbiAgICBkZWJ1ZyhgUmVtb3ZpbmcgZXhpc3RpbmcgY2hhbmdlIHNldCB3aXRoIG5hbWUgJHtjaGFuZ2VTZXROYW1lfSBpZiBpdCBleGlzdHNgKTtcbiAgICBhd2FpdCBjZm4uZGVsZXRlQ2hhbmdlU2V0KHsgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLCBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lIH0pLnByb21pc2UoKTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZSA9IGNsb3VkRm9ybWF0aW9uU3RhY2suZXhpc3RzICYmIGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMubmFtZSAhPT0gJ1JFVklFV19JTl9QUk9HUkVTUyc7XG5cbiAgZGVidWcoYEF0dGVtcHRpbmcgdG8gY3JlYXRlIENoYW5nZVNldCB3aXRoIG5hbWUgJHtjaGFuZ2VTZXROYW1lfSB0byAke3VwZGF0ZSA/ICd1cGRhdGUnIDogJ2NyZWF0ZSd9IHN0YWNrICR7ZGVwbG95TmFtZX1gKTtcbiAgcHJpbnQoJyVzOiBjcmVhdGluZyBDbG91ZEZvcm1hdGlvbiBjaGFuZ2VzZXQuLi4nLCBjaGFsay5ib2xkKGRlcGxveU5hbWUpKTtcbiAgY29uc3QgZXhlY3V0aW9uSWQgPSB1dWlkLnY0KCk7XG4gIGNvbnN0IGNoYW5nZVNldCA9IGF3YWl0IGNmbi5jcmVhdGVDaGFuZ2VTZXQoe1xuICAgIFN0YWNrTmFtZTogZGVwbG95TmFtZSxcbiAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgIENoYW5nZVNldFR5cGU6IG9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQgPyAnSU1QT1JUJyA6IHVwZGF0ZSA/ICdVUERBVEUnIDogJ0NSRUFURScsXG4gICAgUmVzb3VyY2VzVG9JbXBvcnQ6IG9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgRGVzY3JpcHRpb246IGBDREsgQ2hhbmdlc2V0IGZvciBleGVjdXRpb24gJHtleGVjdXRpb25JZH1gLFxuICAgIFRlbXBsYXRlQm9keTogYm9keVBhcmFtZXRlci5UZW1wbGF0ZUJvZHksXG4gICAgVGVtcGxhdGVVUkw6IGJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVVUkwsXG4gICAgUGFyYW1ldGVyczogc3RhY2tQYXJhbXMuYXBpUGFyYW1ldGVycyxcbiAgICBSb2xlQVJOOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgTm90aWZpY2F0aW9uQVJOczogb3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zLFxuICAgIENhcGFiaWxpdGllczogWydDQVBBQklMSVRZX0lBTScsICdDQVBBQklMSVRZX05BTUVEX0lBTScsICdDQVBBQklMSVRZX0FVVE9fRVhQQU5EJ10sXG4gICAgVGFnczogb3B0aW9ucy50YWdzLFxuICB9KS5wcm9taXNlKCk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IG9wdGlvbnMuZXhlY3V0ZSA/PyB0cnVlO1xuXG4gIGRlYnVnKCdJbml0aWF0ZWQgY3JlYXRpb24gb2YgY2hhbmdlc2V0OiAlczsgd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0LklkKTtcbiAgLy8gRmV0Y2hpbmcgYWxsIHBhZ2VzIGlmIHdlJ2xsIGV4ZWN1dGUsIHNvIHdlIGNhbiBoYXZlIHRoZSBjb3JyZWN0IGNoYW5nZSBjb3VudCB3aGVuIG1vbml0b3JpbmcuXG4gIGNvbnN0IGNoYW5nZVNldERlc2NyaXB0aW9uID0gYXdhaXQgd2FpdEZvckNoYW5nZVNldChjZm4sIGRlcGxveU5hbWUsIGNoYW5nZVNldE5hbWUsIHsgZmV0Y2hBbGw6IGV4ZWN1dGUgfSk7XG5cbiAgLy8gVXBkYXRlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gb25seSBpZiBpdCBoYXMgY2hhbmdlZC5cbiAgY29uc3QgdGVybWluYXRpb25Qcm90ZWN0aW9uID0gc3RhY2tBcnRpZmFjdC50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2U7XG4gIGlmICghIWNsb3VkRm9ybWF0aW9uU3RhY2sudGVybWluYXRpb25Qcm90ZWN0aW9uICE9PSB0ZXJtaW5hdGlvblByb3RlY3Rpb24pIHtcbiAgICBkZWJ1ZygnVXBkYXRpbmcgdGVybWluYXRpb24gcHJvdGVjdGlvbiBmcm9tICVzIHRvICVzIGZvciBzdGFjayAlcycsIGNsb3VkRm9ybWF0aW9uU3RhY2sudGVybWluYXRpb25Qcm90ZWN0aW9uLCB0ZXJtaW5hdGlvblByb3RlY3Rpb24sIGRlcGxveU5hbWUpO1xuICAgIGF3YWl0IGNmbi51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oe1xuICAgICAgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgICAgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiB0ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgfSkucHJvbWlzZSgpO1xuICAgIGRlYnVnKCdUZXJtaW5hdGlvbiBwcm90ZWN0aW9uIHVwZGF0ZWQgdG8gJXMgZm9yIHN0YWNrICVzJywgdGVybWluYXRpb25Qcm90ZWN0aW9uLCBkZXBsb3lOYW1lKTtcbiAgfVxuXG4gIGlmIChjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoY2hhbmdlU2V0RGVzY3JpcHRpb24pKSB7XG4gICAgZGVidWcoJ05vIGNoYW5nZXMgYXJlIHRvIGJlIHBlcmZvcm1lZCBvbiAlcy4nLCBkZXBsb3lOYW1lKTtcbiAgICBpZiAob3B0aW9ucy5leGVjdXRlKSB7XG4gICAgICBkZWJ1ZygnRGVsZXRpbmcgZW1wdHkgY2hhbmdlIHNldCAlcycsIGNoYW5nZVNldC5JZCk7XG4gICAgICBhd2FpdCBjZm4uZGVsZXRlQ2hhbmdlU2V0KHsgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLCBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lIH0pLnByb21pc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbm9PcDogdHJ1ZSwgb3V0cHV0czogY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLCBzdGFja0FybjogY2hhbmdlU2V0LlN0YWNrSWQhIH07XG4gIH1cblxuICBpZiAoZXhlY3V0ZSkge1xuICAgIGRlYnVnKCdJbml0aWF0aW5nIGV4ZWN1dGlvbiBvZiBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMnLCBjaGFuZ2VTZXQuSWQsIGRlcGxveU5hbWUpO1xuXG4gICAgY29uc3Qgc2hvdWxkRGlzYWJsZVJvbGxiYWNrID0gb3B0aW9ucy5yb2xsYmFjayA9PT0gZmFsc2U7XG4gICAgLy8gRG8gYSBiaXQgb2YgY29udG9ydGlvbnMgdG8gb25seSBwYXNzIHRoZSBgRGlzYWJsZVJvbGxiYWNrYCBmbGFnIGlmIGl0J3MgdHJ1ZS4gVGhhdCB3YXksXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gd29uJ3QgYmFsayBhdCB0aGUgdW5yZWNvZ25pemVkIG9wdGlvbiBpbiByZWdpb25zIHdoZXJlIHRoZSBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgeWV0LlxuICAgIGNvbnN0IGRpc2FibGVSb2xsYmFjayA9IHNob3VsZERpc2FibGVSb2xsYmFjayA/IHsgRGlzYWJsZVJvbGxiYWNrOiB0cnVlIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBhd2FpdCBjZm4uZXhlY3V0ZUNoYW5nZVNldCh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSwgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSwgLi4uZGlzYWJsZVJvbGxiYWNrIH0pLnByb21pc2UoKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgY29uc3QgY2hhbmdlU2V0TGVuZ3RoOiBudW1iZXIgPSAoY2hhbmdlU2V0RGVzY3JpcHRpb24uQ2hhbmdlcyA/PyBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IG1vbml0b3IgPSBvcHRpb25zLnF1aWV0ID8gdW5kZWZpbmVkIDogU3RhY2tBY3Rpdml0eU1vbml0b3Iud2l0aERlZmF1bHRQcmludGVyKGNmbiwgZGVwbG95TmFtZSwgc3RhY2tBcnRpZmFjdCwge1xuICAgICAgLy8gKzEgZm9yIHRoZSBleHRyYSBldmVudCBlbWl0dGVkIGZyb20gdXBkYXRlcy5cbiAgICAgIHJlc291cmNlc1RvdGFsOiBjbG91ZEZvcm1hdGlvblN0YWNrLmV4aXN0cyA/IGNoYW5nZVNldExlbmd0aCArIDEgOiBjaGFuZ2VTZXRMZW5ndGgsXG4gICAgICBwcm9ncmVzczogb3B0aW9ucy5wcm9ncmVzcyxcbiAgICAgIGNoYW5nZVNldENyZWF0aW9uVGltZTogY2hhbmdlU2V0RGVzY3JpcHRpb24uQ3JlYXRpb25UaW1lLFxuICAgICAgY2k6IG9wdGlvbnMuY2ksXG4gICAgfSkuc3RhcnQoKTtcbiAgICBkZWJ1ZygnRXhlY3V0aW9uIG9mIGNoYW5nZXNldCAlcyBvbiBzdGFjayAlcyBoYXMgc3RhcnRlZDsgd2FpdGluZyBmb3IgdGhlIHVwZGF0ZSB0byBjb21wbGV0ZS4uLicsIGNoYW5nZVNldC5JZCwgZGVwbG95TmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmFsU3RhY2sgPSBhd2FpdCB3YWl0Rm9yU3RhY2tEZXBsb3koY2ZuLCBkZXBsb3lOYW1lKTtcblxuICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiwgYnV0IGNhdGNoIGl0IGFueXdheS4gWW91IG5ldmVyIGtub3cuXG4gICAgICBpZiAoIWZpbmFsU3RhY2spIHsgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBkZXBsb3kgZmFpbGVkICh0aGUgc3RhY2sgZGlzYXBwZWFyZWQgd2hpbGUgd2Ugd2VyZSBkZXBsb3lpbmcgaXQpJyk7IH1cbiAgICAgIGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBmaW5hbFN0YWNrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdWZmaXhXaXRoRXJyb3JzKGUubWVzc2FnZSwgbW9uaXRvcj8uZXJyb3JzKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IG1vbml0b3I/LnN0b3AoKTtcbiAgICB9XG4gICAgZGVidWcoJ1N0YWNrICVzIGhhcyBjb21wbGV0ZWQgdXBkYXRpbmcnLCBkZXBsb3lOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludCgnQ2hhbmdlc2V0ICVzIGNyZWF0ZWQgYW5kIHdhaXRpbmcgaW4gcmV2aWV3IGZvciBtYW51YWwgZXhlY3V0aW9uICgtLW5vLWV4ZWN1dGUpJywgY2hhbmdlU2V0LklkKTtcbiAgfVxuXG4gIHJldHVybiB7IG5vT3A6IGZhbHNlLCBvdXRwdXRzOiBjbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsIHN0YWNrQXJuOiBjaGFuZ2VTZXQuU3RhY2tJZCEgfTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyB0aGUgYm9keSBwYXJhbWV0ZXIgZm9yICtDcmVhdGVDaGFuZ2VTZXQrLlxuICpcbiAqIElmIHRoZSB0ZW1wbGF0ZSBpcyBzbWFsbCBlbm91Z2ggdG8gYmUgaW5saW5lZCBpbnRvIHRoZSBBUEkgY2FsbCwganVzdCByZXR1cm5cbiAqIGl0IGltbWVkaWF0ZWx5LlxuICpcbiAqIE90aGVyd2lzZSwgYWRkIGl0IHRvIHRoZSBhc3NldCBtYW5pZmVzdCB0byBnZXQgdXBsb2FkZWQgdG8gdGhlIHN0YWdpbmdcbiAqIGJ1Y2tldCBhbmQgcmV0dXJuIGl0cyBjb29yZGluYXRlcy4gSWYgdGhlcmUgaXMgbm8gc3RhZ2luZyBidWNrZXQsIGFuIGVycm9yXG4gKiBpcyB0aHJvd24uXG4gKlxuICogQHBhcmFtIHN0YWNrICAgICB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgdGhhdCBwcm92aWRlcyB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAqIEBwYXJhbSB0b29sa2l0SW5mbyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdG9vbGtpdCBzdGFja1xuICovXG5hc3luYyBmdW5jdGlvbiBtYWtlQm9keVBhcmFtZXRlcihcbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgcmVzb2x2ZWRFbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gIGFzc2V0TWFuaWZlc3Q6IEFzc2V0TWFuaWZlc3RCdWlsZGVyLFxuICB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8sXG4gIHNkazogSVNESyxcbiAgb3ZlcnJpZGVUZW1wbGF0ZT86IGFueSxcbik6IFByb21pc2U8VGVtcGxhdGVCb2R5UGFyYW1ldGVyPiB7XG5cbiAgLy8gSWYgdGhlIHRlbXBsYXRlIGhhcyBhbHJlYWR5IGJlZW4gdXBsb2FkZWQgdG8gUzMsIGp1c3QgdXNlIGl0IGZyb20gdGhlcmUuXG4gIGlmIChzdGFjay5zdGFja1RlbXBsYXRlQXNzZXRPYmplY3RVcmwgJiYgIW92ZXJyaWRlVGVtcGxhdGUpIHtcbiAgICByZXR1cm4geyBUZW1wbGF0ZVVSTDogcmVzdFVybEZyb21NYW5pZmVzdChzdGFjay5zdGFja1RlbXBsYXRlQXNzZXRPYmplY3RVcmwsIHJlc29sdmVkRW52aXJvbm1lbnQsIHNkaykgfTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgcGFzcyB2aWEgQVBJIGNhbGwgKGlmIHNtYWxsKSBvciB1cGxvYWQgaGVyZSAoaWYgbGFyZ2UpXG4gIGNvbnN0IHRlbXBsYXRlSnNvbiA9IHRvWUFNTChvdmVycmlkZVRlbXBsYXRlID8/IHN0YWNrLnRlbXBsYXRlKTtcblxuICBpZiAodGVtcGxhdGVKc29uLmxlbmd0aCA8PSBMQVJHRV9URU1QTEFURV9TSVpFX0tCICogMTAyNCkge1xuICAgIHJldHVybiB7IFRlbXBsYXRlQm9keTogdGVtcGxhdGVKc29uIH07XG4gIH1cblxuICBpZiAoIXRvb2xraXRJbmZvLmZvdW5kKSB7XG4gICAgZXJyb3IoXG4gICAgICBgVGhlIHRlbXBsYXRlIGZvciBzdGFjayBcIiR7c3RhY2suZGlzcGxheU5hbWV9XCIgaXMgJHtNYXRoLnJvdW5kKHRlbXBsYXRlSnNvbi5sZW5ndGggLyAxMDI0KX1LaUIuIGAgK1xuICAgICAgYFRlbXBsYXRlcyBsYXJnZXIgdGhhbiAke0xBUkdFX1RFTVBMQVRFX1NJWkVfS0J9S2lCIG11c3QgYmUgdXBsb2FkZWQgdG8gUzMuXFxuYCArXG4gICAgICAnUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiBvcmRlciB0byBzZXR1cCBhbiBTMyBidWNrZXQgaW4gdGhpcyBlbnZpcm9ubWVudCwgYW5kIHRoZW4gcmUtZGVwbG95OlxcblxcbicsXG4gICAgICBjaGFsay5ibHVlKGBcXHQkIGNkayBib290c3RyYXAgJHtyZXNvbHZlZEVudmlyb25tZW50Lm5hbWV9XFxuYCkpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdUZW1wbGF0ZSB0b28gbGFyZ2UgdG8gZGVwbG95IChcImNkayBib290c3RyYXBcIiBpcyByZXF1aXJlZCknKTtcbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlSGFzaCA9IGNvbnRlbnRIYXNoKHRlbXBsYXRlSnNvbik7XG4gIGNvbnN0IGtleSA9IGBjZGsvJHtzdGFjay5pZH0vJHt0ZW1wbGF0ZUhhc2h9LnltbGA7XG5cbiAgbGV0IHRlbXBsYXRlRmlsZSA9IHN0YWNrLnRlbXBsYXRlRmlsZTtcbiAgaWYgKG92ZXJyaWRlVGVtcGxhdGUpIHtcbiAgICAvLyBBZGQgYSB2YXJpYW50IG9mIHRoaXMgdGVtcGxhdGVcbiAgICB0ZW1wbGF0ZUZpbGUgPSBgJHtzdGFjay50ZW1wbGF0ZUZpbGV9LSR7dGVtcGxhdGVIYXNofS55YW1sYDtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcGxhdGVGaWxlLCB0ZW1wbGF0ZUpzb24sIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gIH1cblxuICBhc3NldE1hbmlmZXN0LmFkZEZpbGVBc3NldCh0ZW1wbGF0ZUhhc2gsIHtcbiAgICBwYXRoOiB0ZW1wbGF0ZUZpbGUsXG4gIH0sIHtcbiAgICBidWNrZXROYW1lOiB0b29sa2l0SW5mby5idWNrZXROYW1lLFxuICAgIG9iamVjdEtleToga2V5LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZVVSTCA9IGAke3Rvb2xraXRJbmZvLmJ1Y2tldFVybH0vJHtrZXl9YDtcbiAgZGVidWcoJ1N0b3JpbmcgdGVtcGxhdGUgaW4gUzMgYXQ6JywgdGVtcGxhdGVVUkwpO1xuICByZXR1cm4geyBUZW1wbGF0ZVVSTDogdGVtcGxhdGVVUkwgfTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlIGEgYm9keSBwYXJhbWV0ZXIgZm9yIENGTiwgcGVyZm9ybWluZyB0aGUgdXBsb2FkXG4gKlxuICogUmV0dXJuIGl0IGFzLWlzIGlmIGl0IGlzIHNtYWxsIGVub3VnaCB0byBwYXNzIGluIHRoZSBBUEkgY2FsbCxcbiAqIHVwbG9hZCB0byBTMyBhbmQgcmV0dXJuIHRoZSBjb29yZGluYXRlcyBpZiBpdCBpcyBub3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQm9keVBhcmFtZXRlckFuZFVwbG9hZChcbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgcmVzb2x2ZWRFbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mbyxcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBzZGs6IElTREssXG4gIG92ZXJyaWRlVGVtcGxhdGU/OiBhbnkpOiBQcm9taXNlPFRlbXBsYXRlQm9keVBhcmFtZXRlcj4ge1xuXG4gIC8vIFdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBhY3R1YWwgYXNzZXQgbWFuaWZlc3QgaGVyZSwgc28gcHJldGVuZCB0aGF0IHRoZVxuICAvLyBzdGFjayBkb2Vzbid0IGhhdmUgYSBwcmUtcHVibGlzaGVkIFVSTC5cbiAgY29uc3QgZm9yY2VVcGxvYWRTdGFjayA9IE9iamVjdC5jcmVhdGUoc3RhY2ssIHtcbiAgICBzdGFja1RlbXBsYXRlQXNzZXRPYmplY3RVcmw6IHsgdmFsdWU6IHVuZGVmaW5lZCB9LFxuICB9KTtcblxuICBjb25zdCBidWlsZGVyID0gbmV3IEFzc2V0TWFuaWZlc3RCdWlsZGVyKCk7XG4gIGNvbnN0IGJvZHlwYXJhbSA9IGF3YWl0IG1ha2VCb2R5UGFyYW1ldGVyKGZvcmNlVXBsb2FkU3RhY2ssIHJlc29sdmVkRW52aXJvbm1lbnQsIGJ1aWxkZXIsIHRvb2xraXRJbmZvLCBzZGssIG92ZXJyaWRlVGVtcGxhdGUpO1xuICBjb25zdCBtYW5pZmVzdCA9IGJ1aWxkZXIudG9NYW5pZmVzdChzdGFjay5hc3NlbWJseS5kaXJlY3RvcnkpO1xuICBhd2FpdCBwdWJsaXNoQXNzZXRzKG1hbmlmZXN0LCBzZGtQcm92aWRlciwgcmVzb2x2ZWRFbnZpcm9ubWVudCwgeyBxdWlldDogdHJ1ZSB9KTtcbiAgcmV0dXJuIGJvZHlwYXJhbTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXN0cm95U3RhY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0byBiZSBkZXN0cm95ZWRcbiAgICovXG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgc2RrOiBJU0RLO1xuICByb2xlQXJuPzogc3RyaW5nO1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuICBxdWlldD86IGJvb2xlYW47XG4gIGNpPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3Ryb3lTdGFjayhvcHRpb25zOiBEZXN0cm95U3RhY2tPcHRpb25zKSB7XG4gIGNvbnN0IGRlcGxveU5hbWUgPSBvcHRpb25zLmRlcGxveU5hbWUgfHwgb3B0aW9ucy5zdGFjay5zdGFja05hbWU7XG4gIGNvbnN0IGNmbiA9IG9wdGlvbnMuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG5cbiAgY29uc3QgY3VycmVudFN0YWNrID0gYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoY2ZuLCBkZXBsb3lOYW1lKTtcbiAgaWYgKCFjdXJyZW50U3RhY2suZXhpc3RzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG1vbml0b3IgPSBvcHRpb25zLnF1aWV0ID8gdW5kZWZpbmVkIDogU3RhY2tBY3Rpdml0eU1vbml0b3Iud2l0aERlZmF1bHRQcmludGVyKGNmbiwgZGVwbG95TmFtZSwgb3B0aW9ucy5zdGFjaywge1xuICAgIGNpOiBvcHRpb25zLmNpLFxuICB9KS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2ZuLmRlbGV0ZVN0YWNrKHsgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLCBSb2xlQVJOOiBvcHRpb25zLnJvbGVBcm4gfSkucHJvbWlzZSgpO1xuICAgIGNvbnN0IGRlc3Ryb3llZFN0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVsZXRlKGNmbiwgZGVwbG95TmFtZSk7XG4gICAgaWYgKGRlc3Ryb3llZFN0YWNrICYmIGRlc3Ryb3llZFN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdERUxFVEVfQ09NUExFVEUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZXN0cm95ICR7ZGVwbG95TmFtZX06ICR7ZGVzdHJveWVkU3RhY2suc3RhY2tTdGF0dXN9YCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHN1ZmZpeFdpdGhFcnJvcnMoZS5tZXNzYWdlLCBtb25pdG9yPy5lcnJvcnMpKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAobW9uaXRvcikgeyBhd2FpdCBtb25pdG9yLnN0b3AoKTsgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgd2UgY2FuIHNraXAgZGVwbG95bWVudFxuICpcbiAqIFdlIGRvIHRoaXMgaW4gYSBjb21wbGljYXRlZCB3YXkgYnkgcHJlcHJvY2Vzc2luZyAoaW5zdGVhZCBvZiBqdXN0XG4gKiBsb29raW5nIGF0IHRoZSBjaGFuZ2VzZXQpLCBiZWNhdXNlIGlmIHRoZXJlIGFyZSBuZXN0ZWQgc3RhY2tzIGludm9sdmVkXG4gKiB0aGUgY2hhbmdlc2V0IHdpbGwgYWx3YXlzIHNob3cgdGhlIG5lc3RlZCBzdGFja3MgYXMgbmVlZGluZyB0byBiZVxuICogdXBkYXRlZCwgYW5kIHRoZSBkZXBsb3ltZW50IHdpbGwgdGFrZSBhIGxvbmcgdGltZSB0byBpbiBlZmZlY3Qgbm90XG4gKiBkbyBhbnl0aGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FuU2tpcERlcGxveShcbiAgZGVwbG95U3RhY2tPcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsXG4gIGNsb3VkRm9ybWF0aW9uU3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIHBhcmFtZXRlckNoYW5nZXM6IFBhcmFtZXRlckNoYW5nZXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICBjb25zdCBkZXBsb3lOYW1lID0gZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveU5hbWUgfHwgZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnN0YWNrTmFtZTtcbiAgZGVidWcoYCR7ZGVwbG95TmFtZX06IGNoZWNraW5nIGlmIHdlIGNhbiBza2lwIGRlcGxveWApO1xuXG4gIC8vIEZvcmNlZCBkZXBsb3lcbiAgaWYgKGRlcGxveVN0YWNrT3B0aW9ucy5mb3JjZSkge1xuICAgIGRlYnVnKGAke2RlcGxveU5hbWV9OiBmb3JjZWQgZGVwbG95bWVudGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENyZWF0aW5nIGNoYW5nZXNldCBvbmx5IChkZWZhdWx0IHRydWUpLCBuZXZlciBza2lwXG4gIGlmIChkZXBsb3lTdGFja09wdGlvbnMuZXhlY3V0ZSA9PT0gZmFsc2UpIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogLS1uby1leGVjdXRlLCBhbHdheXMgY3JlYXRpbmcgY2hhbmdlIHNldGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE5vIGV4aXN0aW5nIHN0YWNrXG4gIGlmICghY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMpIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogbm8gZXhpc3Rpbmcgc3RhY2tgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBoYXMgY2hhbmdlZCAoYXNzZXRzIHRha2VuIGludG8gYWNjb3VudCBoZXJlKVxuICBpZiAoSlNPTi5zdHJpbmdpZnkoZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlbXBsYXRlKSAhPT0gSlNPTi5zdHJpbmdpZnkoYXdhaXQgY2xvdWRGb3JtYXRpb25TdGFjay50ZW1wbGF0ZSgpKSkge1xuICAgIGRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZW1wbGF0ZSBoYXMgY2hhbmdlZGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRhZ3MgaGF2ZSBjaGFuZ2VkXG4gIGlmICghY29tcGFyZVRhZ3MoY2xvdWRGb3JtYXRpb25TdGFjay50YWdzLCBkZXBsb3lTdGFja09wdGlvbnMudGFncyA/PyBbXSkpIHtcbiAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogdGFncyBoYXZlIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcbiAgaWYgKCEhZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gISFjbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbikge1xuICAgIGRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBQYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZFxuICBpZiAocGFyYW1ldGVyQ2hhbmdlcykge1xuICAgIGlmIChwYXJhbWV0ZXJDaGFuZ2VzID09PSAnc3NtJykge1xuICAgICAgZGVidWcoYCR7ZGVwbG95TmFtZX06IHNvbWUgcGFyYW1ldGVycyBjb21lIGZyb20gU1NNIHNvIHdlIGhhdmUgdG8gYXNzdW1lIHRoZXkgbWF5IGhhdmUgY2hhbmdlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZyhgJHtkZXBsb3lOYW1lfTogcGFyYW1ldGVycyBoYXZlIGNoYW5nZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXhpc3Rpbmcgc3RhY2sgaXMgaW4gYSBmYWlsZWQgc3RhdGVcbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMuaXNGYWlsdXJlKSB7XG4gICAgZGVidWcoYCR7ZGVwbG95TmFtZX06IHN0YWNrIGlzIGluIGEgZmFpbHVyZSBzdGF0ZWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFdlIGNhbiBza2lwIGRlcGxveVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gbGlzdCBvZiB0YWdzLCByZXR1cm5zIHRydWUgaWYgaWRlbnRpY2FsLlxuICovXG5mdW5jdGlvbiBjb21wYXJlVGFncyhhOiBUYWdbXSwgYjogVGFnW10pOiBib29sZWFuIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYVRhZyBvZiBhKSB7XG4gICAgY29uc3QgYlRhZyA9IGIuZmluZCh0YWcgPT4gdGFnLktleSA9PT0gYVRhZy5LZXkpO1xuXG4gICAgaWYgKCFiVGFnIHx8IGJUYWcuVmFsdWUgIT09IGFUYWcuVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYW4gUzMgVVJMIGluIHRoZSBtYW5pZmVzdCBmb3IgdXNlIHdpdGggQ2xvdWRGb3JtYXRpb25cbiAqXG4gKiBSZXBsYWNlcyBlbnZpcm9ubWVudCBwbGFjZWhvbGRlcnMgKHdoaWNoIHRoaXMgZmllbGQgbWF5IGNvbnRhaW4pLFxuICogYW5kIHJlZm9ybWF0cyBzMzovLy4uLi8uLi4gdXJscyBpbnRvIFMzIFJFU1QgVVJMcyAod2hpY2ggQ2xvdWRGb3JtYXRpb25cbiAqIGV4cGVjdHMpXG4gKi9cbmZ1bmN0aW9uIHJlc3RVcmxGcm9tTWFuaWZlc3QodXJsOiBzdHJpbmcsIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCwgc2RrOiBJU0RLKTogc3RyaW5nIHtcbiAgY29uc3QgZG9Ob3RVc2VNYXJrZXIgPSAnKipET05PVFVTRSoqJztcbiAgLy8gVGhpcyBVUkwgbWF5IGNvbnRhaW4gcGxhY2Vob2xkZXJzLCBzbyBzdGlsbCBzdWJzdGl0dXRlIHRob3NlLlxuICB1cmwgPSBjeGFwaS5FbnZpcm9ubWVudFBsYWNlaG9sZGVycy5yZXBsYWNlKHVybCwge1xuICAgIGFjY291bnRJZDogZW52aXJvbm1lbnQuYWNjb3VudCxcbiAgICByZWdpb246IGVudmlyb25tZW50LnJlZ2lvbixcbiAgICBwYXJ0aXRpb246IGRvTm90VXNlTWFya2VyLFxuICB9KTtcblxuICAvLyBZZXMsIHRoaXMgaXMgZXh0cmVtZWx5IGNydWRlLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGlzIHNvIEknbSBub3QgaW5jbGluZWQgdG8gc3BlbmRcbiAgLy8gYSBsb3Qgb2YgZWZmb3J0IHRyeWluZyB0byB0aHJlYWQgdGhlIHJpZ2h0IHZhbHVlIHRvIHRoaXMgbG9jYXRpb24uXG4gIGlmICh1cmwuaW5kZXhPZihkb05vdFVzZU1hcmtlcikgPiAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBcXCcke0FXUzo6UGFydGl0aW9ufVxcJyBpbiB0aGUgXFwnc3RhY2tUZW1wbGF0ZUFzc2V0T2JqZWN0VXJsXFwnIGZpZWxkJyk7XG4gIH1cblxuICBjb25zdCBzM1VybCA9IHVybC5tYXRjaCgvczM6XFwvXFwvKFteL10rKVxcLyguKikkLyk7XG4gIGlmICghczNVcmwpIHsgcmV0dXJuIHVybDsgfVxuXG4gIC8vIFdlIG5lZWQgdG8gcGFzcyBhbiAnaHR0cHM6Ly9zMy5SRUdJT04uYW1hem9uYXdzLmNvbVsuY25dL2J1Y2tldC9vYmplY3QnIFVSTCB0byBDbG91ZEZvcm1hdGlvbiwgYnV0IHdlXG4gIC8vIGdvdCBhbiAnczM6Ly9idWNrZXQvb2JqZWN0JyBVUkwgaW5zdGVhZC4gQ29uc3RydWN0IHRoZSByZXN0IEFQSSBVUkwgaGVyZS5cbiAgY29uc3QgYnVja2V0TmFtZSA9IHMzVXJsWzFdO1xuICBjb25zdCBvYmplY3RLZXkgPSBzM1VybFsyXTtcblxuICBjb25zdCB1cmxTdWZmaXg6IHN0cmluZyA9IHNkay5nZXRFbmRwb2ludFN1ZmZpeChlbnZpcm9ubWVudC5yZWdpb24pO1xuICByZXR1cm4gYGh0dHBzOi8vczMuJHtlbnZpcm9ubWVudC5yZWdpb259LiR7dXJsU3VmZml4fS8ke2J1Y2tldE5hbWV9LyR7b2JqZWN0S2V5fWA7XG59XG5cbmZ1bmN0aW9uIHN1ZmZpeFdpdGhFcnJvcnMobXNnOiBzdHJpbmcsIGVycm9ycz86IHN0cmluZ1tdKSB7XG4gIHJldHVybiBlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDBcbiAgICA/IGAke21zZ306ICR7ZXJyb3JzLmpvaW4oJywgJyl9YFxuICAgIDogbXNnO1xufVxuIl19
|