@pipeline-builder/pipeline-manager 4.4.6 → 4.4.8
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/dist/agent/ai.d.ts +11 -0
- package/dist/agent/ai.d.ts.map +1 -1
- package/dist/agent/ai.js +47 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -2
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +3 -1
- package/dist/commands/create-pipeline.d.ts.map +1 -1
- package/dist/commands/create-pipeline.js +11 -2
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +20 -2
- package/dist/commands/report.js +4 -4
- package/dist/commands/security-report.d.ts +42 -0
- package/dist/commands/security-report.d.ts.map +1 -0
- package/dist/commands/security-report.js +89 -0
- package/dist/commands/setup-events.d.ts.map +1 -1
- package/dist/commands/setup-events.js +14 -1
- package/dist/commands/store-token.d.ts +1 -0
- package/dist/commands/store-token.d.ts.map +1 -1
- package/dist/commands/store-token.js +45 -19
- package/dist/commands/synth.d.ts +7 -1
- package/dist/commands/synth.d.ts.map +1 -1
- package/dist/commands/synth.js +66 -4
- package/dist/commands/verify-plugins.d.ts +45 -0
- package/dist/commands/verify-plugins.d.ts.map +1 -0
- package/dist/commands/verify-plugins.js +134 -0
- package/dist/lambda/token-renew-handler.d.ts +3 -1
- package/dist/lambda/token-renew-handler.d.ts.map +1 -1
- package/dist/lambda/token-renew-handler.js +31 -5
- package/dist/templates/events-stack.json +10 -0
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +20 -3
- package/dist/utils/auth-utils.d.ts.map +1 -1
- package/dist/utils/auth-utils.js +3 -1
- package/dist/utils/cdk-utils.js +2 -2
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +5 -2
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +9 -4
- package/dist/utils/deploy-runner.d.ts +25 -0
- package/dist/utils/deploy-runner.d.ts.map +1 -1
- package/dist/utils/deploy-runner.js +34 -5
- package/dist/utils/device-auth.d.ts.map +1 -1
- package/dist/utils/device-auth.js +4 -3
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +8 -1
- package/dist/utils/pipeline-config.d.ts +3 -0
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +4 -3
- package/dist/utils/platform-secret.d.ts.map +1 -1
- package/dist/utils/platform-secret.js +3 -1
- package/dist/utils/plugin-resolver.d.ts +41 -3
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +125 -21
- package/dist/utils/registration-client.d.ts +28 -0
- package/dist/utils/registration-client.d.ts.map +1 -0
- package/dist/utils/registration-client.js +57 -0
- package/dist/utils/request-context.d.ts +11 -0
- package/dist/utils/request-context.d.ts.map +1 -0
- package/dist/utils/request-context.js +62 -0
- package/dist/utils/service-account.d.ts +6 -4
- package/dist/utils/service-account.d.ts.map +1 -1
- package/dist/utils/service-account.js +14 -9
- package/package.json +6 -5
|
@@ -13,6 +13,7 @@ import { runDeploy } from '../utils/deploy-runner.js';
|
|
|
13
13
|
import { ERROR_CODES, handleError, ValidationError } from '../utils/error-handler.js';
|
|
14
14
|
import { ensureOutputDirectory, printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
15
15
|
import { fetchPipelineProps } from '../utils/pipeline-config.js';
|
|
16
|
+
import { resolveRegistrationClient } from '../utils/registration-client.js';
|
|
16
17
|
import { extractSingleResponse } from '../utils/response-utils.js';
|
|
17
18
|
import { relaxTlsForCli } from '../utils/tls.js';
|
|
18
19
|
const { bold, cyan, dim, green } = pico;
|
|
@@ -325,7 +326,15 @@ async function deployCreatedPipeline(options, pipelineId, executionId, debug) {
|
|
|
325
326
|
output: options.output,
|
|
326
327
|
debug,
|
|
327
328
|
executionId,
|
|
328
|
-
|
|
329
|
+
// Registered with the `pipeline-register` key under --store-tokens — the
|
|
330
|
+
// platform key reads pipelines and plugins only.
|
|
331
|
+
platformClient: await resolveRegistrationClient({
|
|
332
|
+
client: deployClient,
|
|
333
|
+
storeTokens: options.storeTokens,
|
|
334
|
+
orgId: fetched.pipeline.orgId,
|
|
335
|
+
region: options.region,
|
|
336
|
+
profile: options.profile,
|
|
337
|
+
}),
|
|
329
338
|
platformPipelineUrl: deployConfig.api.pipelineUrl,
|
|
330
339
|
platformBaseUrl: deployConfig.api.baseUrl,
|
|
331
340
|
});
|
|
@@ -462,4 +471,4 @@ export function createPipeline(program) {
|
|
|
462
471
|
}
|
|
463
472
|
});
|
|
464
473
|
}
|
|
465
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuSCxPQUFPLEVBQStGLE1BQU0sbUJBQW1CLENBQUM7QUFDaEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7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Q0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVztvQkFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87b0JBQ3hCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtvQkFDbEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7b0JBQzVCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDdkI7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24sIGZvcm1hdEZpbGVTaXplLCBGSUxFX1NJWkVfTElNSVRTLCBkZWZhdWx0UGlwZWxpbmVOYW1lIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdHlwZSBQaXBlbGluZSwgdHlwZSBQaXBlbGluZVJlc3BvbnNlLCB0eXBlIENyZWF0ZVBpcGVsaW5lUmVxdWVzdCwgdHlwZSBQbGF0Zm9ybURlcGxveUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50LCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHdpdGhTc2xPcHRpb25zLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcnVuRGVwbG95IH0gZnJvbSAnLi4vdXRpbHMvZGVwbG95LXJ1bm5lci5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZW5zdXJlT3V0cHV0RGlyZWN0b3J5LCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZmV0Y2hQaXBlbGluZVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvcGlwZWxpbmUtY29uZmlnLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLXV0aWxzLmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBkaW0sIGdyZWVuIH0gPSBwaWNvO1xuXG4vKiogUGFyc2VkIGBwaXBlbGluZSBjcmVhdGVgIGZsYWdzLiAqL1xuaW50ZXJmYWNlIENyZWF0ZVBpcGVsaW5lT3B0aW9ucyB7XG4gIGZpbGU6IHN0cmluZztcbiAgcHJvamVjdD86IHN0cmluZztcbiAgb3JnYW5pemF0aW9uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB2aXNpYmlsaXR5PzogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0Wyd2aXNpYmlsaXR5J107XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIHVwc2VydD86IGJvb2xlYW47XG4gIGRlcGxveT86IGJvb2xlYW47XG4gIHJlcXVpcmVBcHByb3ZhbDogc3RyaW5nO1xuICBvdXRwdXQ6IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgcmVnaW9uPzogc3RyaW5nO1xuICB2ZXJpZnlTc2w/OiBib29sZWFuO1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBzdG9yZVRva2Vucz86IGJvb2xlYW47XG59XG5cbi8qKiBWYWxpZGF0ZSB0aGUgcHJvcHMgZmlsZSAoZXhpc3RzLCBzaXplIGNhcCkgYW5kIHBhcnNlIGl0IGFzIGEgSlNPTiBvYmplY3QuICovXG5mdW5jdGlvbiByZWFkUHJvcHNGaWxlKGZpbGU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ0ZpbGUgVmFsaWRhdGlvbicpO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBub3QgZm91bmQnLCB7IHBhdGg6IGZpbGUgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZX1gLCAnZmlsZScpO1xuICB9XG5cbiAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmlsZUV4dCAhPT0gJy5qc29uJykge1xuICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC5qc29uJywgeyBleHRlbnNpb246IGZpbGVFeHQgfSk7XG4gIH1cblxuICBjb25zdCBmaWxlU3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKTtcbiAgaWYgKGZpbGVTdGF0cy5zaXplID4gRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUykge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBpcyB0b28gbGFyZ2UnLCB7XG4gICAgICBzaXplOiBmb3JtYXRGaWxlU2l6ZShmaWxlU3RhdHMuc2l6ZSksXG4gICAgICBsaW1pdDogZm9ybWF0RmlsZVNpemUoRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUyksXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIGV4Y2VlZHMgc2l6ZSBsaW1pdCcsICdmaWxlJyk7XG4gIH1cblxuICBwcmludFN1Y2Nlc3MoJ0ZpbGUgdmFsaWRhdGlvbiBwYXNzZWQnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0ZpbGUgUGF0aCc6IGZpbGUsXG4gICAgJ0ZpbGUgU2l6ZSc6IGZvcm1hdEZpbGVTaXplKGZpbGVTdGF0cy5zaXplKSxcbiAgICAnRXh0ZW5zaW9uJzogZmlsZUV4dCxcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludEluZm8oJ1JlYWRpbmcgcGlwZWxpbmUgcHJvcGVydGllcy4uLicpO1xuXG4gIGxldCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRyeSB7XG4gICAgcHJvcHMgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBKU09OIGluIHByb3BlcnRpZXMgZmlsZScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgaGludDogJ0Vuc3VyZSB0aGUgZmlsZSBjb250YWlucyB2YWxpZCBKU09OIHN5bnRheCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIG11c3QgY29udGFpbiB2YWxpZCBKU09OJywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnIHx8IHByb3BzID09PSBudWxsKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBwcm9wZXJ0aWVzIGZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IHR5cGVvZiBwcm9wcyxcbiAgICAgIGhpbnQ6ICdQcm9wZXJ0aWVzIG11c3QgYmUgYSBKU09OIG9iamVjdCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0JywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGNvbnN0IHByb3BDb3VudCA9IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGg7XG4gIHByaW50U3VjY2VzcygnUHJvcGVydGllcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdUb3RhbCBLZXlzJzogcHJvcENvdW50LnRvU3RyaW5nKCksXG4gICAgJ1NhbXBsZSBLZXlzJzogT2JqZWN0LmtleXMocHJvcHMpLnNsaWNlKDAsIDUpLmpvaW4oJywgJykgKyAocHJvcENvdW50ID4gNSA/ICcuLi4nIDogJycpLFxuICB9KTtcbiAgaWYgKHByb3BDb3VudCA9PT0gMCkge1xuICAgIHByaW50V2FybmluZygnUHJvcGVydGllcyBvYmplY3QgaXMgZW1wdHkgLSBwaXBlbGluZSB3aWxsIGhhdmUgbm8gY29uZmlndXJhdGlvbicpO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgY3JlYXRlIHJlcXVlc3QuIFByb2plY3QgJiBvcmdhbml6YXRpb24gcHJlZmVyIHRoZSBDTEkgZmxhZ3MgYW5kXG4gKiBmYWxsIGJhY2sgdG8gdmFsdWVzIGVtYmVkZGVkIGluIHRoZSBwcm9wcyBmaWxlIChidWlsZGVyUHJvcHMpLlxuICovXG5mdW5jdGlvbiBidWlsZENyZWF0ZVBheWxvYWQob3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDcmVhdGVQaXBlbGluZVJlcXVlc3Qge1xuICBjb25zdCByZXNvbHZlZFByb2plY3QgPSBvcHRpb25zLnByb2plY3QgPz8gKHByb3BzLnByb2plY3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgcmVzb2x2ZWRPcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbiA/PyAocHJvcHMub3JnYW5pemF0aW9uIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgaWYgKCFyZXNvbHZlZFByb2plY3QpIHtcbiAgICBwcmludEVycm9yKCdQcm9qZWN0IGlzIHJlcXVpcmVkJywge1xuICAgICAgaGludDogJ1Byb3ZpZGUgLXAvLS1wcm9qZWN0IGZsYWcgb3IgaW5jbHVkZSBcInByb2plY3RcIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsICdwcm9qZWN0Jyk7XG4gIH1cbiAgaWYgKCFyZXNvbHZlZE9yZ2FuaXphdGlvbikge1xuICAgIHByaW50RXJyb3IoJ09yZ2FuaXphdGlvbiBpcyByZXF1aXJlZCcsIHtcbiAgICAgIGhpbnQ6ICdQcm92aWRlIC1vLy0tb3JnYW5pemF0aW9uIGZsYWcgb3IgaW5jbHVkZSBcIm9yZ2FuaXphdGlvblwiIGluIHRoZSBwcm9wcyBmaWxlJyxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCAnb3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBpcGVsaW5lTmFtZSB3aXRoIHRoZSBzaGFyZWQgZGVmYXVsdCAobWlycm9ycyBwaXBlbGluZS1jb3JlJ3NcbiAgLy8gcGlwZWxpbmUtY29uZmlndXJhdGlvbi50cykgc28gY3JlYXRlICsgcmVnaXN0cnkgKyBDREsgYWxsIGFncmVlLlxuICBjb25zdCByZXNvbHZlZFBpcGVsaW5lTmFtZSA9IG9wdGlvbnMubmFtZVxuICAgID8/IChwcm9wcy5waXBlbGluZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgID8/IGRlZmF1bHRQaXBlbGluZU5hbWUocmVzb2x2ZWRPcmdhbml6YXRpb24sIHJlc29sdmVkUHJvamVjdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0ge1xuICAgIHByb2plY3Q6IHJlc29sdmVkUHJvamVjdCxcbiAgICBvcmdhbml6YXRpb246IHJlc29sdmVkT3JnYW5pemF0aW9uLFxuICAgIHBpcGVsaW5lTmFtZTogcmVzb2x2ZWRQaXBlbGluZU5hbWUsXG4gICAgcHJvcHMsXG4gIH07XG4gIGlmIChvcHRpb25zLnZpc2liaWxpdHkpIHBheWxvYWQudmlzaWJpbGl0eSA9IG9wdGlvbnMudmlzaWJpbGl0eTtcbiAgaWYgKG9wdGlvbnMuYWN0aXZlICE9PSB1bmRlZmluZWQpIHBheWxvYWQuaXNBY3RpdmUgPSBvcHRpb25zLmFjdGl2ZTtcbiAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8qKiBXaGV0aGVyIGFuIEFQSSBlcnJvciBpcyB0aGUgNDA5IGEgdGFrZW4gKHByb2plY3QsIG9yZ2FuaXphdGlvbikgc2xvdCByZXR1cm5zLiAqL1xuZnVuY3Rpb24gY29uZmxpY3RTdGF0dXMoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgcmVzID0gKGVycm9yIGFzIHsgcmVzcG9uc2U/OiB7IHN0YXR1cz86IG51bWJlciB9IH0gfCBudWxsKT8ucmVzcG9uc2U7XG4gIHJldHVybiByZXM/LnN0YXR1cyA9PT0gNDA5O1xufVxuXG4vKiogT25lIHJlYXNvbiBhIGNyZWF0ZSB3b3VsZCBiZSByZWZ1c2VkLCBhcyBgUE9TVCAvcGlwZWxpbmVzL3ZhbGlkYXRlYCByZXBvcnRzIGl0LiAqL1xuaW50ZXJmYWNlIFZhbGlkYXRpb25Qcm9ibGVtIHtcbiAgc3RhZ2U6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogVGhlIHN0YWdlL3BsdWdpbi9JQU0gcHJvamVjdGlvbiB0aGUgc2VydmVyIGRlcml2ZXMgZnJvbSB0aGUgY29uZmlnLiAqL1xuaW50ZXJmYWNlIFN0cnVjdHVyZVByZXZpZXcge1xuICBzdGFnZXM6IEFycmF5PHtcbiAgICBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBjb2RlUGlwZWxpbmVTdGFnZTogc3RyaW5nO1xuICAgIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICAgIHN0ZXBzOiBBcnJheTx7IHBsdWdpbjogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmc7IHBvc2l0aW9uOiBzdHJpbmcgfT47XG4gIH0+O1xuICBpYW06IHsgcm9sZVR5cGU6IHN0cmluZzsgY2FsbGVyU3VwcGxpZWQ6IGJvb2xlYW47IHJvbGVSZWY/OiBzdHJpbmcgfTtcbiAgcGx1Z2luczogc3RyaW5nW107XG59XG5cbi8qKiBXaGF0IGFuIHVwZGF0ZSB3b3VsZCBjaGFuZ2UsIHJlbGF0aXZlIHRvIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gKi9cbmludGVyZmFjZSBTdHJ1Y3R1cmVEaWZmIHtcbiAgc3RhZ2VzQWRkZWQ6IHN0cmluZ1tdO1xuICBzdGFnZXNSZW1vdmVkOiBzdHJpbmdbXTtcbiAgc3RhZ2VzQ2hhbmdlZDogc3RyaW5nW107XG4gIHBsdWdpbnNBZGRlZDogc3RyaW5nW107XG4gIHBsdWdpbnNSZW1vdmVkOiBzdHJpbmdbXTtcbiAgaWFtQ2hhbmdlZD86IHsgZnJvbTogeyByb2xlVHlwZTogc3RyaW5nIH07IHRvOiB7IHJvbGVUeXBlOiBzdHJpbmcgfSB9O1xuICB1bmNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgdmFsaWRhdGUgZW5kcG9pbnQncyByZXBvcnQuICovXG5pbnRlcmZhY2UgVmFsaWRhdGVSZXBvcnQge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgcHJvYmxlbXM6IFZhbGlkYXRpb25Qcm9ibGVtW107XG4gIHdhcm5pbmdzOiBWYWxpZGF0aW9uUHJvYmxlbVtdO1xuICBub3JtYWxpemVkPzogeyBwcm9qZWN0OiBzdHJpbmc7IG9yZ2FuaXphdGlvbjogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZzsgdmlzaWJpbGl0eTogc3RyaW5nIH07XG4gIHNsb3Q/OiB7IHRha2VuOiBib29sZWFuOyBwaXBlbGluZUlkPzogc3RyaW5nOyBwaXBlbGluZU5hbWU/OiBzdHJpbmc7IGRlbGV0ZWQ/OiBib29sZWFuIH07XG4gIGRlcGxveXM/OiBBcnJheTx7IHN0YWdlOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmc7IGluZmVycmVkOiBib29sZWFuIH0+O1xuICBkZXBsb3lzVGFnPzogc3RyaW5nO1xuICBxdW90YT86IHsgdXNlZDogbnVtYmVyOyBsaW1pdDogbnVtYmVyOyByZW1haW5pbmc6IG51bWJlcjsgdW5saW1pdGVkOiBib29sZWFuOyByZXNldEF0OiBzdHJpbmcgfTtcbiAgcHJldmlldz86IFN0cnVjdHVyZVByZXZpZXc7XG4gIGRpZmY/OiBTdHJ1Y3R1cmVEaWZmO1xufVxuXG4vKipcbiAqIFByaW50IHRoZSBzdHJ1Y3R1cmUgdGhlIGNvbmZpZyB3aWxsIGJ1aWxkLiBUaGlzIGlzIHRoZSBwYXJ0IGEgcmV2aWV3ZXIgc2lnbnNcbiAqIG9mZiBvbiDigJQgc3RhZ2Ugb3JkZXIsIHRoZSBwbHVnaW4gVkVSU0lPTlMgZWFjaCBzdGVwIHJlc29sdmVzIHRvLCB3aGljaCBzdGFnZXNcbiAqIGRlcGxveSB3aGVyZSwgYW5kIHdoZXRoZXIgdGhlIHBpcGVsaW5lIGFzc3VtZXMgYSBjYWxsZXItc3VwcGxpZWQgSUFNIHJvbGUuXG4gKi9cbmZ1bmN0aW9uIHByaW50UHJldmlldyhwcmV2aWV3OiBTdHJ1Y3R1cmVQcmV2aWV3KTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gV2hhdCBUaGlzIFdvdWxkIEJ1aWxkJyk7XG4gIGlmIChwcmV2aWV3LnN0YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHN0YWdlcyBkZWNsYXJlZCDigJQgdGhpcyBwaXBlbGluZSB3b3VsZCBidWlsZCBub3RoaW5nLicpO1xuICB9XG4gIGZvciAoY29uc3QgW2ksIHN0YWdlXSBvZiBwcmV2aWV3LnN0YWdlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkZXBsb3kgPSBzdGFnZS5lbnZpcm9ubWVudCA/IGAgJHtjeWFuKGDihpIgZGVwbG95cyB0byAke3N0YWdlLmVudmlyb25tZW50fWApfWAgOiAnJztcbiAgICBjb25zb2xlLmxvZyhgICAke2JvbGQoYCR7aSArIDF9LiAke3N0YWdlLnN0YWdlTmFtZX1gKX0gJHtkaW0oYCgke3N0YWdlLmNvZGVQaXBlbGluZVN0YWdlfSlgKX0ke2RlcGxveX1gKTtcbiAgICBpZiAoc3RhZ2Uuc3RlcHMubGVuZ3RoID09PSAwKSBjb25zb2xlLmxvZyhgICAgICAke2RpbSgnKG5vIHN0ZXBzKScpfWApO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGFnZS5zdGVwcykge1xuICAgICAgLy8gYGxhdGVzdGAgaXMgY2FsbGVkIG91dCBiZWNhdXNlIGFuIHVucGlubmVkIHBsdWdpbiByZXNvbHZlcyB0byB3aGF0ZXZlciBpc1xuICAgICAgLy8gbmV3ZXN0IGF0IHN5bnRoIOKAlCB0aGUgZGlmZmVyZW5jZSBhIHJldmlld2VyIG1vc3QgbmVlZHMgdG8gc2VlLlxuICAgICAgY29uc3QgdmVyc2lvbiA9IHN0ZXAudmVyc2lvbiA9PT0gJ2xhdGVzdCcgPyBgJHtzdGVwLnZlcnNpb259ICh1bnBpbm5lZClgIDogc3RlcC52ZXJzaW9uO1xuICAgICAgY29uc29sZS5sb2coYCAgICAgJHtkaW0oJ+KAoicpfSAke3N0ZXAucGx1Z2lufUAke3ZlcnNpb259JHtzdGVwLnBvc2l0aW9uID09PSAncG9zdCcgPyBkaW0oJyBbcG9zdF0nKSA6ICcnfWApO1xuICAgIH1cbiAgfVxuICBwcmludEluZm8oJ0lBTScsIHByZXZpZXcuaWFtLmNhbGxlclN1cHBsaWVkXG4gICAgPyB7IHJvbGU6IGAke3ByZXZpZXcuaWFtLnJvbGVUeXBlfSDigJQgY2FsbGVyLXN1cHBsaWVkJHtwcmV2aWV3LmlhbS5yb2xlUmVmID8gYDogJHtwcmV2aWV3LmlhbS5yb2xlUmVmfWAgOiAnJ31gIH1cbiAgICA6IHsgcm9sZTogYCR7cHJldmlldy5pYW0ucm9sZVR5cGV9IChwbGF0Zm9ybS1tYW5hZ2VkKWAgfSk7XG4gIGlmIChwcmV2aWV3LmlhbS5jYWxsZXJTdXBwbGllZCkge1xuICAgIHByaW50V2FybmluZygnVGhpcyBwaXBlbGluZSBhc3N1bWVzIGEgcm9sZSB0aGUgY29uZmlnIG5hbWVzLCBzbyBpdHMgcGVybWlzc2lvbnMgYXJlIHdoYXRldmVyIHRoYXQgcm9sZSBhbHJlYWR5IGhvbGRzLicpO1xuICB9XG59XG5cbi8qKiBQcmludCB3aGF0IGFuIHVwZGF0ZSB3b3VsZCBDSEFOR0UsIGZvciBhIHNsb3QgdGhhdCBpcyBhbHJlYWR5IG9jY3VwaWVkLiAqL1xuZnVuY3Rpb24gcHJpbnREaWZmKGRpZmY6IFN0cnVjdHVyZURpZmYpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBXaGF0IFdvdWxkIENoYW5nZScpO1xuICBpZiAoZGlmZi51bmNoYW5nZWQpIHtcbiAgICBwcmludEluZm8oJ05vIHN0cnVjdHVyYWwgY2hhbmdlIOKAlCBzdGFnZXMsIHBsdWdpbnMgYW5kIElBTSBhcmUgaWRlbnRpY2FsIHRvIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByb3dzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChkaWZmLnN0YWdlc0FkZGVkLmxlbmd0aCkgcm93c1snU3RhZ2VzIGFkZGVkJ10gPSBkaWZmLnN0YWdlc0FkZGVkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnN0YWdlc1JlbW92ZWQubGVuZ3RoKSByb3dzWydTdGFnZXMgcmVtb3ZlZCddID0gZGlmZi5zdGFnZXNSZW1vdmVkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnN0YWdlc0NoYW5nZWQubGVuZ3RoKSByb3dzWydTdGFnZXMgY2hhbmdlZCddID0gZGlmZi5zdGFnZXNDaGFuZ2VkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnBsdWdpbnNBZGRlZC5sZW5ndGgpIHJvd3NbJ1BsdWdpbnMgYWRkZWQnXSA9IGRpZmYucGx1Z2luc0FkZGVkLmpvaW4oJywgJyk7XG4gIGlmIChkaWZmLnBsdWdpbnNSZW1vdmVkLmxlbmd0aCkgcm93c1snUGx1Z2lucyByZW1vdmVkJ10gPSBkaWZmLnBsdWdpbnNSZW1vdmVkLmpvaW4oJywgJyk7XG4gIHByaW50S2V5VmFsdWUocm93cyk7XG4gIGlmIChkaWZmLmlhbUNoYW5nZWQpIHtcbiAgICBwcmludFdhcm5pbmcoYElBTSByb2xlIGNoYW5nZXM6ICR7ZGlmZi5pYW1DaGFuZ2VkLmZyb20ucm9sZVR5cGV9IOKGkiAke2RpZmYuaWFtQ2hhbmdlZC50by5yb2xlVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIGAtLWRyeS1ydW5gOiBhc2sgdGhlIHNlcnZlciB0byBydW4gZXZlcnkgY3JlYXRlLXRpbWUgY2hlY2sgYW5kIHByaW50IHRoZSByZXN1bHQuXG4gKlxuICogVGhpcyB1c2VkIHRvIHByaW50IHRoZSByZXF1ZXN0IGJvZHkgYW5kIGEgZ3JlZW4gXCLinJMgVmFsaWRhdGlvbiBjb21wbGV0ZVwiLCBoYXZpbmdcbiAqIHZhbGlkYXRlZCBub3RoaW5nIHNlcnZlci1zaWRlIOKAlCBzbyBhIGNvbmZpZyB0aGF0IGEgY29tcGxpYW5jZSBydWxlLCBhIHBsdWdpblxuICogY29udHJhY3Qgb3IgYW4gZXhoYXVzdGVkIHF1b3RhIHdvdWxkIHJlamVjdCByZXBvcnRlZCBzdWNjZXNzLiBOb3RoaW5nIGFib3V0IGFcbiAqIHBheWxvYWQgZWNobyBpcyBhIHZhbGlkYXRpb24uXG4gKlxuICogVEhST1dTIHdoZW4gdGhlIGNvbmZpZyBpcyBpbnZhbGlkLCBzbyBgLS1kcnktcnVuYCBleGl0cyBub24temVybyBhbmQgYSBDSSBzdGVwXG4gKiB0aGF0IHJ1bnMgaXQgZmFpbHMgaW5zdGVhZCBvZiBwYXNzaW5nIG9uIGEgcHJpbnRlZCBlcnJvci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuRHJ5UnVuKFxuICBvcHRpb25zOiBDcmVhdGVQaXBlbGluZU9wdGlvbnMsXG4gIHBheWxvYWQ6IENyZWF0ZVBpcGVsaW5lUmVxdWVzdCxcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50Pixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gUmVxdWVzdCBQcmV2aWV3Jyk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50U2VjdGlvbignRHJ5IFJ1biAtIFNlcnZlciBWYWxpZGF0aW9uJyk7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1ZhbGlkYXRpbmcgYWdhaW5zdCB0ZW1wbGF0ZXMsIHBsdWdpbiBjb250cmFjdHMsIGNvbXBsaWFuY2UgYW5kIHF1b3RhLi4uJykuc3RhcnQoKTtcbiAgbGV0IHJlcG9ydDogVmFsaWRhdGVSZXBvcnQ7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnBvc3Q8eyBkYXRhPzogVmFsaWRhdGVSZXBvcnQgfSAmIFZhbGlkYXRlUmVwb3J0PihcbiAgICAgIGAke2NvbmZpZy5hcGkucGlwZWxpbmVVcmx9L3ZhbGlkYXRlYCwgcGF5bG9hZCxcbiAgICApO1xuICAgIHJlcG9ydCA9IChyZXMuZGF0YSA/PyByZXMpIGFzIFZhbGlkYXRlUmVwb3J0O1xuICAgIHNwaW5uZXIuc3RvcCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnVmFsaWRhdGlvbiBjb3VsZCBub3QgYmUgcGVyZm9ybWVkJyk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBpZiAocmVwb3J0Lm5vcm1hbGl6ZWQpIHtcbiAgICBwcmludEluZm8oJ05vcm1hbGl6ZWQgaWRlbnRpdHknLCB7XG4gICAgICBwcm9qZWN0OiByZXBvcnQubm9ybWFsaXplZC5wcm9qZWN0LFxuICAgICAgb3JnYW5pemF0aW9uOiByZXBvcnQubm9ybWFsaXplZC5vcmdhbml6YXRpb24sXG4gICAgICBwaXBlbGluZU5hbWU6IHJlcG9ydC5ub3JtYWxpemVkLnBpcGVsaW5lTmFtZSxcbiAgICAgIHZpc2liaWxpdHk6IHJlcG9ydC5ub3JtYWxpemVkLnZpc2liaWxpdHksXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJlcG9ydC5xdW90YSkge1xuICAgIHByaW50SW5mbygnUGlwZWxpbmUgcXVvdGEnLCByZXBvcnQucXVvdGEudW5saW1pdGVkXG4gICAgICA/IHsgbGltaXQ6ICd1bmxpbWl0ZWQnIH1cbiAgICAgIDogeyB1c2VkOiByZXBvcnQucXVvdGEudXNlZCwgbGltaXQ6IHJlcG9ydC5xdW90YS5saW1pdCwgcmVtYWluaW5nOiByZXBvcnQucXVvdGEucmVtYWluaW5nIH0pO1xuICB9XG4gIC8vIEEgdGFrZW4gc2xvdCBpcyB0aGUgb25lIGRyeS1ydW4gZmluZGluZyB0aGF0IGlzIE5PVCBhIGNvbmZpZyBwcm9ibGVtOiB0aGVcbiAgLy8gY29uZmlnIGlzIHZhbGlkIGFuZCB0aGUgY3JlYXRlIHdvdWxkIHN0aWxsIDQwOSwgYmVjYXVzZSBvbmUgcGlwZWxpbmUgcGVyXG4gIC8vIChwcm9qZWN0LCBvcmdhbml6YXRpb24pIGlzIGEgdW5pcXVlbmVzcyBydWxlLCBub3QgYSB2YWxpZGF0aW9uIHJ1bGUuIFNheWluZyBzb1xuICAvLyBoZXJlIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBhc2tpbmcgdGhlIHNlcnZlciDigJQgYSBDSSBkcnktcnVuIHRoYXQgcGFzc2VzIGFuZFxuICAvLyB0aGVuIDQwOXMgb24gdGhlIHJlYWwgY3JlYXRlIGhhcyB0b2xkIG5vYm9keSBhbnl0aGluZy4gVGhlIHNlcnZlcidzIG1lc3NhZ2VcbiAgLy8gbmFtZXMgYD91cHNlcnQ9dHJ1ZWA7IGEgQ0xJIHVzZXIgaGFzIGAtLXVwc2VydGAuXG4gIGlmIChyZXBvcnQuc2xvdD8udGFrZW4pIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHJlcG9ydC5zbG90LnBpcGVsaW5lTmFtZSA/PyByZXBvcnQuc2xvdC5waXBlbGluZUlkID8/ICdhbiBleGlzdGluZyBwaXBlbGluZSc7XG4gICAgaWYgKG9wdGlvbnMudXBzZXJ0KSB7XG4gICAgICBwcmludEluZm8oYFRoaXMgcHJvamVjdC9vcmdhbml6YXRpb24gYWxyZWFkeSBoYXMgJHtleGlzdGluZ30g4oCUIC0tdXBzZXJ0IHdvdWxkIG92ZXJ3cml0ZSBpdGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgIGBUaGlzIHByb2plY3Qvb3JnYW5pemF0aW9uIGFscmVhZHkgaGFzICR7ZXhpc3Rpbmd9LCBzbyBjcmVhdGluZyB3b3VsZCBmYWlsIHdpdGggYSA0MDkuIGBcbiAgICAgICAgKyAnUmUtcnVuIHdpdGggLS11cHNlcnQgdG8gb3ZlcndyaXRlIGl0LCBvciBlZGl0IHRoZSBleGlzdGluZyBvbmUuJyxcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlcG9ydC5zbG90Py5kZWxldGVkKSB7XG4gICAgcHJpbnRJbmZvKCdBIGRlbGV0ZWQgcGlwZWxpbmUgaG9sZHMgdGhpcyBwcm9qZWN0L29yZ2FuaXphdGlvbiDigJQgY3JlYXRpbmcgd2lsbCByZXVzZSB0aGUgc2xvdCcpO1xuICB9XG4gIGlmIChyZXBvcnQucHJldmlldykgcHJpbnRQcmV2aWV3KHJlcG9ydC5wcmV2aWV3KTtcbiAgaWYgKHJlcG9ydC5kaWZmKSBwcmludERpZmYocmVwb3J0LmRpZmYpO1xuXG4gIGlmIChyZXBvcnQuZGVwbG95cyAmJiByZXBvcnQuZGVwbG95cy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnRJbmZvKCdET1JBIGRlcGxveSBhdHRyaWJ1dGlvbicsIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIHJlcG9ydC5kZXBsb3lzLm1hcCgoZCkgPT4gW2Quc3RhZ2UsIGAke2QuZW52aXJvbm1lbnR9JHtkLmluZmVycmVkID8gJyAoaW5mZXJyZWQpJyA6ICcnfWBdKSxcbiAgICApKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHN0YWdlIGRlY2xhcmVzIGFuIGVudmlyb25tZW50IOKAlCB0aGlzIHBpcGVsaW5lIHByb2R1Y2VzIG5vIERPUkEgZGVwbG95IHNpZ25hbC4nKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgdyBvZiByZXBvcnQud2FybmluZ3MgPz8gW10pIHByaW50V2FybmluZyhgWyR7dy5zdGFnZX1dICR7dy5tZXNzYWdlfWApO1xuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgaWYgKCFyZXBvcnQudmFsaWQpIHtcbiAgICBmb3IgKGNvbnN0IHByb2JsZW0gb2YgcmVwb3J0LnByb2JsZW1zID8/IFtdKSB7XG4gICAgICBwcmludEVycm9yKGBbJHtwcm9ibGVtLnN0YWdlfV0gJHtwcm9ibGVtLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIC8vIE5vbi16ZXJvIGV4aXQ6IGEgZHJ5IHJ1biB0aGF0IGZvdW5kIHJlYWwgcHJvYmxlbXMgbXVzdCBiZSBSRUQuIFByaW50aW5nIHRoZW1cbiAgICAvLyBhbmQgcmV0dXJuaW5nIDAgaXMgaG93IGEgYnJva2VuIGNvbmZpZyByZWFjaGVzIGEgcGlwZWxpbmUuXG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGBQaXBlbGluZSBjb25maWd1cmF0aW9uIGlzIG5vdCB2YWxpZCAoJHtyZXBvcnQucHJvYmxlbXM/Lmxlbmd0aCA/PyAwfSBwcm9ibGVtKHMpKSDigJQgbm90aGluZyB3YXMgY3JlYXRlZGAsXG4gICAgICAncHJvcHMnLFxuICAgICk7XG4gIH1cblxuICBwcmludFN1Y2Nlc3MoJ+KckyBDb25maWd1cmF0aW9uIGlzIHZhbGlkIC0gbm8gcGlwZWxpbmUgY3JlYXRlZCAoZHJ5IHJ1biBtb2RlKScpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGlmIChvcHRpb25zLmRlcGxveSkge1xuICAgIHByaW50SW5mbygnV2l0aCAtLWRlcGxveSwgdGhlIHBpcGVsaW5lIHdvdWxkIGJlIGRlcGxveWVkIHZpYSBDREsgYWZ0ZXIgY3JlYXRpb24nLCB7XG4gICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfHwgJyhkZWZhdWx0KScsXG4gICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uIHx8ICcoZGVmYXVsdCknLFxuICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICB9KTtcbiAgfVxuICBwcmludEluZm8oJ1RvIGNyZWF0ZSB0aGUgcGlwZWxpbmUsIHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IC0tZHJ5LXJ1bicpO1xufVxuXG4vKiogUHJpbnQgdGhlIGNyZWF0ZWQgcGlwZWxpbmUgYW5kIHNhdmUgaXQgdG8gYC4vb3V0cHV0L3BpcGVsaW5lLTxpZD4uanNvbmAuICovXG5mdW5jdGlvbiByZXBvcnRDcmVhdGVkUGlwZWxpbmUocGlwZWxpbmU6IFBpcGVsaW5lLCBleGVjdXRpb25JZDogc3RyaW5nLCByZXF1ZXN0RHVyYXRpb246IG51bWJlciwgc3RhcnRUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ+KckyBQaXBlbGluZSBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgJ1Byb2plY3QnOiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgJ1Zpc2liaWxpdHknOiBwaXBlbGluZS52aXNpYmlsaXR5IHx8ICdvcmcnLFxuICAgICdEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAnUHJvcGVydGllcyc6IHBpcGVsaW5lLnByb3BzID8gYCR7T2JqZWN0LmtleXMocGlwZWxpbmUucHJvcHMpLmxlbmd0aH0ga2V5c2AgOiAnKG5vdCByZXR1cm5lZCknLFxuICB9KTtcblxuICBpZiAocGlwZWxpbmUuY3JlYXRlZEF0KSB7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIHByaW50S2V5VmFsdWUoeyAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCB9KTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICdSZXF1ZXN0IER1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24ocmVxdWVzdER1cmF0aW9uKSxcbiAgICAnVG90YWwgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gJy4vb3V0cHV0JztcbiAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KG91dHB1dERpcik7XG4gIGNvbnN0IG91dHB1dEZpbGUgPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBgcGlwZWxpbmUtJHtwaXBlbGluZS5pZH0uanNvbmApO1xuICBmcy53cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIEpTT04uc3RyaW5naWZ5KHBpcGVsaW5lLCBudWxsLCAyKSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGRldGFpbHMgc2F2ZWQgdG8gZmlsZScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnT3V0cHV0IEZpbGUnOiBvdXRwdXRGaWxlLFxuICAgICdGaWxlIFNpemUnOiBmb3JtYXRGaWxlU2l6ZShmcy5zdGF0U3luYyhvdXRwdXRGaWxlKS5zaXplKSxcbiAgfSk7XG59XG5cbi8qKlxuICogYC0tZGVwbG95YDogcnVuIHRoZSBzYW1lIENESyBkZXBsb3kgKyBBUk4gcmVnaXN0cmF0aW9uIGFzIGBwaXBlbGluZSBkZXBsb3lcbiAqIC0taWRgLiBUaGUgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhdXRob3JpdGF0aXZlOiBpZiB0aGUgZGVwbG95IGZhaWxzIGl0XG4gKiBpcyBLRVBUIGFuZCB0aGUgZXhhY3QgcmV0cnkgaXMgc3VyZmFjZWQgcmF0aGVyIHRoYW4gcm9sbGVkIGJhY2sgKG5ldmVyXG4gKiBmYWxzZS1ncmVlbikuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUNyZWF0ZWRQaXBlbGluZShcbiAgb3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIGRlYnVnOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEZXBsb3lpbmcgUGlwZWxpbmUnKTtcbiAgdHJ5IHtcbiAgICAvLyBEZXBsb3kgdG91Y2hlcyB0aGUgQVdTIFNESyArIHRoZSBDREsgc3ludGggc3VicHJvY2VzczsgcmVsYXggVExTIHRoZVxuICAgIC8vIHNhbWUgd2F5IGBkZXBsb3lgIGRvZXMgKHJlZnVzZWQgaW4gcHJvZHVjdGlvbiBieSByZWxheFRsc0ZvckNsaSkuXG4gICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG4gICAgLy8gVGhlIGFzeW5jIGNsaWVudCBhZGRzIC0tc3RvcmUtdG9rZW5zIChTZWNyZXRzIE1hbmFnZXIpIHN1cHBvcnQgYW5kXG4gICAgLy8gYmFja3MgQk9USCB0aGUgcHJvcHMgZmV0Y2ggYW5kIHRoZSByZWdpc3RyeSBjYWxsYmFjay5cbiAgICBjb25zdCBkZXBsb3lDbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgY29uc3QgZGVwbG95Q29uZmlnID0gZGVwbG95Q2xpZW50LmdldENvbmZpZygpIGFzIFBsYXRmb3JtRGVwbG95Q29uZmlnO1xuICAgIC8vIFJlLWZldGNoIHRoZSBqdXN0LWNyZWF0ZWQgcGlwZWxpbmUgc28gcGx1Z2lucyBhcmUgcmVzb2x2ZWQgYW5kIHRoZVxuICAgIC8vIHJlZ2lzdHJ5IGhvc3QgaXMgYmFrZWQgRVhBQ1RMWSBhcyBgZGVwbG95IC0taWRgIGRvZXMg4oCUIG5vIGRyaWZ0LlxuICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMoZGVwbG95Q2xpZW50LCBwaXBlbGluZUlkKTtcbiAgICBhd2FpdCBydW5EZXBsb3koe1xuICAgICAgcGlwZWxpbmU6IGZldGNoZWQucGlwZWxpbmUsXG4gICAgICBwcm9wc1dpdGhJZHM6IGZldGNoZWQucHJvcHNXaXRoSWRzLFxuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICBvdXRwdXQ6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgZGVidWcsXG4gICAgICBleGVjdXRpb25JZCxcbiAgICAgIHBsYXRmb3JtQ2xpZW50OiBkZXBsb3lDbGllbnQsXG4gICAgICBwbGF0Zm9ybVBpcGVsaW5lVXJsOiBkZXBsb3lDb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgcGxhdGZvcm1CYXNlVXJsOiBkZXBsb3lDb25maWcuYXBpLmJhc2VVcmwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGRlcGxveUVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignUGlwZWxpbmUgd2FzIGNyZWF0ZWQgYnV0IHRoZSBkZXBsb3kgZmFpbGVkJywge1xuICAgICAgcGlwZWxpbmVJZCxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZGVwbG95RXJyb3IpLFxuICAgICAgcmV0cnk6IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGRlcGxveSAtLWlkICR7cGlwZWxpbmVJZH1gLFxuICAgIH0pO1xuICAgIC8vIFJlLXRocm93IHNvIHRoZSBwcm9jZXNzIGV4aXRzIG5vbi16ZXJvLiBUaGUgcmVjb3JkIGlzIGludGVudGlvbmFsbHlcbiAgICAvLyByZXRhaW5lZCDigJQgcmUtcnVuIHRoZSBkZXBsb3kgd2l0aCB0aGUgY29tbWFuZCBhYm92ZS5cbiAgICB0aHJvdyBkZXBsb3lFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGNyZWF0ZS1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBBY2NlcHRzIGEgcGlwZWxpbmUgcHJvcGVydGllcyBKU09OIGZpbGUsIHZhbGlkYXRlcyBpdCwgcmVzb2x2ZXNcbiAqIHByb2plY3Qvb3JnYW5pemF0aW9uIGZyb20gQ0xJIGZsYWdzIG9yIHRoZSBwcm9wcyBmaWxlLCBhbmRcbiAqIGNyZWF0ZXMgdGhlIHBpcGVsaW5lIHZpYSB0aGUgcGxhdGZvcm0gQVBJLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICB3aXRoUmVnaW9uT3B0aW9uKFxuICAgICAgd2l0aFByb2ZpbGVPcHRpb24ocHJvZ3JhbVxuICAgICAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAgICAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgcGlwZWxpbmUg4oCUIGFuZCBvcHRpb25hbGx5IGRlcGxveSBpdCB3aXRoIC0tZGVwbG95JylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdQYXRoIHRvIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlJylcbiAgICAgICAgLm9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGlwZWxpbmUgbmFtZScpXG4gICAgICAgIC5vcHRpb24oJy1hLCAtLXZpc2liaWxpdHkgPHJ1bmc+JywgJ1NoYXJpbmcgcnVuZyAocHJpdmF0ZXxvcmd8cHVibGljKS4gUGlwZWxpbmVzIGRlZmF1bHQgdG8gb3JnIOKAlCBhIHRlYW0gYXNzZXQgaXMgdmlzaWJsZSB0byB0aGUgdGVhbS4nLCAnb3JnJylcbiAgICAgICAgLy8gTm8gYC0tZGVmYXVsdGA6IGBwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWVgIGFsbG93cyBvbmUgcGlwZWxpbmUgcGVyXG4gICAgICAgIC8vIChwcm9qZWN0LCBvcmdhbml6YXRpb24sIG9yZyksIHNvIHRoZSBjcmVhdGVkIHJvdyBJUyBpdHMgc2xvdCdzIGRlZmF1bHQuXG4gICAgICAgIC5vcHRpb24oJy0tYWN0aXZlJywgJ1NldCBwaXBlbGluZSBhcyBhY3RpdmUnLCB0cnVlKVxuICAgICAgICAub3B0aW9uKCctLW5vLWFjdGl2ZScsICdDcmVhdGUgdGhlIHBpcGVsaW5lIGFzIGluYWN0aXZlJylcbiAgICAgICAgLm9wdGlvbignLS11cHNlcnQnLCAnT3ZlcndyaXRlIGFuIGV4aXN0aW5nIHBpcGVsaW5lIGZvciB0aGUgc2FtZSBwcm9qZWN0L29yZ2FuaXphdGlvbiAob3RoZXJ3aXNlIGEgdGFrZW4gc2xvdCBpcyBhIDQwOSknLCBmYWxzZSlcbiAgICAgICAgLy8gLS1kZXBsb3k6IGFmdGVyIGNyZWF0aW5nIHRoZSByZWNvcmQsIHJ1biB0aGUgc2FtZSBDREsgZGVwbG95ICsgQVJOXG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiBhcyBgcGlwZWxpbmUgZGVwbG95IC0taWRgIChzaGFyZWQgcnVuRGVwbG95KS4gVGhlIGZsYWdzXG4gICAgICAgIC8vIGJlbG93IGFwcGx5IG9ubHkgd2l0aCAtLWRlcGxveS5cbiAgICAgICAgLm9wdGlvbignLS1kZXBsb3knLCAnRGVwbG95IHRoZSBwaXBlbGluZSB3aXRoIEFXUyBDREsgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpbmcgaXQnLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcuIERlZmF1bHRzIHRvIGBicm9hZGVuaW5nYDogYSBkZXBsb3kgdGhhdCB3aWRlbnMgSUFNIHN0b3BzIGZvciBjb25maXJtYXRpb24uIFBhc3MgYG5ldmVyYCBmb3IgdW5hdHRlbmRlZCBydW5zLiAod2l0aCAtLWRlcGxveSknLCAnYnJvYWRlbmluZycpXG4gICAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5ICh3aXRoIC0tZGVwbG95KScsICdjZGsub3V0JylcbiAgICAgICAgLm9wdGlvbignLS1zdG9yZS10b2tlbnMnLCAnRGVwbG95IGF1dGggdmlhIEFXUyBTZWNyZXRzIE1hbmFnZXIgdG9rZW4gKHdpdGggLS1kZXBsb3k7IHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FKScsIGZhbHNlKSksXG4gICAgKSxcbiAgKVxuICAgIC5vcHRpb24oJy0tZHJ5LXJ1bicsICdWYWxpZGF0ZSBpbnB1dHMgd2l0aG91dCBjcmVhdGluZyBwaXBlbGluZScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IENyZWF0ZVBpcGVsaW5lT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ0NyZWF0ZSBQaXBlbGluZScsICdDcmVhdGluZyBQaXBlbGluZScpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgdHJ5IHtcblxuICAgICAgICAvLyBEaXNwbGF5IHBhcmFtZXRlcnNcbiAgICAgICAgcHJpbnRJbmZvKCdDb25maWd1cmF0aW9uJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQcm9qZWN0Jzogb3B0aW9ucy5wcm9qZWN0IHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IG9wdGlvbnMub3JnYW5pemF0aW9uIHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ05hbWUnOiBvcHRpb25zLm5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICAgJ1Zpc2liaWxpdHknOiBvcHRpb25zLnZpc2liaWxpdHksXG4gICAgICAgICAgJ0FjdGl2ZSc6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdPdmVyd3JpdGUgRXhpc3RpbmcnOiBvcHRpb25zLnVwc2VydCA/ICdZZXMgKC0tdXBzZXJ0KScgOiAnTm8nLFxuICAgICAgICAgICdEZXBsb3kgQWZ0ZXIgQ3JlYXRlJzogb3B0aW9ucy5kZXBsb3kgPyBgWWVzIChwcm9maWxlOiAke29wdGlvbnMucHJvZmlsZSB8fCAnZGVmYXVsdCd9KWAgOiAnTm8nLFxuICAgICAgICAgICdQcm9wZXJ0aWVzIEZpbGUnOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgJ1NTTCBWZXJpZmljYXRpb24nOiBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyAnRGlzYWJsZWQnIDogJ0VuYWJsZWQnLFxuICAgICAgICAgICdEcnkgUnVuJzogb3B0aW9ucy5kcnlSdW4gPyAnWWVzJyA6ICdObycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY3VyaXR5IHdhcm5pbmcgZm9yIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWRcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICBjb25zdCBwcm9wcyA9IHJlYWRQcm9wc0ZpbGUob3B0aW9ucy5maWxlKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGJ1aWxkQ3JlYXRlUGF5bG9hZChvcHRpb25zLCBwcm9wcyk7XG5cbiAgICAgICAgLy8gQ3JlYXRlZCBiZWZvcmUgdGhlIGRyeS1ydW4gYnJhbmNoOiAtLWRyeS1ydW4gbm93IGNhbGxzIHRoZSBzZXJ2ZXIsIHNvIGl0XG4gICAgICAgIC8vIG5lZWRzIHRoZSBzYW1lIGF1dGhlbnRpY2F0ZWQgY2xpZW50IHRoZSBjcmVhdGUgZG9lcy5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGF3YWl0IHJ1bkRyeVJ1bihvcHRpb25zLCBwYXlsb2FkLCBjbGllbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBwaXBlbGluZVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignQ3JlYXRpbmcgUGlwZWxpbmUnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDcmVhdGluZyBwaXBlbGluZS4uLicpLnN0YXJ0KCk7XG4gICAgICAgIGxldCByYXdSZXNwb25zZTogUGlwZWxpbmVSZXNwb25zZTtcbiAgICAgICAgbGV0IHJlcXVlc3REdXJhdGlvbjogbnVtYmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgcmF3UmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxQaXBlbGluZVJlc3BvbnNlPihcbiAgICAgICAgICAgIG9wdGlvbnMudXBzZXJ0ID8gYCR7Y29uZmlnLmFwaS5waXBlbGluZVVybH0/dXBzZXJ0PXRydWVgIDogY29uZmlnLmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXF1ZXN0RHVyYXRpb24gPSBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0O1xuICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChvcHRpb25zLnVwc2VydCA/ICdQaXBlbGluZSBjcmVhdGVkIG9yIHVwZGF0ZWQnIDogJ1BpcGVsaW5lIGNyZWF0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgIC8vIEEgNDA5IG1lYW5zIHRoZSAocHJvamVjdCwgb3JnYW5pemF0aW9uKSBzbG90IGlzIHRha2VuLiBUaGUgc2VydmVyJ3NcbiAgICAgICAgICAvLyBtZXNzYWdlIG5hbWVzIGA/dXBzZXJ0PXRydWVgOyB0cmFuc2xhdGUgaXQgdG8gdGhlIGZsYWcgYSBDTEkgdXNlciBoYXMuXG4gICAgICAgICAgaWYgKGNvbmZsaWN0U3RhdHVzKGVycm9yKSAmJiAhb3B0aW9ucy51cHNlcnQpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnVGhhdCBwcm9qZWN0L29yZ2FuaXphdGlvbiBhbHJlYWR5IGhhcyBhIHBpcGVsaW5lLiBSZS1ydW4gd2l0aCAtLXVwc2VydCB0byBvdmVyd3JpdGUgaXQsIG9yIGVkaXQgdGhlIGV4aXN0aW5nIG9uZS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocmF3UmVzcG9uc2UsICdwaXBlbGluZScsICdpZCcpO1xuXG4gICAgICAgIGlmICghcGlwZWxpbmU/LmlkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBwaXBlbGluZSByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCAtIG5vIHZhbGlkIHBpcGVsaW5lIGRhdGEgcmVjZWl2ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9ydENyZWF0ZWRQaXBlbGluZShwaXBlbGluZSwgZXhlY3V0aW9uSWQsIHJlcXVlc3REdXJhdGlvbiwgc3RhcnRUaW1lKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICBhd2FpdCBkZXBsb3lDcmVhdGVkUGlwZWxpbmUob3B0aW9ucywgcGlwZWxpbmUuaWQsIGV4ZWN1dGlvbklkLCBwcm9ncmFtLm9wdHMoKS5kZWJ1Zyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdOZXh0IFN0ZXBzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRpbSgnWW91IGNhbiBub3c6JykpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZGVwbG95KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gRGVwbG95OiAke2JvbGQoYGRlcGxveSAtLWlkICR7cGlwZWxpbmUuaWR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gVmlldzogJHtib2xkKGBnZXQtcGlwZWxpbmUgLS1pZCAke3BpcGVsaW5lLmlkfWApfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBBUEk6ICR7Y29uZmlnLmFwaS5iYXNlVXJsfSR7Y29uZmlnLmFwaS5waXBlbGluZVVybH0vJHtwaXBlbGluZS5pZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnY3JlYXRlLXBpcGVsaW5lJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgcHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufSJdfQ==
|
|
474
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuSCxPQUFPLEVBQStGLE1BQU0sbUJBQW1CLENBQUM7QUFDaEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7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Q0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVc7b0JBQ1gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29CQUN4QixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7b0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO29CQUM1QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07aUJBQ3ZCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uLCBmb3JtYXRGaWxlU2l6ZSwgRklMRV9TSVpFX0xJTUlUUywgZGVmYXVsdFBpcGVsaW5lTmFtZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUsIHR5cGUgUGlwZWxpbmVSZXNwb25zZSwgdHlwZSBDcmVhdGVQaXBlbGluZVJlcXVlc3QsIHR5cGUgUGxhdGZvcm1EZXBsb3lDb25maWcgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jLCB3aXRoU3NsT3B0aW9ucywgd2l0aFByb2ZpbGVPcHRpb24sIHdpdGhSZWdpb25PcHRpb24gfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IHJ1bkRlcGxveSB9IGZyb20gJy4uL3V0aWxzL2RlcGxveS1ydW5uZXIuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IGVuc3VyZU91dHB1dERpcmVjdG9yeSwgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGZldGNoUGlwZWxpbmVQcm9wcyB9IGZyb20gJy4uL3V0aWxzL3BpcGVsaW5lLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vdXRpbHMvcmVnaXN0cmF0aW9uLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS11dGlscy5qcyc7XG5pbXBvcnQgeyByZWxheFRsc0ZvckNsaSB9IGZyb20gJy4uL3V0aWxzL3Rscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZGltLCBncmVlbiB9ID0gcGljbztcblxuLyoqIFBhcnNlZCBgcGlwZWxpbmUgY3JlYXRlYCBmbGFncy4gKi9cbmludGVyZmFjZSBDcmVhdGVQaXBlbGluZU9wdGlvbnMge1xuICBmaWxlOiBzdHJpbmc7XG4gIHByb2plY3Q/OiBzdHJpbmc7XG4gIG9yZ2FuaXphdGlvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdmlzaWJpbGl0eT86IENyZWF0ZVBpcGVsaW5lUmVxdWVzdFsndmlzaWJpbGl0eSddO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICB1cHNlcnQ/OiBib29sZWFuO1xuICBkZXBsb3k/OiBib29sZWFuO1xuICByZXF1aXJlQXBwcm92YWw6IHN0cmluZztcbiAgb3V0cHV0OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbiAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgc3RvcmVUb2tlbnM/OiBib29sZWFuO1xufVxuXG4vKiogVmFsaWRhdGUgdGhlIHByb3BzIGZpbGUgKGV4aXN0cywgc2l6ZSBjYXApIGFuZCBwYXJzZSBpdCBhcyBhIEpTT04gb2JqZWN0LiAqL1xuZnVuY3Rpb24gcmVhZFByb3BzRmlsZShmaWxlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdGaWxlIFZhbGlkYXRpb24nKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZSkpIHtcbiAgICBwcmludEVycm9yKCdQcm9wZXJ0aWVzIGZpbGUgbm90IGZvdW5kJywgeyBwYXRoOiBmaWxlIH0pO1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke2ZpbGV9YCwgJ2ZpbGUnKTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZSkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZpbGVFeHQgIT09ICcuanNvbicpIHtcbiAgICBwcmludFdhcm5pbmcoJ0ZpbGUgZXh0ZW5zaW9uIGlzIG5vdCAuanNvbicsIHsgZXh0ZW5zaW9uOiBmaWxlRXh0IH0pO1xuICB9XG5cbiAgY29uc3QgZmlsZVN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZSk7XG4gIGlmIChmaWxlU3RhdHMuc2l6ZSA+IEZJTEVfU0laRV9MSU1JVFMuUElQRUxJTkVfUFJPUFMpIHtcbiAgICBwcmludEVycm9yKCdQcm9wZXJ0aWVzIGZpbGUgaXMgdG9vIGxhcmdlJywge1xuICAgICAgc2l6ZTogZm9ybWF0RmlsZVNpemUoZmlsZVN0YXRzLnNpemUpLFxuICAgICAgbGltaXQ6IGZvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUElQRUxJTkVfUFJPUFMpLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBleGNlZWRzIHNpemUgbGltaXQnLCAnZmlsZScpO1xuICB9XG5cbiAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkJyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdGaWxlIFBhdGgnOiBmaWxlLFxuICAgICdGaWxlIFNpemUnOiBmb3JtYXRGaWxlU2l6ZShmaWxlU3RhdHMuc2l6ZSksXG4gICAgJ0V4dGVuc2lvbic6IGZpbGVFeHQsXG4gIH0pO1xuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRJbmZvKCdSZWFkaW5nIHBpcGVsaW5lIHByb3BlcnRpZXMuLi4nKTtcblxuICBsZXQgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0cnkge1xuICAgIHByb3BzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04JykpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IoJ0ludmFsaWQgSlNPTiBpbiBwcm9wZXJ0aWVzIGZpbGUnLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgIGhpbnQ6ICdFbnN1cmUgdGhlIGZpbGUgY29udGFpbnMgdmFsaWQgSlNPTiBzeW50YXgnLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBtdXN0IGNvbnRhaW4gdmFsaWQgSlNPTicsICdmaWxlJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb3BzICE9PSAnb2JqZWN0JyB8fCBwcm9wcyA9PT0gbnVsbCkge1xuICAgIHByaW50RXJyb3IoJ0ludmFsaWQgcHJvcGVydGllcyBmb3JtYXQnLCB7XG4gICAgICB0eXBlOiB0eXBlb2YgcHJvcHMsXG4gICAgICBoaW50OiAnUHJvcGVydGllcyBtdXN0IGJlIGEgSlNPTiBvYmplY3QnLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb3BlcnRpZXMgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcsICdmaWxlJyk7XG4gIH1cblxuICBjb25zdCBwcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoO1xuICBwcmludFN1Y2Nlc3MoJ1Byb3BlcnRpZXMgcGFyc2VkIHN1Y2Nlc3NmdWxseScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnVG90YWwgS2V5cyc6IHByb3BDb3VudC50b1N0cmluZygpLFxuICAgICdTYW1wbGUgS2V5cyc6IE9iamVjdC5rZXlzKHByb3BzKS5zbGljZSgwLCA1KS5qb2luKCcsICcpICsgKHByb3BDb3VudCA+IDUgPyAnLi4uJyA6ICcnKSxcbiAgfSk7XG4gIGlmIChwcm9wQ291bnQgPT09IDApIHtcbiAgICBwcmludFdhcm5pbmcoJ1Byb3BlcnRpZXMgb2JqZWN0IGlzIGVtcHR5IC0gcGlwZWxpbmUgd2lsbCBoYXZlIG5vIGNvbmZpZ3VyYXRpb24nKTtcbiAgfVxuICByZXR1cm4gcHJvcHM7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGNyZWF0ZSByZXF1ZXN0LiBQcm9qZWN0ICYgb3JnYW5pemF0aW9uIHByZWZlciB0aGUgQ0xJIGZsYWdzIGFuZFxuICogZmFsbCBiYWNrIHRvIHZhbHVlcyBlbWJlZGRlZCBpbiB0aGUgcHJvcHMgZmlsZSAoYnVpbGRlclByb3BzKS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDcmVhdGVQYXlsb2FkKG9wdGlvbnM6IENyZWF0ZVBpcGVsaW5lT3B0aW9ucywgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0IHtcbiAgY29uc3QgcmVzb2x2ZWRQcm9qZWN0ID0gb3B0aW9ucy5wcm9qZWN0ID8/IChwcm9wcy5wcm9qZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHJlc29sdmVkT3JnYW5pemF0aW9uID0gb3B0aW9ucy5vcmdhbml6YXRpb24gPz8gKHByb3BzLm9yZ2FuaXphdGlvbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gIGlmICghcmVzb2x2ZWRQcm9qZWN0KSB7XG4gICAgcHJpbnRFcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsIHtcbiAgICAgIGhpbnQ6ICdQcm92aWRlIC1wLy0tcHJvamVjdCBmbGFnIG9yIGluY2x1ZGUgXCJwcm9qZWN0XCIgaW4gdGhlIHByb3BzIGZpbGUnLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb2plY3QgaXMgcmVxdWlyZWQnLCAncHJvamVjdCcpO1xuICB9XG4gIGlmICghcmVzb2x2ZWRPcmdhbml6YXRpb24pIHtcbiAgICBwcmludEVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCB7XG4gICAgICBoaW50OiAnUHJvdmlkZSAtby8tLW9yZ2FuaXphdGlvbiBmbGFnIG9yIGluY2x1ZGUgXCJvcmdhbml6YXRpb25cIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignT3JnYW5pemF0aW9uIGlzIHJlcXVpcmVkJywgJ29yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBwaXBlbGluZU5hbWUgd2l0aCB0aGUgc2hhcmVkIGRlZmF1bHQgKG1pcnJvcnMgcGlwZWxpbmUtY29yZSdzXG4gIC8vIHBpcGVsaW5lLWNvbmZpZ3VyYXRpb24udHMpIHNvIGNyZWF0ZSArIHJlZ2lzdHJ5ICsgQ0RLIGFsbCBhZ3JlZS5cbiAgY29uc3QgcmVzb2x2ZWRQaXBlbGluZU5hbWUgPSBvcHRpb25zLm5hbWVcbiAgICA/PyAocHJvcHMucGlwZWxpbmVOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZClcbiAgICA/PyBkZWZhdWx0UGlwZWxpbmVOYW1lKHJlc29sdmVkT3JnYW5pemF0aW9uLCByZXNvbHZlZFByb2plY3QpO1xuXG4gIGNvbnN0IHBheWxvYWQ6IENyZWF0ZVBpcGVsaW5lUmVxdWVzdCA9IHtcbiAgICBwcm9qZWN0OiByZXNvbHZlZFByb2plY3QsXG4gICAgb3JnYW5pemF0aW9uOiByZXNvbHZlZE9yZ2FuaXphdGlvbixcbiAgICBwaXBlbGluZU5hbWU6IHJlc29sdmVkUGlwZWxpbmVOYW1lLFxuICAgIHByb3BzLFxuICB9O1xuICBpZiAob3B0aW9ucy52aXNpYmlsaXR5KSBwYXlsb2FkLnZpc2liaWxpdHkgPSBvcHRpb25zLnZpc2liaWxpdHk7XG4gIGlmIChvcHRpb25zLmFjdGl2ZSAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLmlzQWN0aXZlID0gb3B0aW9ucy5hY3RpdmU7XG4gIHJldHVybiBwYXlsb2FkO1xufVxuXG4vKiogV2hldGhlciBhbiBBUEkgZXJyb3IgaXMgdGhlIDQwOSBhIHRha2VuIChwcm9qZWN0LCBvcmdhbml6YXRpb24pIHNsb3QgcmV0dXJucy4gKi9cbmZ1bmN0aW9uIGNvbmZsaWN0U3RhdHVzKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJlcyA9IChlcnJvciBhcyB7IHJlc3BvbnNlPzogeyBzdGF0dXM/OiBudW1iZXIgfSB9IHwgbnVsbCk/LnJlc3BvbnNlO1xuICByZXR1cm4gcmVzPy5zdGF0dXMgPT09IDQwOTtcbn1cblxuLyoqIE9uZSByZWFzb24gYSBjcmVhdGUgd291bGQgYmUgcmVmdXNlZCwgYXMgYFBPU1QgL3BpcGVsaW5lcy92YWxpZGF0ZWAgcmVwb3J0cyBpdC4gKi9cbmludGVyZmFjZSBWYWxpZGF0aW9uUHJvYmxlbSB7XG4gIHN0YWdlOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIFRoZSBzdGFnZS9wbHVnaW4vSUFNIHByb2plY3Rpb24gdGhlIHNlcnZlciBkZXJpdmVzIGZyb20gdGhlIGNvbmZpZy4gKi9cbmludGVyZmFjZSBTdHJ1Y3R1cmVQcmV2aWV3IHtcbiAgc3RhZ2VzOiBBcnJheTx7XG4gICAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gICAgY29kZVBpcGVsaW5lU3RhZ2U6IHN0cmluZztcbiAgICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgICBzdGVwczogQXJyYXk8eyBwbHVnaW46IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nOyBwb3NpdGlvbjogc3RyaW5nIH0+O1xuICB9PjtcbiAgaWFtOiB7IHJvbGVUeXBlOiBzdHJpbmc7IGNhbGxlclN1cHBsaWVkOiBib29sZWFuOyByb2xlUmVmPzogc3RyaW5nIH07XG4gIHBsdWdpbnM6IHN0cmluZ1tdO1xufVxuXG4vKiogV2hhdCBhbiB1cGRhdGUgd291bGQgY2hhbmdlLCByZWxhdGl2ZSB0byB0aGUgc3RvcmVkIGNvbmZpZ3VyYXRpb24uICovXG5pbnRlcmZhY2UgU3RydWN0dXJlRGlmZiB7XG4gIHN0YWdlc0FkZGVkOiBzdHJpbmdbXTtcbiAgc3RhZ2VzUmVtb3ZlZDogc3RyaW5nW107XG4gIHN0YWdlc0NoYW5nZWQ6IHN0cmluZ1tdO1xuICBwbHVnaW5zQWRkZWQ6IHN0cmluZ1tdO1xuICBwbHVnaW5zUmVtb3ZlZDogc3RyaW5nW107XG4gIGlhbUNoYW5nZWQ/OiB7IGZyb206IHsgcm9sZVR5cGU6IHN0cmluZyB9OyB0bzogeyByb2xlVHlwZTogc3RyaW5nIH0gfTtcbiAgdW5jaGFuZ2VkOiBib29sZWFuO1xufVxuXG4vKiogVGhlIHZhbGlkYXRlIGVuZHBvaW50J3MgcmVwb3J0LiAqL1xuaW50ZXJmYWNlIFZhbGlkYXRlUmVwb3J0IHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIHByb2JsZW1zOiBWYWxpZGF0aW9uUHJvYmxlbVtdO1xuICB3YXJuaW5nczogVmFsaWRhdGlvblByb2JsZW1bXTtcbiAgbm9ybWFsaXplZD86IHsgcHJvamVjdDogc3RyaW5nOyBvcmdhbml6YXRpb246IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmc7IHZpc2liaWxpdHk6IHN0cmluZyB9O1xuICBzbG90PzogeyB0YWtlbjogYm9vbGVhbjsgcGlwZWxpbmVJZD86IHN0cmluZzsgcGlwZWxpbmVOYW1lPzogc3RyaW5nOyBkZWxldGVkPzogYm9vbGVhbiB9O1xuICBkZXBsb3lzPzogQXJyYXk8eyBzdGFnZTogc3RyaW5nOyBlbnZpcm9ubWVudDogc3RyaW5nOyBpbmZlcnJlZDogYm9vbGVhbiB9PjtcbiAgZGVwbG95c1RhZz86IHN0cmluZztcbiAgcXVvdGE/OiB7IHVzZWQ6IG51bWJlcjsgbGltaXQ6IG51bWJlcjsgcmVtYWluaW5nOiBudW1iZXI7IHVubGltaXRlZDogYm9vbGVhbjsgcmVzZXRBdDogc3RyaW5nIH07XG4gIHByZXZpZXc/OiBTdHJ1Y3R1cmVQcmV2aWV3O1xuICBkaWZmPzogU3RydWN0dXJlRGlmZjtcbn1cblxuLyoqXG4gKiBQcmludCB0aGUgc3RydWN0dXJlIHRoZSBjb25maWcgd2lsbCBidWlsZC4gVGhpcyBpcyB0aGUgcGFydCBhIHJldmlld2VyIHNpZ25zXG4gKiBvZmYgb24g4oCUIHN0YWdlIG9yZGVyLCB0aGUgcGx1Z2luIFZFUlNJT05TIGVhY2ggc3RlcCByZXNvbHZlcyB0bywgd2hpY2ggc3RhZ2VzXG4gKiBkZXBsb3kgd2hlcmUsIGFuZCB3aGV0aGVyIHRoZSBwaXBlbGluZSBhc3N1bWVzIGEgY2FsbGVyLXN1cHBsaWVkIElBTSByb2xlLlxuICovXG5mdW5jdGlvbiBwcmludFByZXZpZXcocHJldmlldzogU3RydWN0dXJlUHJldmlldyk6IHZvaWQge1xuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50U2VjdGlvbignRHJ5IFJ1biAtIFdoYXQgVGhpcyBXb3VsZCBCdWlsZCcpO1xuICBpZiAocHJldmlldy5zdGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdObyBzdGFnZXMgZGVjbGFyZWQg4oCUIHRoaXMgcGlwZWxpbmUgd291bGQgYnVpbGQgbm90aGluZy4nKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtpLCBzdGFnZV0gb2YgcHJldmlldy5zdGFnZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgZGVwbG95ID0gc3RhZ2UuZW52aXJvbm1lbnQgPyBgICR7Y3lhbihg4oaSIGRlcGxveXMgdG8gJHtzdGFnZS5lbnZpcm9ubWVudH1gKX1gIDogJyc7XG4gICAgY29uc29sZS5sb2coYCAgJHtib2xkKGAke2kgKyAxfS4gJHtzdGFnZS5zdGFnZU5hbWV9YCl9ICR7ZGltKGAoJHtzdGFnZS5jb2RlUGlwZWxpbmVTdGFnZX0pYCl9JHtkZXBsb3l9YCk7XG4gICAgaWYgKHN0YWdlLnN0ZXBzLmxlbmd0aCA9PT0gMCkgY29uc29sZS5sb2coYCAgICAgJHtkaW0oJyhubyBzdGVwcyknKX1gKTtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RhZ2Uuc3RlcHMpIHtcbiAgICAgIC8vIGBsYXRlc3RgIGlzIGNhbGxlZCBvdXQgYmVjYXVzZSBhbiB1bnBpbm5lZCBwbHVnaW4gcmVzb2x2ZXMgdG8gd2hhdGV2ZXIgaXNcbiAgICAgIC8vIG5ld2VzdCBhdCBzeW50aCDigJQgdGhlIGRpZmZlcmVuY2UgYSByZXZpZXdlciBtb3N0IG5lZWRzIHRvIHNlZS5cbiAgICAgIGNvbnN0IHZlcnNpb24gPSBzdGVwLnZlcnNpb24gPT09ICdsYXRlc3QnID8gYCR7c3RlcC52ZXJzaW9ufSAodW5waW5uZWQpYCA6IHN0ZXAudmVyc2lvbjtcbiAgICAgIGNvbnNvbGUubG9nKGAgICAgICR7ZGltKCfigKInKX0gJHtzdGVwLnBsdWdpbn1AJHt2ZXJzaW9ufSR7c3RlcC5wb3NpdGlvbiA9PT0gJ3Bvc3QnID8gZGltKCcgW3Bvc3RdJykgOiAnJ31gKTtcbiAgICB9XG4gIH1cbiAgcHJpbnRJbmZvKCdJQU0nLCBwcmV2aWV3LmlhbS5jYWxsZXJTdXBwbGllZFxuICAgID8geyByb2xlOiBgJHtwcmV2aWV3LmlhbS5yb2xlVHlwZX0g4oCUIGNhbGxlci1zdXBwbGllZCR7cHJldmlldy5pYW0ucm9sZVJlZiA/IGA6ICR7cHJldmlldy5pYW0ucm9sZVJlZn1gIDogJyd9YCB9XG4gICAgOiB7IHJvbGU6IGAke3ByZXZpZXcuaWFtLnJvbGVUeXBlfSAocGxhdGZvcm0tbWFuYWdlZClgIH0pO1xuICBpZiAocHJldmlldy5pYW0uY2FsbGVyU3VwcGxpZWQpIHtcbiAgICBwcmludFdhcm5pbmcoJ1RoaXMgcGlwZWxpbmUgYXNzdW1lcyBhIHJvbGUgdGhlIGNvbmZpZyBuYW1lcywgc28gaXRzIHBlcm1pc3Npb25zIGFyZSB3aGF0ZXZlciB0aGF0IHJvbGUgYWxyZWFkeSBob2xkcy4nKTtcbiAgfVxufVxuXG4vKiogUHJpbnQgd2hhdCBhbiB1cGRhdGUgd291bGQgQ0hBTkdFLCBmb3IgYSBzbG90IHRoYXQgaXMgYWxyZWFkeSBvY2N1cGllZC4gKi9cbmZ1bmN0aW9uIHByaW50RGlmZihkaWZmOiBTdHJ1Y3R1cmVEaWZmKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gV2hhdCBXb3VsZCBDaGFuZ2UnKTtcbiAgaWYgKGRpZmYudW5jaGFuZ2VkKSB7XG4gICAgcHJpbnRJbmZvKCdObyBzdHJ1Y3R1cmFsIGNoYW5nZSDigJQgc3RhZ2VzLCBwbHVnaW5zIGFuZCBJQU0gYXJlIGlkZW50aWNhbCB0byB0aGUgc3RvcmVkIGNvbmZpZ3VyYXRpb24nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgcm93czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoZGlmZi5zdGFnZXNBZGRlZC5sZW5ndGgpIHJvd3NbJ1N0YWdlcyBhZGRlZCddID0gZGlmZi5zdGFnZXNBZGRlZC5qb2luKCcsICcpO1xuICBpZiAoZGlmZi5zdGFnZXNSZW1vdmVkLmxlbmd0aCkgcm93c1snU3RhZ2VzIHJlbW92ZWQnXSA9IGRpZmYuc3RhZ2VzUmVtb3ZlZC5qb2luKCcsICcpO1xuICBpZiAoZGlmZi5zdGFnZXNDaGFuZ2VkLmxlbmd0aCkgcm93c1snU3RhZ2VzIGNoYW5nZWQnXSA9IGRpZmYuc3RhZ2VzQ2hhbmdlZC5qb2luKCcsICcpO1xuICBpZiAoZGlmZi5wbHVnaW5zQWRkZWQubGVuZ3RoKSByb3dzWydQbHVnaW5zIGFkZGVkJ10gPSBkaWZmLnBsdWdpbnNBZGRlZC5qb2luKCcsICcpO1xuICBpZiAoZGlmZi5wbHVnaW5zUmVtb3ZlZC5sZW5ndGgpIHJvd3NbJ1BsdWdpbnMgcmVtb3ZlZCddID0gZGlmZi5wbHVnaW5zUmVtb3ZlZC5qb2luKCcsICcpO1xuICBwcmludEtleVZhbHVlKHJvd3MpO1xuICBpZiAoZGlmZi5pYW1DaGFuZ2VkKSB7XG4gICAgcHJpbnRXYXJuaW5nKGBJQU0gcm9sZSBjaGFuZ2VzOiAke2RpZmYuaWFtQ2hhbmdlZC5mcm9tLnJvbGVUeXBlfSDihpIgJHtkaWZmLmlhbUNoYW5nZWQudG8ucm9sZVR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBgLS1kcnktcnVuYDogYXNrIHRoZSBzZXJ2ZXIgdG8gcnVuIGV2ZXJ5IGNyZWF0ZS10aW1lIGNoZWNrIGFuZCBwcmludCB0aGUgcmVzdWx0LlxuICpcbiAqIFRoaXMgdXNlZCB0byBwcmludCB0aGUgcmVxdWVzdCBib2R5IGFuZCBhIGdyZWVuIFwi4pyTIFZhbGlkYXRpb24gY29tcGxldGVcIiwgaGF2aW5nXG4gKiB2YWxpZGF0ZWQgbm90aGluZyBzZXJ2ZXItc2lkZSDigJQgc28gYSBjb25maWcgdGhhdCBhIGNvbXBsaWFuY2UgcnVsZSwgYSBwbHVnaW5cbiAqIGNvbnRyYWN0IG9yIGFuIGV4aGF1c3RlZCBxdW90YSB3b3VsZCByZWplY3QgcmVwb3J0ZWQgc3VjY2Vzcy4gTm90aGluZyBhYm91dCBhXG4gKiBwYXlsb2FkIGVjaG8gaXMgYSB2YWxpZGF0aW9uLlxuICpcbiAqIFRIUk9XUyB3aGVuIHRoZSBjb25maWcgaXMgaW52YWxpZCwgc28gYC0tZHJ5LXJ1bmAgZXhpdHMgbm9uLXplcm8gYW5kIGEgQ0kgc3RlcFxuICogdGhhdCBydW5zIGl0IGZhaWxzIGluc3RlYWQgb2YgcGFzc2luZyBvbiBhIHByaW50ZWQgZXJyb3IuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkRyeVJ1bihcbiAgb3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLFxuICBwYXlsb2FkOiBDcmVhdGVQaXBlbGluZVJlcXVlc3QsXG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudD4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50U2VjdGlvbignRHJ5IFJ1biAtIFJlcXVlc3QgUHJldmlldycpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBTZXJ2ZXIgVmFsaWRhdGlvbicpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdWYWxpZGF0aW5nIGFnYWluc3QgdGVtcGxhdGVzLCBwbHVnaW4gY29udHJhY3RzLCBjb21wbGlhbmNlIGFuZCBxdW90YS4uLicpLnN0YXJ0KCk7XG4gIGxldCByZXBvcnQ6IFZhbGlkYXRlUmVwb3J0O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PHsgZGF0YT86IFZhbGlkYXRlUmVwb3J0IH0gJiBWYWxpZGF0ZVJlcG9ydD4oXG4gICAgICBgJHtjb25maWcuYXBpLnBpcGVsaW5lVXJsfS92YWxpZGF0ZWAsIHBheWxvYWQsXG4gICAgKTtcbiAgICByZXBvcnQgPSAocmVzLmRhdGEgPz8gcmVzKSBhcyBWYWxpZGF0ZVJlcG9ydDtcbiAgICBzcGlubmVyLnN0b3AoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ1ZhbGlkYXRpb24gY291bGQgbm90IGJlIHBlcmZvcm1lZCcpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgaWYgKHJlcG9ydC5ub3JtYWxpemVkKSB7XG4gICAgcHJpbnRJbmZvKCdOb3JtYWxpemVkIGlkZW50aXR5Jywge1xuICAgICAgcHJvamVjdDogcmVwb3J0Lm5vcm1hbGl6ZWQucHJvamVjdCxcbiAgICAgIG9yZ2FuaXphdGlvbjogcmVwb3J0Lm5vcm1hbGl6ZWQub3JnYW5pemF0aW9uLFxuICAgICAgcGlwZWxpbmVOYW1lOiByZXBvcnQubm9ybWFsaXplZC5waXBlbGluZU5hbWUsXG4gICAgICB2aXNpYmlsaXR5OiByZXBvcnQubm9ybWFsaXplZC52aXNpYmlsaXR5LFxuICAgIH0pO1xuICB9XG4gIGlmIChyZXBvcnQucXVvdGEpIHtcbiAgICBwcmludEluZm8oJ1BpcGVsaW5lIHF1b3RhJywgcmVwb3J0LnF1b3RhLnVubGltaXRlZFxuICAgICAgPyB7IGxpbWl0OiAndW5saW1pdGVkJyB9XG4gICAgICA6IHsgdXNlZDogcmVwb3J0LnF1b3RhLnVzZWQsIGxpbWl0OiByZXBvcnQucXVvdGEubGltaXQsIHJlbWFpbmluZzogcmVwb3J0LnF1b3RhLnJlbWFpbmluZyB9KTtcbiAgfVxuICAvLyBBIHRha2VuIHNsb3QgaXMgdGhlIG9uZSBkcnktcnVuIGZpbmRpbmcgdGhhdCBpcyBOT1QgYSBjb25maWcgcHJvYmxlbTogdGhlXG4gIC8vIGNvbmZpZyBpcyB2YWxpZCBhbmQgdGhlIGNyZWF0ZSB3b3VsZCBzdGlsbCA0MDksIGJlY2F1c2Ugb25lIHBpcGVsaW5lIHBlclxuICAvLyAocHJvamVjdCwgb3JnYW5pemF0aW9uKSBpcyBhIHVuaXF1ZW5lc3MgcnVsZSwgbm90IGEgdmFsaWRhdGlvbiBydWxlLiBTYXlpbmcgc29cbiAgLy8gaGVyZSBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgYXNraW5nIHRoZSBzZXJ2ZXIg4oCUIGEgQ0kgZHJ5LXJ1biB0aGF0IHBhc3NlcyBhbmRcbiAgLy8gdGhlbiA0MDlzIG9uIHRoZSByZWFsIGNyZWF0ZSBoYXMgdG9sZCBub2JvZHkgYW55dGhpbmcuIFRoZSBzZXJ2ZXIncyBtZXNzYWdlXG4gIC8vIG5hbWVzIGA/dXBzZXJ0PXRydWVgOyBhIENMSSB1c2VyIGhhcyBgLS11cHNlcnRgLlxuICBpZiAocmVwb3J0LnNsb3Q/LnRha2VuKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSByZXBvcnQuc2xvdC5waXBlbGluZU5hbWUgPz8gcmVwb3J0LnNsb3QucGlwZWxpbmVJZCA/PyAnYW4gZXhpc3RpbmcgcGlwZWxpbmUnO1xuICAgIGlmIChvcHRpb25zLnVwc2VydCkge1xuICAgICAgcHJpbnRJbmZvKGBUaGlzIHByb2plY3Qvb3JnYW5pemF0aW9uIGFscmVhZHkgaGFzICR7ZXhpc3Rpbmd9IOKAlCAtLXVwc2VydCB3b3VsZCBvdmVyd3JpdGUgaXRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICBgVGhpcyBwcm9qZWN0L29yZ2FuaXphdGlvbiBhbHJlYWR5IGhhcyAke2V4aXN0aW5nfSwgc28gY3JlYXRpbmcgd291bGQgZmFpbCB3aXRoIGEgNDA5LiBgXG4gICAgICAgICsgJ1JlLXJ1biB3aXRoIC0tdXBzZXJ0IHRvIG92ZXJ3cml0ZSBpdCwgb3IgZWRpdCB0aGUgZXhpc3Rpbmcgb25lLicsXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChyZXBvcnQuc2xvdD8uZGVsZXRlZCkge1xuICAgIHByaW50SW5mbygnQSBkZWxldGVkIHBpcGVsaW5lIGhvbGRzIHRoaXMgcHJvamVjdC9vcmdhbml6YXRpb24g4oCUIGNyZWF0aW5nIHdpbGwgcmV1c2UgdGhlIHNsb3QnKTtcbiAgfVxuICBpZiAocmVwb3J0LnByZXZpZXcpIHByaW50UHJldmlldyhyZXBvcnQucHJldmlldyk7XG4gIGlmIChyZXBvcnQuZGlmZikgcHJpbnREaWZmKHJlcG9ydC5kaWZmKTtcblxuICBpZiAocmVwb3J0LmRlcGxveXMgJiYgcmVwb3J0LmRlcGxveXMubGVuZ3RoID4gMCkge1xuICAgIHByaW50SW5mbygnRE9SQSBkZXBsb3kgYXR0cmlidXRpb24nLCBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICByZXBvcnQuZGVwbG95cy5tYXAoKGQpID0+IFtkLnN0YWdlLCBgJHtkLmVudmlyb25tZW50fSR7ZC5pbmZlcnJlZCA/ICcgKGluZmVycmVkKScgOiAnJ31gXSksXG4gICAgKSk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRXYXJuaW5nKCdObyBzdGFnZSBkZWNsYXJlcyBhbiBlbnZpcm9ubWVudCDigJQgdGhpcyBwaXBlbGluZSBwcm9kdWNlcyBubyBET1JBIGRlcGxveSBzaWduYWwuJyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHcgb2YgcmVwb3J0Lndhcm5pbmdzID8/IFtdKSBwcmludFdhcm5pbmcoYFske3cuc3RhZ2V9XSAke3cubWVzc2FnZX1gKTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIGlmICghcmVwb3J0LnZhbGlkKSB7XG4gICAgZm9yIChjb25zdCBwcm9ibGVtIG9mIHJlcG9ydC5wcm9ibGVtcyA/PyBbXSkge1xuICAgICAgcHJpbnRFcnJvcihgWyR7cHJvYmxlbS5zdGFnZX1dICR7cHJvYmxlbS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICAvLyBOb24temVybyBleGl0OiBhIGRyeSBydW4gdGhhdCBmb3VuZCByZWFsIHByb2JsZW1zIG11c3QgYmUgUkVELiBQcmludGluZyB0aGVtXG4gICAgLy8gYW5kIHJldHVybmluZyAwIGlzIGhvdyBhIGJyb2tlbiBjb25maWcgcmVhY2hlcyBhIHBpcGVsaW5lLlxuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgUGlwZWxpbmUgY29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgKCR7cmVwb3J0LnByb2JsZW1zPy5sZW5ndGggPz8gMH0gcHJvYmxlbShzKSkg4oCUIG5vdGhpbmcgd2FzIGNyZWF0ZWRgLFxuICAgICAgJ3Byb3BzJyxcbiAgICApO1xuICB9XG5cbiAgcHJpbnRTdWNjZXNzKCfinJMgQ29uZmlndXJhdGlvbiBpcyB2YWxpZCAtIG5vIHBpcGVsaW5lIGNyZWF0ZWQgKGRyeSBydW4gbW9kZSknKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBpZiAob3B0aW9ucy5kZXBsb3kpIHtcbiAgICBwcmludEluZm8oJ1dpdGggLS1kZXBsb3ksIHRoZSBwaXBlbGluZSB3b3VsZCBiZSBkZXBsb3llZCB2aWEgQ0RLIGFmdGVyIGNyZWF0aW9uJywge1xuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIHx8ICcoZGVmYXVsdCknLFxuICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbiB8fCAnKGRlZmF1bHQpJyxcbiAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgfSk7XG4gIH1cbiAgcHJpbnRJbmZvKCdUbyBjcmVhdGUgdGhlIHBpcGVsaW5lLCBydW4gdGhlIGNvbW1hbmQgd2l0aG91dCAtLWRyeS1ydW4nKTtcbn1cblxuLyoqIFByaW50IHRoZSBjcmVhdGVkIHBpcGVsaW5lIGFuZCBzYXZlIGl0IHRvIGAuL291dHB1dC9waXBlbGluZS08aWQ+Lmpzb25gLiAqL1xuZnVuY3Rpb24gcmVwb3J0Q3JlYXRlZFBpcGVsaW5lKHBpcGVsaW5lOiBQaXBlbGluZSwgZXhlY3V0aW9uSWQ6IHN0cmluZywgcmVxdWVzdER1cmF0aW9uOiBudW1iZXIsIHN0YXJ0VGltZTogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCfinJMgUGlwZWxpbmUgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ1BpcGVsaW5lIElEJzogZ3JlZW4oYm9sZChwaXBlbGluZS5pZCkpLFxuICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAnT3JnYW5pemF0aW9uJzogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICdOYW1lJzogcGlwZWxpbmUucGlwZWxpbmVOYW1lIHx8ICcobm90IHNldCknLFxuICAgICdWaXNpYmlsaXR5JzogcGlwZWxpbmUudmlzaWJpbGl0eSB8fCAnb3JnJyxcbiAgICAnRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCA/ICdZZXMnIDogJ05vJyxcbiAgICAnQWN0aXZlJzogcGlwZWxpbmUuaXNBY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgJ1Byb3BlcnRpZXMnOiBwaXBlbGluZS5wcm9wcyA/IGAke09iamVjdC5rZXlzKHBpcGVsaW5lLnByb3BzKS5sZW5ndGh9IGtleXNgIDogJyhub3QgcmV0dXJuZWQpJyxcbiAgfSk7XG5cbiAgaWYgKHBpcGVsaW5lLmNyZWF0ZWRBdCkge1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICBwcmludEtleVZhbHVlKHsgJ0NyZWF0ZWQgQXQnOiBwaXBlbGluZS5jcmVhdGVkQXQgfSk7XG4gIH1cblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAnUmVxdWVzdCBEdXJhdGlvbic6IGZvcm1hdER1cmF0aW9uKHJlcXVlc3REdXJhdGlvbiksXG4gICAgJ1RvdGFsIER1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSksXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dERpciA9ICcuL291dHB1dCc7XG4gIGVuc3VyZU91dHB1dERpcmVjdG9yeShvdXRwdXREaXIpO1xuICBjb25zdCBvdXRwdXRGaWxlID0gcGF0aC5qb2luKG91dHB1dERpciwgYHBpcGVsaW5lLSR7cGlwZWxpbmUuaWR9Lmpzb25gKTtcbiAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRGaWxlLCBKU09OLnN0cmluZ2lmeShwaXBlbGluZSwgbnVsbCwgMikpO1xuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSBkZXRhaWxzIHNhdmVkIHRvIGZpbGUnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ091dHB1dCBGaWxlJzogb3V0cHV0RmlsZSxcbiAgICAnRmlsZSBTaXplJzogZm9ybWF0RmlsZVNpemUoZnMuc3RhdFN5bmMob3V0cHV0RmlsZSkuc2l6ZSksXG4gIH0pO1xufVxuXG4vKipcbiAqIGAtLWRlcGxveWA6IHJ1biB0aGUgc2FtZSBDREsgZGVwbG95ICsgQVJOIHJlZ2lzdHJhdGlvbiBhcyBgcGlwZWxpbmUgZGVwbG95XG4gKiAtLWlkYC4gVGhlIHJlY29yZCBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYXV0aG9yaXRhdGl2ZTogaWYgdGhlIGRlcGxveSBmYWlscyBpdFxuICogaXMgS0VQVCBhbmQgdGhlIGV4YWN0IHJldHJ5IGlzIHN1cmZhY2VkIHJhdGhlciB0aGFuIHJvbGxlZCBiYWNrIChuZXZlclxuICogZmFsc2UtZ3JlZW4pLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lDcmVhdGVkUGlwZWxpbmUoXG4gIG9wdGlvbnM6IENyZWF0ZVBpcGVsaW5lT3B0aW9ucyxcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBleGVjdXRpb25JZDogc3RyaW5nLFxuICBkZWJ1ZzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50U2VjdGlvbignRGVwbG95aW5nIFBpcGVsaW5lJyk7XG4gIHRyeSB7XG4gICAgLy8gRGVwbG95IHRvdWNoZXMgdGhlIEFXUyBTREsgKyB0aGUgQ0RLIHN5bnRoIHN1YnByb2Nlc3M7IHJlbGF4IFRMUyB0aGVcbiAgICAvLyBzYW1lIHdheSBgZGVwbG95YCBkb2VzIChyZWZ1c2VkIGluIHByb2R1Y3Rpb24gYnkgcmVsYXhUbHNGb3JDbGkpLlxuICAgIHJlbGF4VGxzRm9yQ2xpKG9wdGlvbnMudmVyaWZ5U3NsLCBwcmludFdhcm5pbmcpO1xuICAgIC8vIFRoZSBhc3luYyBjbGllbnQgYWRkcyAtLXN0b3JlLXRva2VucyAoU2VjcmV0cyBNYW5hZ2VyKSBzdXBwb3J0IGFuZFxuICAgIC8vIGJhY2tzIEJPVEggdGhlIHByb3BzIGZldGNoIGFuZCB0aGUgcmVnaXN0cnkgY2FsbGJhY2suXG4gICAgY29uc3QgZGVwbG95Q2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgIGNvbnN0IGRlcGxveUNvbmZpZyA9IGRlcGxveUNsaWVudC5nZXRDb25maWcoKSBhcyBQbGF0Zm9ybURlcGxveUNvbmZpZztcbiAgICAvLyBSZS1mZXRjaCB0aGUganVzdC1jcmVhdGVkIHBpcGVsaW5lIHNvIHBsdWdpbnMgYXJlIHJlc29sdmVkIGFuZCB0aGVcbiAgICAvLyByZWdpc3RyeSBob3N0IGlzIGJha2VkIEVYQUNUTFkgYXMgYGRlcGxveSAtLWlkYCBkb2VzIOKAlCBubyBkcmlmdC5cbiAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hQaXBlbGluZVByb3BzKGRlcGxveUNsaWVudCwgcGlwZWxpbmVJZCk7XG4gICAgYXdhaXQgcnVuRGVwbG95KHtcbiAgICAgIHBpcGVsaW5lOiBmZXRjaGVkLnBpcGVsaW5lLFxuICAgICAgcHJvcHNXaXRoSWRzOiBmZXRjaGVkLnByb3BzV2l0aElkcyxcbiAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgIGRlYnVnLFxuICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAvLyBSZWdpc3RlcmVkIHdpdGggdGhlIGBwaXBlbGluZS1yZWdpc3RlcmAga2V5IHVuZGVyIC0tc3RvcmUtdG9rZW5zIOKAlCB0aGVcbiAgICAgIC8vIHBsYXRmb3JtIGtleSByZWFkcyBwaXBlbGluZXMgYW5kIHBsdWdpbnMgb25seS5cbiAgICAgIHBsYXRmb3JtQ2xpZW50OiBhd2FpdCByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50KHtcbiAgICAgICAgY2xpZW50OiBkZXBsb3lDbGllbnQsXG4gICAgICAgIHN0b3JlVG9rZW5zOiBvcHRpb25zLnN0b3JlVG9rZW5zLFxuICAgICAgICBvcmdJZDogZmV0Y2hlZC5waXBlbGluZS5vcmdJZCxcbiAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgfSksXG4gICAgICBwbGF0Zm9ybVBpcGVsaW5lVXJsOiBkZXBsb3lDb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgcGxhdGZvcm1CYXNlVXJsOiBkZXBsb3lDb25maWcuYXBpLmJhc2VVcmwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGRlcGxveUVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignUGlwZWxpbmUgd2FzIGNyZWF0ZWQgYnV0IHRoZSBkZXBsb3kgZmFpbGVkJywge1xuICAgICAgcGlwZWxpbmVJZCxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZGVwbG95RXJyb3IpLFxuICAgICAgcmV0cnk6IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGRlcGxveSAtLWlkICR7cGlwZWxpbmVJZH1gLFxuICAgIH0pO1xuICAgIC8vIFJlLXRocm93IHNvIHRoZSBwcm9jZXNzIGV4aXRzIG5vbi16ZXJvLiBUaGUgcmVjb3JkIGlzIGludGVudGlvbmFsbHlcbiAgICAvLyByZXRhaW5lZCDigJQgcmUtcnVuIHRoZSBkZXBsb3kgd2l0aCB0aGUgY29tbWFuZCBhYm92ZS5cbiAgICB0aHJvdyBkZXBsb3lFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGNyZWF0ZS1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBBY2NlcHRzIGEgcGlwZWxpbmUgcHJvcGVydGllcyBKU09OIGZpbGUsIHZhbGlkYXRlcyBpdCwgcmVzb2x2ZXNcbiAqIHByb2plY3Qvb3JnYW5pemF0aW9uIGZyb20gQ0xJIGZsYWdzIG9yIHRoZSBwcm9wcyBmaWxlLCBhbmRcbiAqIGNyZWF0ZXMgdGhlIHBpcGVsaW5lIHZpYSB0aGUgcGxhdGZvcm0gQVBJLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICB3aXRoUmVnaW9uT3B0aW9uKFxuICAgICAgd2l0aFByb2ZpbGVPcHRpb24ocHJvZ3JhbVxuICAgICAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAgICAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgcGlwZWxpbmUg4oCUIGFuZCBvcHRpb25hbGx5IGRlcGxveSBpdCB3aXRoIC0tZGVwbG95JylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdQYXRoIHRvIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlJylcbiAgICAgICAgLm9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGlwZWxpbmUgbmFtZScpXG4gICAgICAgIC5vcHRpb24oJy1hLCAtLXZpc2liaWxpdHkgPHJ1bmc+JywgJ1NoYXJpbmcgcnVuZyAocHJpdmF0ZXxvcmd8cHVibGljKS4gUGlwZWxpbmVzIGRlZmF1bHQgdG8gb3JnIOKAlCBhIHRlYW0gYXNzZXQgaXMgdmlzaWJsZSB0byB0aGUgdGVhbS4nLCAnb3JnJylcbiAgICAgICAgLy8gTm8gYC0tZGVmYXVsdGA6IGBwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWVgIGFsbG93cyBvbmUgcGlwZWxpbmUgcGVyXG4gICAgICAgIC8vIChwcm9qZWN0LCBvcmdhbml6YXRpb24sIG9yZyksIHNvIHRoZSBjcmVhdGVkIHJvdyBJUyBpdHMgc2xvdCdzIGRlZmF1bHQuXG4gICAgICAgIC5vcHRpb24oJy0tYWN0aXZlJywgJ1NldCBwaXBlbGluZSBhcyBhY3RpdmUnLCB0cnVlKVxuICAgICAgICAub3B0aW9uKCctLW5vLWFjdGl2ZScsICdDcmVhdGUgdGhlIHBpcGVsaW5lIGFzIGluYWN0aXZlJylcbiAgICAgICAgLm9wdGlvbignLS11cHNlcnQnLCAnT3ZlcndyaXRlIGFuIGV4aXN0aW5nIHBpcGVsaW5lIGZvciB0aGUgc2FtZSBwcm9qZWN0L29yZ2FuaXphdGlvbiAob3RoZXJ3aXNlIGEgdGFrZW4gc2xvdCBpcyBhIDQwOSknLCBmYWxzZSlcbiAgICAgICAgLy8gLS1kZXBsb3k6IGFmdGVyIGNyZWF0aW5nIHRoZSByZWNvcmQsIHJ1biB0aGUgc2FtZSBDREsgZGVwbG95ICsgQVJOXG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiBhcyBgcGlwZWxpbmUgZGVwbG95IC0taWRgIChzaGFyZWQgcnVuRGVwbG95KS4gVGhlIGZsYWdzXG4gICAgICAgIC8vIGJlbG93IGFwcGx5IG9ubHkgd2l0aCAtLWRlcGxveS5cbiAgICAgICAgLm9wdGlvbignLS1kZXBsb3knLCAnRGVwbG95IHRoZSBwaXBlbGluZSB3aXRoIEFXUyBDREsgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpbmcgaXQnLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcuIERlZmF1bHRzIHRvIGBicm9hZGVuaW5nYDogYSBkZXBsb3kgdGhhdCB3aWRlbnMgSUFNIHN0b3BzIGZvciBjb25maXJtYXRpb24uIFBhc3MgYG5ldmVyYCBmb3IgdW5hdHRlbmRlZCBydW5zLiAod2l0aCAtLWRlcGxveSknLCAnYnJvYWRlbmluZycpXG4gICAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5ICh3aXRoIC0tZGVwbG95KScsICdjZGsub3V0JylcbiAgICAgICAgLm9wdGlvbignLS1zdG9yZS10b2tlbnMnLCAnRGVwbG95IGF1dGggdmlhIEFXUyBTZWNyZXRzIE1hbmFnZXIgdG9rZW4gKHdpdGggLS1kZXBsb3k7IHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FKScsIGZhbHNlKSksXG4gICAgKSxcbiAgKVxuICAgIC5vcHRpb24oJy0tZHJ5LXJ1bicsICdWYWxpZGF0ZSBpbnB1dHMgd2l0aG91dCBjcmVhdGluZyBwaXBlbGluZScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IENyZWF0ZVBpcGVsaW5lT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ0NyZWF0ZSBQaXBlbGluZScsICdDcmVhdGluZyBQaXBlbGluZScpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgdHJ5IHtcblxuICAgICAgICAvLyBEaXNwbGF5IHBhcmFtZXRlcnNcbiAgICAgICAgcHJpbnRJbmZvKCdDb25maWd1cmF0aW9uJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQcm9qZWN0Jzogb3B0aW9ucy5wcm9qZWN0IHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IG9wdGlvbnMub3JnYW5pemF0aW9uIHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ05hbWUnOiBvcHRpb25zLm5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICAgJ1Zpc2liaWxpdHknOiBvcHRpb25zLnZpc2liaWxpdHksXG4gICAgICAgICAgJ0FjdGl2ZSc6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdPdmVyd3JpdGUgRXhpc3RpbmcnOiBvcHRpb25zLnVwc2VydCA/ICdZZXMgKC0tdXBzZXJ0KScgOiAnTm8nLFxuICAgICAgICAgICdEZXBsb3kgQWZ0ZXIgQ3JlYXRlJzogb3B0aW9ucy5kZXBsb3kgPyBgWWVzIChwcm9maWxlOiAke29wdGlvbnMucHJvZmlsZSB8fCAnZGVmYXVsdCd9KWAgOiAnTm8nLFxuICAgICAgICAgICdQcm9wZXJ0aWVzIEZpbGUnOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgJ1NTTCBWZXJpZmljYXRpb24nOiBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyAnRGlzYWJsZWQnIDogJ0VuYWJsZWQnLFxuICAgICAgICAgICdEcnkgUnVuJzogb3B0aW9ucy5kcnlSdW4gPyAnWWVzJyA6ICdObycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY3VyaXR5IHdhcm5pbmcgZm9yIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWRcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICBjb25zdCBwcm9wcyA9IHJlYWRQcm9wc0ZpbGUob3B0aW9ucy5maWxlKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGJ1aWxkQ3JlYXRlUGF5bG9hZChvcHRpb25zLCBwcm9wcyk7XG5cbiAgICAgICAgLy8gQ3JlYXRlZCBiZWZvcmUgdGhlIGRyeS1ydW4gYnJhbmNoOiAtLWRyeS1ydW4gbm93IGNhbGxzIHRoZSBzZXJ2ZXIsIHNvIGl0XG4gICAgICAgIC8vIG5lZWRzIHRoZSBzYW1lIGF1dGhlbnRpY2F0ZWQgY2xpZW50IHRoZSBjcmVhdGUgZG9lcy5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGF3YWl0IHJ1bkRyeVJ1bihvcHRpb25zLCBwYXlsb2FkLCBjbGllbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBwaXBlbGluZVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignQ3JlYXRpbmcgUGlwZWxpbmUnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDcmVhdGluZyBwaXBlbGluZS4uLicpLnN0YXJ0KCk7XG4gICAgICAgIGxldCByYXdSZXNwb25zZTogUGlwZWxpbmVSZXNwb25zZTtcbiAgICAgICAgbGV0IHJlcXVlc3REdXJhdGlvbjogbnVtYmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgcmF3UmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxQaXBlbGluZVJlc3BvbnNlPihcbiAgICAgICAgICAgIG9wdGlvbnMudXBzZXJ0ID8gYCR7Y29uZmlnLmFwaS5waXBlbGluZVVybH0/dXBzZXJ0PXRydWVgIDogY29uZmlnLmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXF1ZXN0RHVyYXRpb24gPSBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0O1xuICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChvcHRpb25zLnVwc2VydCA/ICdQaXBlbGluZSBjcmVhdGVkIG9yIHVwZGF0ZWQnIDogJ1BpcGVsaW5lIGNyZWF0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgIC8vIEEgNDA5IG1lYW5zIHRoZSAocHJvamVjdCwgb3JnYW5pemF0aW9uKSBzbG90IGlzIHRha2VuLiBUaGUgc2VydmVyJ3NcbiAgICAgICAgICAvLyBtZXNzYWdlIG5hbWVzIGA/dXBzZXJ0PXRydWVgOyB0cmFuc2xhdGUgaXQgdG8gdGhlIGZsYWcgYSBDTEkgdXNlciBoYXMuXG4gICAgICAgICAgaWYgKGNvbmZsaWN0U3RhdHVzKGVycm9yKSAmJiAhb3B0aW9ucy51cHNlcnQpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnVGhhdCBwcm9qZWN0L29yZ2FuaXphdGlvbiBhbHJlYWR5IGhhcyBhIHBpcGVsaW5lLiBSZS1ydW4gd2l0aCAtLXVwc2VydCB0byBvdmVyd3JpdGUgaXQsIG9yIGVkaXQgdGhlIGV4aXN0aW5nIG9uZS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocmF3UmVzcG9uc2UsICdwaXBlbGluZScsICdpZCcpO1xuXG4gICAgICAgIGlmICghcGlwZWxpbmU/LmlkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBwaXBlbGluZSByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCAtIG5vIHZhbGlkIHBpcGVsaW5lIGRhdGEgcmVjZWl2ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9ydENyZWF0ZWRQaXBlbGluZShwaXBlbGluZSwgZXhlY3V0aW9uSWQsIHJlcXVlc3REdXJhdGlvbiwgc3RhcnRUaW1lKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICBhd2FpdCBkZXBsb3lDcmVhdGVkUGlwZWxpbmUob3B0aW9ucywgcGlwZWxpbmUuaWQsIGV4ZWN1dGlvbklkLCBwcm9ncmFtLm9wdHMoKS5kZWJ1Zyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdOZXh0IFN0ZXBzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRpbSgnWW91IGNhbiBub3c6JykpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZGVwbG95KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gRGVwbG95OiAke2JvbGQoYGRlcGxveSAtLWlkICR7cGlwZWxpbmUuaWR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gVmlldzogJHtib2xkKGBnZXQtcGlwZWxpbmUgLS1pZCAke3BpcGVsaW5lLmlkfWApfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBBUEk6ICR7Y29uZmlnLmFwaS5iYXNlVXJsfSR7Y29uZmlnLmFwaS5waXBlbGluZVVybH0vJHtwaXBlbGluZS5pZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnY3JlYXRlLXBpcGVsaW5lJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgcHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufSJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgK7C"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -10,6 +10,9 @@ import { runDeploy } from '../utils/deploy-runner.js';
|
|
|
10
10
|
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
11
11
|
import { printInfo, printKeyValue, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
12
12
|
import { fetchPipelineProps, printResolvedOrExit } from '../utils/pipeline-config.js';
|
|
13
|
+
import { printLookupWarningSummary } from '../utils/plugin-resolver.js';
|
|
14
|
+
import { resolveRegistrationClient } from '../utils/registration-client.js';
|
|
15
|
+
import { setPipelineId } from '../utils/request-context.js';
|
|
13
16
|
import { relaxTlsForCli } from '../utils/tls.js';
|
|
14
17
|
/**
|
|
15
18
|
* Registers the `deploy` command with the CLI program.
|
|
@@ -45,6 +48,8 @@ export function deploy(program) {
|
|
|
45
48
|
throw new Error('--id and --local-spec are mutually exclusive');
|
|
46
49
|
}
|
|
47
50
|
auditLog('deploy', { executionId, pipelineId: options.id, profile: options.profile });
|
|
51
|
+
// Attributes this deploy's platform calls to the pipeline (usage ledger).
|
|
52
|
+
setPipelineId(options.id);
|
|
48
53
|
printInfo('Deployment parameters', {
|
|
49
54
|
id: options.id,
|
|
50
55
|
awsProfile: options.profile,
|
|
@@ -62,6 +67,7 @@ export function deploy(program) {
|
|
|
62
67
|
// the CLI's preAction hook, so by here they're guaranteed present.
|
|
63
68
|
let pipeline;
|
|
64
69
|
let propsWithIds;
|
|
70
|
+
let pluginWarnings = [];
|
|
65
71
|
// Remote-mode registry-post handles — null in --local-spec mode.
|
|
66
72
|
let platformClient;
|
|
67
73
|
let platformConfig;
|
|
@@ -110,6 +116,7 @@ export function deploy(program) {
|
|
|
110
116
|
const fetched = await fetchPipelineProps(platformClient, options.id);
|
|
111
117
|
pipeline = fetched.pipeline;
|
|
112
118
|
propsWithIds = fetched.propsWithIds;
|
|
119
|
+
pluginWarnings = fetched.pluginWarnings;
|
|
113
120
|
printSuccess('Pipeline configuration retrieved');
|
|
114
121
|
printKeyValue({
|
|
115
122
|
'ID': pipeline.id,
|
|
@@ -135,10 +142,21 @@ export function deploy(program) {
|
|
|
135
142
|
output: options.output,
|
|
136
143
|
debug: program.opts().debug,
|
|
137
144
|
executionId,
|
|
138
|
-
|
|
145
|
+
// The registry callback's credential: the operator's own, or — under
|
|
146
|
+
// --store-tokens — the `pipeline-register` key, never the platform one.
|
|
147
|
+
platformClient: platformClient && await resolveRegistrationClient({
|
|
148
|
+
client: platformClient,
|
|
149
|
+
storeTokens: options.storeTokens,
|
|
150
|
+
orgId: pipeline.orgId,
|
|
151
|
+
region: options.region,
|
|
152
|
+
profile: options.profile,
|
|
153
|
+
}),
|
|
139
154
|
platformPipelineUrl: platformConfig?.api.pipelineUrl,
|
|
140
155
|
platformBaseUrl: platformConfig?.api.baseUrl,
|
|
141
156
|
});
|
|
157
|
+
// Graded plugin warnings are reported, never enforced — summarize them
|
|
158
|
+
// after the CDK output so they aren't lost above it.
|
|
159
|
+
printLookupWarningSummary(pluginWarnings);
|
|
142
160
|
}
|
|
143
161
|
catch (error) {
|
|
144
162
|
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
@@ -154,4 +172,4 @@ export function deploy(program) {
|
|
|
154
172
|
}
|
|
155
173
|
});
|
|
156
174
|
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUE0QyxNQUFNLG1CQUFtQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWdCO0lBQ3JDLGNBQWMsQ0FDWixnQkFBZ0IsQ0FDZCxpQkFBaUIsQ0FBQyxPQUFPO1NBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLDJHQUEyRyxDQUFDO1NBQ3hILE1BQU0sQ0FBQyxlQUFlLEVBQUUsZ0RBQWdELENBQUM7U0FDekUsTUFBTSxD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SUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgdHlwZSBQaXBlbGluZSwgdHlwZSBQbGF0Zm9ybURlcGxveUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcnVuRGVwbG95IH0gZnJvbSAnLi4vdXRpbHMvZGVwbG95LXJ1bm5lci5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZmV0Y2hQaXBlbGluZVByb3BzLCBwcmludFJlc29sdmVkT3JFeGl0IH0gZnJvbSAnLi4vdXRpbHMvcGlwZWxpbmUtY29uZmlnLmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdkZXBsb3knKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgKGZldGNoZXMgY29uZmlnIGZyb20gdGhlIHBsYXRmb3JtKScpXG4gICAgICAgIC5vcHRpb24oJy0tbG9jYWwtc3BlYyA8cGF0aD4nLCAnUGF0aCB0byBhIGxvY2FsIHBpcGVsaW5lLmpzb24g4oCUIGRlcGxveXMgd2l0aG91dCBjb250YWN0aW5nIHRoZSBwbGF0Zm9ybSAobm8gYXV0aCwgbm8gY29tcGxpYW5jZSwgbm8gcGx1Z2luIGxvb2t1cCknKSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcuIERlZmF1bHRzIHRvIGBicm9hZGVuaW5nYDogYSBkZXBsb3kgdGhhdCB3aWRlbnMgSUFNIHN0b3BzIGZvciBjb25maXJtYXRpb24uIFBhc3MgYG5ldmVyYCBmb3IgdW5hdHRlbmRlZCBydW5zLicsICdicm9hZGVuaW5nJylcbiAgICAgICAgLm9wdGlvbignLS1vdXRwdXQgPGRpcj4nLCAnQ0RLIG91dHB1dCBkaXJlY3RvcnknLCAnY2RrLm91dCcpXG4gICAgICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0F1dGhlbnRpY2F0ZSB1c2luZyB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpJywgZmFsc2UpLFxuICAgICksXG4gIClcbiAgICAub3B0aW9uKCctLXNob3ctcmVzb2x2ZWQnLCAnUHJpbnQgdGhlIHJlc29sdmVkIHBpcGVsaW5lIGNvbmZpZyAod2l0aCB7eyAuLi4gfX0gdGVtcGxhdGVzIGV4cGFuZGVkKSBhbmQgZXhpdCB3aXRob3V0IGRlcGxveWluZycsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQaXBlbGluZSBEZXBsb3knKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gTXV0dWFsbHkgZXhjbHVzaXZlIGlucHV0IHNvdXJjZXMg4oCUIHZhbGlkYXRlZCBJTlNJREUgdGhlIHRyeSBzbyBmYWlsdXJlcyByb3V0ZVxuICAgICAgICAvLyB0aHJvdWdoIGhhbmRsZUVycm9yIChjb25zaXN0ZW50IGV4aXQgY29kZS9mb3JtYXQpIGxpa2UgZXZlcnkgb3RoZXIgY29tbWFuZC5cbiAgICAgICAgaWYgKCFvcHRpb25zLmlkICYmICFvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIC0taWQgPHBpcGVsaW5lLWlkPiBvciAtLWxvY2FsLXNwZWMgPHBhdGg+IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaWQgJiYgb3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy0taWQgYW5kIC0tbG9jYWwtc3BlYyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdWRpdExvZygnZGVwbG95JywgeyBleGVjdXRpb25JZCwgcGlwZWxpbmVJZDogb3B0aW9ucy5pZCwgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIH0pO1xuXG4gICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgIGF3c1Byb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBwcm9jZXNzLmVudiBzbyBDREsgY29uc3RydWN0cyAoTGFtYmRhLCBDb2RlQnVpbGQpIGluaGVyaXQgaXQsXG4gICAgICAgIC8vIGJ1dCByZWZ1c2UgaW4gcHJvZHVjdGlvbiAoc2VlIHJlbGF4VGxzRm9yQ2xpKSDigJQgdGhlIGZsYWcgZGlzYWJsZXMgY2VydFxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBBTEwgb3V0Ym91bmQgVExTLCBpbmNsdWRpbmcgdGhlIEFXUyBTREsuXG4gICAgICAgIHJlbGF4VGxzRm9yQ2xpKG9wdGlvbnMudmVyaWZ5U3NsLCBwcmludFdhcm5pbmcpO1xuXG4gICAgICAgIC8vIExvY2FsLXRvb2wgcHJlcmVxdWlzaXRlcyAoY2RrICsgZXNidWlsZC9wbnBtKSBhcmUgdmVyaWZpZWQgdXAgZnJvbnQgYnlcbiAgICAgICAgLy8gdGhlIENMSSdzIHByZUFjdGlvbiBob29rLCBzbyBieSBoZXJlIHRoZXkncmUgZ3VhcmFudGVlZCBwcmVzZW50LlxuXG4gICAgICAgIGxldCBwaXBlbGluZTogUGlwZWxpbmU7XG4gICAgICAgIGxldCBwcm9wc1dpdGhJZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAvLyBSZW1vdGUtbW9kZSByZWdpc3RyeS1wb3N0IGhhbmRsZXMg4oCUIG51bGwgaW4gLS1sb2NhbC1zcGVjIG1vZGUuXG4gICAgICAgIGxldCBwbGF0Zm9ybUNsaWVudDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmM+PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBsYXRmb3JtQ29uZmlnOiBQbGF0Zm9ybURlcGxveUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICAvLyAtLWxvY2FsLXNwZWM6IHJlYWQgcGlwZWxpbmUuanNvbiBmcm9tIGRpc2s7IG5vIHBsYXRmb3JtIGNvbnRhY3QuXG4gICAgICAgICAgLy8gQ29tcGxpYW5jZSAvIHF1b3RhIC8gcGx1Z2luLWxvb2t1cCBmZWF0dXJlcyBhbGwgcmVxdWlyZSB0aGUgcGxhdGZvcm0g4oCUXG4gICAgICAgICAgLy8gdGhpcyBtb2RlIGlzIGZvciBhaXItZ2FwcGVkIG9yIHNpbXBsZSBzdGFuZGFsb25lIENESyBkZXBsb3ltZW50cy5cbiAgICAgICAgICBjb25zdCBhYnNQYXRoID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMubG9jYWxTcGVjKTtcbiAgICAgICAgICBwcmludEluZm8oJ0xvYWRpbmcgbG9jYWwgcGlwZWxpbmUgc3BlYycsIHsgcGF0aDogYWJzUGF0aCB9KTtcbiAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgc3BlYyBmaWxlIG5vdCBmb3VuZDogJHthYnNQYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoYWJzUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIFBhcnRpYWw8UGlwZWxpbmU+ICYgeyBwcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gICAgICAgICAgaWYgKCFwYXJzZWQucHJvcHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgc3BlYyBmaWxlIGlzIG1pc3NpbmcgcmVxdWlyZWQgJ3Byb3BzJyBmaWVsZDogJHthYnNQYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwaXBlbGluZSA9IHtcbiAgICAgICAgICAgIGlkOiBwYXJzZWQuaWQgPz8gJ2xvY2FsJyxcbiAgICAgICAgICAgIHByb2plY3Q6IHBhcnNlZC5wcm9qZWN0ID8/ICdsb2NhbC1wcm9qZWN0JyxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogcGFyc2VkLm9yZ2FuaXphdGlvbiA/PyAnbG9jYWwtb3JnJyxcbiAgICAgICAgICAgIG9yZ0lkOiBwYXJzZWQub3JnSWQsXG4gICAgICAgICAgICBpc0RlZmF1bHQ6IHBhcnNlZC5pc0RlZmF1bHQgPz8gZmFsc2UsXG4gICAgICAgICAgICBpc0FjdGl2ZTogcGFyc2VkLmlzQWN0aXZlID8/IHRydWUsXG4gICAgICAgICAgICBwcm9wczogcGFyc2VkLnByb3BzLFxuICAgICAgICAgIH0gYXMgUGlwZWxpbmU7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdMb2NhbCBzcGVjIGxvYWRlZCcpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgU291cmNlOiBhYnNQYXRoLFxuICAgICAgICAgICAgUHJvamVjdDogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgIE9yZ2FuaXphdGlvbjogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb3BzV2l0aElkcyA9IHtcbiAgICAgICAgICAgIC4uLnBpcGVsaW5lLnByb3BzLFxuICAgICAgICAgICAgLi4uKHBpcGVsaW5lLm9yZ0lkICYmIHsgb3JnSWQ6IHBpcGVsaW5lLm9yZ0lkIH0pLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZW1vdGUgcGF0aDogZmV0Y2ggY29uZmlnIGZyb20gcGxhdGZvcm0gQVBJLiBmZXRjaFBpcGVsaW5lUHJvcHMgZG9lc1xuICAgICAgICAgIC8vIHRoZSBmZXRjaCArIHBsdWdpbiBwcmUtcmVzb2x1dGlvbiArIHJlZ2lzdHJ5IHB1bGwtaG9zdCBiYWtlIOKAlCBzaGFyZWRcbiAgICAgICAgICAvLyB2ZXJiYXRpbSB3aXRoIGBzeW50aGAgc28gdGhlIHR3byBuZXZlciBkcmlmdC5cbiAgICAgICAgICBwbGF0Zm9ybUNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICBwbGF0Zm9ybUNvbmZpZyA9IHBsYXRmb3JtQ2xpZW50LmdldENvbmZpZygpIGFzIFBsYXRmb3JtRGVwbG95Q29uZmlnO1xuXG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwaXBlbGluZSBjb25maWd1cmF0aW9uJywgeyBpZDogb3B0aW9ucy5pZCB9KTtcbiAgICAgICAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hQaXBlbGluZVByb3BzKHBsYXRmb3JtQ2xpZW50LCBvcHRpb25zLmlkKTtcbiAgICAgICAgICBwaXBlbGluZSA9IGZldGNoZWQucGlwZWxpbmU7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0gZmV0Y2hlZC5wcm9wc1dpdGhJZHM7XG5cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGNvbmZpZ3VyYXRpb24gcmV0cmlldmVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnSUQnOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAnSXMgRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCxcbiAgICAgICAgICAgICdJcyBBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tc2hvdy1yZXNvbHZlZDogcHJpbnQgcmVzb2x2ZWQgY29uZmlnIGFuZCBleGl0IChubyBDREsgZGVwbG95KVxuICAgICAgICBpZiAoKG9wdGlvbnMgYXMgeyBzaG93UmVzb2x2ZWQ/OiBib29sZWFuIH0pLnNob3dSZXNvbHZlZCkge1xuICAgICAgICAgIGF3YWl0IHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGVwcyA14oCTOSAoZW5jb2RlIHByb3BzIOKGkiBjZGsgZGVwbG95IOKGkiByZWdpc3RlciBBUk4pIGFyZSBzaGFyZWQgd2l0aFxuICAgICAgICAvLyBgcGlwZWxpbmUgY3JlYXRlIC0tZGVwbG95YCB2aWEgcnVuRGVwbG95IHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgIGF3YWl0IHJ1bkRlcGxveSh7XG4gICAgICAgICAgcGlwZWxpbmUsXG4gICAgICAgICAgcHJvcHNXaXRoSWRzLFxuICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgcGxhdGZvcm1DbGllbnQsXG4gICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogcGxhdGZvcm1Db25maWc/LmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICBwbGF0Zm9ybUJhc2VVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkuYmFzZVVybCxcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdkZXBsb3knLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUE0QyxNQUFNLG1CQUFtQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxPQUFnQjtJQUNyQyxjQUFjLENBQ1os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Z0JBQ1gscUVBQXFFO2dCQUNyRSx3RUFBd0U7Z0JBQ3hFLGNBQWMsRUFBRSxjQUFjLElBQUksTUFBTSx5QkFBeUIsQ0FBQztvQkFDaEUsTUFBTSxFQUFFLGNBQWM7b0JBQ3RCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztvQkFDaEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztpQkFDekIsQ0FBQztnQkFDRixtQkFBbUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLFdBQVc7Z0JBQ3BELGVBQWUsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU87YUFDN0MsQ0FBQyxDQUFDO1lBQ0gsdUVBQXVFO1lBQ3ZFLHFEQUFxRDtZQUNyRCx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU1QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHsgTG9va3VwV2FybmluZyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lLCB0eXBlIFBsYXRmb3JtRGVwbG95Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgYXVkaXRMb2cgfSBmcm9tICcuLi91dGlscy9hdWRpdC1sb2cuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgd2l0aFByb2ZpbGVPcHRpb24sIHdpdGhSZWdpb25PcHRpb24sIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBydW5EZXBsb3kgfSBmcm9tICcuLi91dGlscy9kZXBsb3ktcnVubmVyLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmZXRjaFBpcGVsaW5lUHJvcHMsIHByaW50UmVzb2x2ZWRPckV4aXQgfSBmcm9tICcuLi91dGlscy9waXBlbGluZS1jb25maWcuanMnO1xuaW1wb3J0IHsgcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeSB9IGZyb20gJy4uL3V0aWxzL3BsdWdpbi1yZXNvbHZlci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vdXRpbHMvcmVnaXN0cmF0aW9uLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzZXRQaXBlbGluZUlkIH0gZnJvbSAnLi4vdXRpbHMvcmVxdWVzdC1jb250ZXh0LmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdkZXBsb3knKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgKGZldGNoZXMgY29uZmlnIGZyb20gdGhlIHBsYXRmb3JtKScpXG4gICAgICAgIC5vcHRpb24oJy0tbG9jYWwtc3BlYyA8cGF0aD4nLCAnUGF0aCB0byBhIGxvY2FsIHBpcGVsaW5lLmpzb24g4oCUIGRlcGxveXMgd2l0aG91dCBjb250YWN0aW5nIHRoZSBwbGF0Zm9ybSAobm8gYXV0aCwgbm8gY29tcGxpYW5jZSwgbm8gcGx1Z2luIGxvb2t1cCknKSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcuIERlZmF1bHRzIHRvIGBicm9hZGVuaW5nYDogYSBkZXBsb3kgdGhhdCB3aWRlbnMgSUFNIHN0b3BzIGZvciBjb25maXJtYXRpb24uIFBhc3MgYG5ldmVyYCBmb3IgdW5hdHRlbmRlZCBydW5zLicsICdicm9hZGVuaW5nJylcbiAgICAgICAgLm9wdGlvbignLS1vdXRwdXQgPGRpcj4nLCAnQ0RLIG91dHB1dCBkaXJlY3RvcnknLCAnY2RrLm91dCcpXG4gICAgICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0F1dGhlbnRpY2F0ZSB1c2luZyB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpJywgZmFsc2UpLFxuICAgICksXG4gIClcbiAgICAub3B0aW9uKCctLXNob3ctcmVzb2x2ZWQnLCAnUHJpbnQgdGhlIHJlc29sdmVkIHBpcGVsaW5lIGNvbmZpZyAod2l0aCB7eyAuLi4gfX0gdGVtcGxhdGVzIGV4cGFuZGVkKSBhbmQgZXhpdCB3aXRob3V0IGRlcGxveWluZycsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQaXBlbGluZSBEZXBsb3knKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gTXV0dWFsbHkgZXhjbHVzaXZlIGlucHV0IHNvdXJjZXMg4oCUIHZhbGlkYXRlZCBJTlNJREUgdGhlIHRyeSBzbyBmYWlsdXJlcyByb3V0ZVxuICAgICAgICAvLyB0aHJvdWdoIGhhbmRsZUVycm9yIChjb25zaXN0ZW50IGV4aXQgY29kZS9mb3JtYXQpIGxpa2UgZXZlcnkgb3RoZXIgY29tbWFuZC5cbiAgICAgICAgaWYgKCFvcHRpb25zLmlkICYmICFvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIC0taWQgPHBpcGVsaW5lLWlkPiBvciAtLWxvY2FsLXNwZWMgPHBhdGg+IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaWQgJiYgb3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy0taWQgYW5kIC0tbG9jYWwtc3BlYyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdWRpdExvZygnZGVwbG95JywgeyBleGVjdXRpb25JZCwgcGlwZWxpbmVJZDogb3B0aW9ucy5pZCwgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIH0pO1xuICAgICAgICAvLyBBdHRyaWJ1dGVzIHRoaXMgZGVwbG95J3MgcGxhdGZvcm0gY2FsbHMgdG8gdGhlIHBpcGVsaW5lICh1c2FnZSBsZWRnZXIpLlxuICAgICAgICBzZXRQaXBlbGluZUlkKG9wdGlvbnMuaWQpO1xuXG4gICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgIGF3c1Byb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBwcm9jZXNzLmVudiBzbyBDREsgY29uc3RydWN0cyAoTGFtYmRhLCBDb2RlQnVpbGQpIGluaGVyaXQgaXQsXG4gICAgICAgIC8vIGJ1dCByZWZ1c2UgaW4gcHJvZHVjdGlvbiAoc2VlIHJlbGF4VGxzRm9yQ2xpKSDigJQgdGhlIGZsYWcgZGlzYWJsZXMgY2VydFxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBBTEwgb3V0Ym91bmQgVExTLCBpbmNsdWRpbmcgdGhlIEFXUyBTREsuXG4gICAgICAgIHJlbGF4VGxzRm9yQ2xpKG9wdGlvbnMudmVyaWZ5U3NsLCBwcmludFdhcm5pbmcpO1xuXG4gICAgICAgIC8vIExvY2FsLXRvb2wgcHJlcmVxdWlzaXRlcyAoY2RrICsgZXNidWlsZC9wbnBtKSBhcmUgdmVyaWZpZWQgdXAgZnJvbnQgYnlcbiAgICAgICAgLy8gdGhlIENMSSdzIHByZUFjdGlvbiBob29rLCBzbyBieSBoZXJlIHRoZXkncmUgZ3VhcmFudGVlZCBwcmVzZW50LlxuXG4gICAgICAgIGxldCBwaXBlbGluZTogUGlwZWxpbmU7XG4gICAgICAgIGxldCBwcm9wc1dpdGhJZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBsZXQgcGx1Z2luV2FybmluZ3M6IHJlYWRvbmx5IExvb2t1cFdhcm5pbmdbXSA9IFtdO1xuICAgICAgICAvLyBSZW1vdGUtbW9kZSByZWdpc3RyeS1wb3N0IGhhbmRsZXMg4oCUIG51bGwgaW4gLS1sb2NhbC1zcGVjIG1vZGUuXG4gICAgICAgIGxldCBwbGF0Zm9ybUNsaWVudDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmM+PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBsYXRmb3JtQ29uZmlnOiBQbGF0Zm9ybURlcGxveUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICAvLyAtLWxvY2FsLXNwZWM6IHJlYWQgcGlwZWxpbmUuanNvbiBmcm9tIGRpc2s7IG5vIHBsYXRmb3JtIGNvbnRhY3QuXG4gICAgICAgICAgLy8gQ29tcGxpYW5jZSAvIHF1b3RhIC8gcGx1Z2luLWxvb2t1cCBmZWF0dXJlcyBhbGwgcmVxdWlyZSB0aGUgcGxhdGZvcm0g4oCUXG4gICAgICAgICAgLy8gdGhpcyBtb2RlIGlzIGZvciBhaXItZ2FwcGVkIG9yIHNpbXBsZSBzdGFuZGFsb25lIENESyBkZXBsb3ltZW50cy5cbiAgICAgICAgICBjb25zdCBhYnNQYXRoID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMubG9jYWxTcGVjKTtcbiAgICAgICAgICBwcmludEluZm8oJ0xvYWRpbmcgbG9jYWwgcGlwZWxpbmUgc3BlYycsIHsgcGF0aDogYWJzUGF0aCB9KTtcbiAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgc3BlYyBmaWxlIG5vdCBmb3VuZDogJHthYnNQYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoYWJzUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIFBhcnRpYWw8UGlwZWxpbmU+ICYgeyBwcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gICAgICAgICAgaWYgKCFwYXJzZWQucHJvcHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgc3BlYyBmaWxlIGlzIG1pc3NpbmcgcmVxdWlyZWQgJ3Byb3BzJyBmaWVsZDogJHthYnNQYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwaXBlbGluZSA9IHtcbiAgICAgICAgICAgIGlkOiBwYXJzZWQuaWQgPz8gJ2xvY2FsJyxcbiAgICAgICAgICAgIHByb2plY3Q6IHBhcnNlZC5wcm9qZWN0ID8/ICdsb2NhbC1wcm9qZWN0JyxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogcGFyc2VkLm9yZ2FuaXphdGlvbiA/PyAnbG9jYWwtb3JnJyxcbiAgICAgICAgICAgIG9yZ0lkOiBwYXJzZWQub3JnSWQsXG4gICAgICAgICAgICBpc0RlZmF1bHQ6IHBhcnNlZC5pc0RlZmF1bHQgPz8gZmFsc2UsXG4gICAgICAgICAgICBpc0FjdGl2ZTogcGFyc2VkLmlzQWN0aXZlID8/IHRydWUsXG4gICAgICAgICAgICBwcm9wczogcGFyc2VkLnByb3BzLFxuICAgICAgICAgIH0gYXMgUGlwZWxpbmU7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdMb2NhbCBzcGVjIGxvYWRlZCcpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgU291cmNlOiBhYnNQYXRoLFxuICAgICAgICAgICAgUHJvamVjdDogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgIE9yZ2FuaXphdGlvbjogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb3BzV2l0aElkcyA9IHtcbiAgICAgICAgICAgIC4uLnBpcGVsaW5lLnByb3BzLFxuICAgICAgICAgICAgLi4uKHBpcGVsaW5lLm9yZ0lkICYmIHsgb3JnSWQ6IHBpcGVsaW5lLm9yZ0lkIH0pLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZW1vdGUgcGF0aDogZmV0Y2ggY29uZmlnIGZyb20gcGxhdGZvcm0gQVBJLiBmZXRjaFBpcGVsaW5lUHJvcHMgZG9lc1xuICAgICAgICAgIC8vIHRoZSBmZXRjaCArIHBsdWdpbiBwcmUtcmVzb2x1dGlvbiArIHJlZ2lzdHJ5IHB1bGwtaG9zdCBiYWtlIOKAlCBzaGFyZWRcbiAgICAgICAgICAvLyB2ZXJiYXRpbSB3aXRoIGBzeW50aGAgc28gdGhlIHR3byBuZXZlciBkcmlmdC5cbiAgICAgICAgICBwbGF0Zm9ybUNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICBwbGF0Zm9ybUNvbmZpZyA9IHBsYXRmb3JtQ2xpZW50LmdldENvbmZpZygpIGFzIFBsYXRmb3JtRGVwbG95Q29uZmlnO1xuXG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwaXBlbGluZSBjb25maWd1cmF0aW9uJywgeyBpZDogb3B0aW9ucy5pZCB9KTtcbiAgICAgICAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hQaXBlbGluZVByb3BzKHBsYXRmb3JtQ2xpZW50LCBvcHRpb25zLmlkKTtcbiAgICAgICAgICBwaXBlbGluZSA9IGZldGNoZWQucGlwZWxpbmU7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0gZmV0Y2hlZC5wcm9wc1dpdGhJZHM7XG4gICAgICAgICAgcGx1Z2luV2FybmluZ3MgPSBmZXRjaGVkLnBsdWdpbldhcm5pbmdzO1xuXG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSBjb25maWd1cmF0aW9uIHJldHJpZXZlZCcpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0lEJzogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgICAnUHJvamVjdCc6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgJ0lzIERlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQsXG4gICAgICAgICAgICAnSXMgQWN0aXZlJzogcGlwZWxpbmUuaXNBY3RpdmUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLXNob3ctcmVzb2x2ZWQ6IHByaW50IHJlc29sdmVkIGNvbmZpZyBhbmQgZXhpdCAobm8gQ0RLIGRlcGxveSlcbiAgICAgICAgaWYgKChvcHRpb25zIGFzIHsgc2hvd1Jlc29sdmVkPzogYm9vbGVhbiB9KS5zaG93UmVzb2x2ZWQpIHtcbiAgICAgICAgICBhd2FpdCBwcmludFJlc29sdmVkT3JFeGl0KHByb3BzV2l0aElkcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcHMgNeKAkzkgKGVuY29kZSBwcm9wcyDihpIgY2RrIGRlcGxveSDihpIgcmVnaXN0ZXIgQVJOKSBhcmUgc2hhcmVkIHdpdGhcbiAgICAgICAgLy8gYHBpcGVsaW5lIGNyZWF0ZSAtLWRlcGxveWAgdmlhIHJ1bkRlcGxveSBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0LlxuICAgICAgICBhd2FpdCBydW5EZXBsb3koe1xuICAgICAgICAgIHBpcGVsaW5lLFxuICAgICAgICAgIHByb3BzV2l0aElkcyxcbiAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICAgIG91dHB1dDogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgIC8vIFRoZSByZWdpc3RyeSBjYWxsYmFjaydzIGNyZWRlbnRpYWw6IHRoZSBvcGVyYXRvcidzIG93biwgb3Ig4oCUIHVuZGVyXG4gICAgICAgICAgLy8gLS1zdG9yZS10b2tlbnMg4oCUIHRoZSBgcGlwZWxpbmUtcmVnaXN0ZXJgIGtleSwgbmV2ZXIgdGhlIHBsYXRmb3JtIG9uZS5cbiAgICAgICAgICBwbGF0Zm9ybUNsaWVudDogcGxhdGZvcm1DbGllbnQgJiYgYXdhaXQgcmVzb2x2ZVJlZ2lzdHJhdGlvbkNsaWVudCh7XG4gICAgICAgICAgICBjbGllbnQ6IHBsYXRmb3JtQ2xpZW50LFxuICAgICAgICAgICAgc3RvcmVUb2tlbnM6IG9wdGlvbnMuc3RvcmVUb2tlbnMsXG4gICAgICAgICAgICBvcmdJZDogcGlwZWxpbmUub3JnSWQsXG4gICAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHBsYXRmb3JtUGlwZWxpbmVVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkucGlwZWxpbmVVcmwsXG4gICAgICAgICAgcGxhdGZvcm1CYXNlVXJsOiBwbGF0Zm9ybUNvbmZpZz8uYXBpLmJhc2VVcmwsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHcmFkZWQgcGx1Z2luIHdhcm5pbmdzIGFyZSByZXBvcnRlZCwgbmV2ZXIgZW5mb3JjZWQg4oCUIHN1bW1hcml6ZSB0aGVtXG4gICAgICAgIC8vIGFmdGVyIHRoZSBDREsgb3V0cHV0IHNvIHRoZXkgYXJlbid0IGxvc3QgYWJvdmUgaXQuXG4gICAgICAgIHByaW50TG9va3VwV2FybmluZ1N1bW1hcnkocGx1Z2luV2FybmluZ3MpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnZGVwbG95JyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogb3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|