aws-cdk 2.1124.1 → 2.1126.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_LICENSES +419 -7
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/cli/cli-config.js +2 -1
- package/lib/cli/cli-type-registry.json +5 -0
- package/lib/cli/cli.js +3 -2
- package/lib/cli/convert-to-user-input.js +3 -1
- package/lib/cli/parse-command-line-arguments.js +6 -1
- package/lib/cli/telemetry/session.d.ts +6 -0
- package/lib/cli/telemetry/session.js +26 -1
- package/lib/cli/user-input.d.ts +6 -0
- package/lib/cli/user-input.js +1 -1
- package/lib/cli/util/guess-agent.js +5 -1
- package/lib/index.js +33608 -31190
- package/lib/index_bg.wasm +0 -0
- package/lib/init-templates/.init-version.json +1 -1
- package/package.json +14 -14
package/lib/cli/cli.js
CHANGED
|
@@ -107,7 +107,7 @@ async function exec(args, synthesizer) {
|
|
|
107
107
|
caBundlePath: configuration.settings.get(['caBundlePath']),
|
|
108
108
|
});
|
|
109
109
|
try {
|
|
110
|
-
await ioHost.startTelemetry(argv, configuration.context);
|
|
110
|
+
await ioHost.startTelemetry(argv, configuration.context, proxyAgent);
|
|
111
111
|
}
|
|
112
112
|
catch (e) {
|
|
113
113
|
await ioHost.asIoHelper().defaults.trace(`Telemetry instantiation failed: ${e.message}`);
|
|
@@ -343,6 +343,7 @@ async function exec(args, synthesizer) {
|
|
|
343
343
|
tags: configuration.settings.get(['tags']),
|
|
344
344
|
terminationProtection: args.terminationProtection,
|
|
345
345
|
usePreviousParameters: args['previous-parameters'],
|
|
346
|
+
importExistingResources: args.importExistingResources,
|
|
346
347
|
parameters: {
|
|
347
348
|
bucketName: configuration.settings.get(['toolkitBucket', 'bucketName']),
|
|
348
349
|
kmsKeyId: configuration.settings.get(['toolkitBucket', 'kmsKeyId']),
|
|
@@ -820,4 +821,4 @@ function cli(args = process.argv.slice(2)) {
|
|
|
820
821
|
});
|
|
821
822
|
}
|
|
822
823
|
/* c8 ignore stop */
|
|
823
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNENBLG9CQXNtQkM7QUF5TkQsa0JBd0JDO0FBbjRCRCxpREFBaUQsQ0FBQyxRQUFRO0FBQzFELHlDQUF5QztBQUV6QyxzREFBMkc7QUFDM0csK0JBQStCO0FBQy9CLGtDQUF3QztBQUN4QywrQ0FBMkQ7QUFDM0QsNkNBQW9EO0FBQ3BELHVEQUEwRDtBQUUxRCx1Q0FBc0M7QUFDdEMsaUZBQTJFO0FBQzNFLDJEQUErRDtBQUMvRCw2REFBd0Q7QUFDeEQsK0NBQW1EO0FBQ25ELG1FQUE2RDtBQUM3RCw2Q0FBb0Q7QUFHcEQsNkRBQXFEO0FBQ3JELG9EQUFnRDtBQUNoRCx1Q0FBcUY7QUFDckYsdURBQW1EO0FBRW5ELGdDQUFxRjtBQUNyRiw4Q0FBaUc7QUFFakcsZ0RBQWdEO0FBQ2hELG9EQUFpRDtBQUNqRCw0Q0FBNkM7QUFFN0MsaURBQWdFO0FBQ2hFLDJDQUF3QztBQUN4QywrQ0FBNEM7QUFDNUMsbURBQTZEO0FBQzdELDJDQUFvRTtBQUNwRSxtREFBNEQ7QUFDNUQsaURBQXlEO0FBQ3pELG9DQUF3RDtBQUV4RCx3RUFBa0U7QUFDbEUsa0NBQWlDO0FBQ2pDLG9EQUFnRDtBQUV6QyxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQWMsRUFBRSxXQUF5QjtJQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsd0RBQXlCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFBLCtCQUFvQixFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBRXJFLCtCQUErQjtJQUMvQixpREFBaUQ7SUFDakQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQ2hDLENBQUM7U0FBTSxJQUFJ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R0FBRyxDQUFDO1NBQzNCLENBQUM7UUFDRixPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7U0FDRCxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxtQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRCxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovIC8vIHlhcmdzXG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VTZXREZXBsb3ltZW50LCBEZXBsb3ltZW50TWV0aG9kLCBEaXJlY3REZXBsb3ltZW50LCBTdGFja1NlbGVjdG9yIGFzIExpYlN0YWNrU2VsZWN0b3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBFeHBhbmRTdGFja1NlbGVjdGlvbiwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdEVycm9yLCBUb29sa2l0IH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgZ3Vlc3NMYW5ndWFnZSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgQ2RrVG9vbGtpdCwgQXNzZXRCdWlsZFRpbWUgfSBmcm9tICcuL2Nkay10b29sa2l0JztcbmltcG9ydCB7IGNpU3lzdGVtSXNTdGRFcnJTYWZlIH0gZnJvbSAnLi9jaS1zeXN0ZW1zJztcbmltcG9ydCB7IGRpc3BsYXlWZXJzaW9uTWVzc2FnZSB9IGZyb20gJy4vZGlzcGxheS12ZXJzaW9uJztcbmltcG9ydCB0eXBlIHsgSW9NZXNzYWdlTGV2ZWwgfSBmcm9tICcuL2lvLWhvc3QnO1xuaW1wb3J0IHsgQ2xpSW9Ib3N0IH0gZnJvbSAnLi9pby1ob3N0JztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZExpbmVBcmd1bWVudHMgfSBmcm9tICcuL3BhcnNlLWNvbW1hbmQtbGluZS1hcmd1bWVudHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JQbGF0Zm9ybVdhcm5pbmdzIH0gZnJvbSAnLi9wbGF0Zm9ybS13YXJuaW5ncyc7XG5pbXBvcnQgeyBwcmV0dHlQcmludEVycm9yIH0gZnJvbSAnLi9wcmV0dHktcHJpbnQtZXJyb3InO1xuaW1wb3J0IHsgUHJveHlBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi9wcm94eS1hZ2VudCc7XG5pbXBvcnQgeyBHTE9CQUxfUExVR0lOX0hPU1QgfSBmcm9tICcuL3NpbmdsZXRvbi1wbHVnaW4taG9zdCc7XG5pbXBvcnQgeyBjZGtDbGlFcnJvck5hbWUgfSBmcm9tICcuL3RlbGVtZXRyeS9lcnJvcic7XG5pbXBvcnQgdHlwZSB7IEVycm9yRGV0YWlscyB9IGZyb20gJy4vdGVsZW1ldHJ5L3NjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuL3VzZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi91c2VyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgdHJhcEVycm9ycyB9IGZyb20gJy4vdXRpbC90cmFwLWVycm9ycyc7XG5pbXBvcnQgeyBpc0RldmVsb3BlckJ1aWxkVmVyc2lvbiwgdmVyc2lvbldpdGhCdWlsZCwgdmVyc2lvbk51bWJlciB9IGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQgeyBhc0lvSGVscGVyIH0gZnJvbSAnLi4vLi4vbGliL2FwaS1wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSVJlYWRMb2NrIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFRvb2xraXRJbmZvLCBOb3RpY2VzLCBsb2FkVHJlZSwgZmluZENvbnN0cnVjdExpYnJhcnlWZXJzaW9uIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFNka1Byb3ZpZGVyLCBJb0hvc3RTZGtMb2dnZXIsIHNldFNka1RyYWNpbmcsIHNka1JlcXVlc3RIYW5kbGVyIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoJztcbmltcG9ydCB0eXBlIHsgQm9vdHN0cmFwU291cmNlIH0gZnJvbSAnLi4vYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXIgfSBmcm9tICcuLi9hcGkvYm9vdHN0cmFwJztcbmltcG9ydCB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi4vYXBpL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IEhvdHN3YXBNb2RlIH0gZnJvbSAnLi4vYXBpL2hvdHN3YXAnO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gJy4uL2FwaS9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb250ZXh0SGFuZGxlciBhcyBjb250ZXh0IH0gZnJvbSAnLi4vY29tbWFuZHMvY29udGV4dCc7XG5pbXBvcnQgeyBkb2NzIH0gZnJvbSAnLi4vY29tbWFuZHMvZG9jcyc7XG5pbXBvcnQgeyBkb2N0b3IgfSBmcm9tICcuLi9jb21tYW5kcy9kb2N0b3InO1xuaW1wb3J0IHsgRmxhZ0NvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZHMvZmxhZ3MvZmxhZ3MnO1xuaW1wb3J0IHsgY2xpSW5pdCwgcHJpbnRBdmFpbGFibGVUZW1wbGF0ZXMgfSBmcm9tICcuLi9jb21tYW5kcy9pbml0JztcbmltcG9ydCB7IGdldExhbmd1YWdlRnJvbUFsaWFzIH0gZnJvbSAnLi4vY29tbWFuZHMvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgZ2V0TWlncmF0ZVNjYW5UeXBlIH0gZnJvbSAnLi4vY29tbWFuZHMvbWlncmF0ZSc7XG5pbXBvcnQgeyBleGVjUHJvZ3JhbSwgQ2xvdWRFeGVjdXRhYmxlIH0gZnJvbSAnLi4vY3hhcHAnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yLCBTeW50aGVzaXplciB9IGZyb20gJy4uL2N4YXBwJztcbmltcG9ydCB7IGZpbmRVbmtub3duT3B0aW9ucyB9IGZyb20gJy4vdXRpbC9jaGVjay11bmtub3duLW9wdGlvbnMnO1xuaW1wb3J0IHsgaXNDSSB9IGZyb20gJy4vdXRpbC9jaSc7XG5pbXBvcnQgeyBndWVzc0FnZW50IH0gZnJvbSAnLi91dGlsL2d1ZXNzLWFnZW50JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoYXJnczogc3RyaW5nW10sIHN5bnRoZXNpemVyPzogU3ludGhlc2l6ZXIpOiBQcm9taXNlPG51bWJlciB8IHZvaWQ+IHtcbiAgY29uc3QgYXJndiA9IGF3YWl0IHBhcnNlQ29tbWFuZExpbmVBcmd1bWVudHMoYXJncyk7XG4gIGFyZ3YubGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZUZyb21BbGlhcyhhcmd2Lmxhbmd1YWdlKSA/PyBhcmd2Lmxhbmd1YWdlO1xuXG4gIC8vIEhhbmRsZSBjb2xvciBvdXRwdXQgc2V0dGluZ3NcbiAgLy8gUHJpb3JpdHk6IC0tbm8tY29sb3IgPiAtLWNvbG9yID4gVFRZIGRldGVjdGlvblxuICBpZiAoYXJndi5ub0NvbG9yKSB7XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMCc7XG4gIH0gZWxzZSBpZiAoYXJndi5jb2xvcikge1xuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzMnO1xuICB9IGVsc2UgaWYgKCFwcm9jZXNzLnN0ZG91dC5pc1RUWSkge1xuICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IGRpc2FibGUgY29sb3JzIGZvciBub24tVFRZXG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMCc7XG4gIH1cblxuICBjb25zdCBjbWQgPSBhcmd2Ll9bMF07XG5cbiAgLy8gaWYgb25lIC12LCBsb2cgYXQgYSBERUJVRyBsZXZlbFxuICAvLyBpZiAyIC12LCBsb2cgYXQgYSBUUkFDRSBsZXZlbFxuICBsZXQgaW9NZXNzYWdlTGV2ZWw6IElvTWVzc2FnZUxldmVsID0gJ2luZm8nO1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgc3dpdGNoIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaW9NZXNzYWdlTGV2ZWwgPSAnZGVidWcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlvTWVzc2FnZUxldmVsID0gJ3RyYWNlJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW9Ib3N0ID0gQ2xpSW9Ib3N0Lmluc3RhbmNlKHtcbiAgICBsb2dMZXZlbDogaW9NZXNzYWdlTGV2ZWwsXG4gICAgaXNUVFk6IHByb2Nlc3Muc3Rkb3V0LmlzVFRZLFxuICAgIGlzQ0k6IEJvb2xlYW4oYXJndi5jaSksXG4gICAgY3VycmVudEFjdGlvbjogY21kLFxuICAgIHN0YWNrUHJvZ3Jlc3M6IGFyZ3YucHJvZ3Jlc3MsXG4gICAgYXV0b1Jlc3BvbmQ6IGFyZ3YueWVzLFxuICB9LCB0cnVlKTtcbiAgY29uc3QgaW9IZWxwZXIgPSBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KTtcblxuICAvLyBJZiB1c2VycyByZXF1ZXN0IGRlYnVnIGluZm9ybWF0aW9uICh3aGljaCBzd2l0Y2hlcyBvbiBDREtfREVCVUc9MSB0byBnZXQgdGhlXG4gIC8vIENESyBhcHAgdG8gZW1pdCBtb3JlIGluZm9ybWF0aW9uKSwgdGhleSBwcm9iYWJseSBhcmUgdHJvdWJsZXNob290aW5nIGFuZCB3ZSd2ZVxuICAvLyBoaXN0b3JpY2FsbHkgZGVjaWRlZCB0aGV5IHRoZW4gd2FudCBtb3JlIGxvZ2dpbmcgZnJvbSB0aGUgQ0xJIGFzIHdlbGwuXG4gIC8vIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gZ2V0IHRoZSBDREsgdG8gZW1pdCB0cmFjaW5nIGluZm9ybWF0aW9uIHRoYXRcbiAgLy8gZG9lcyBub3QgY2F1c2UgdGhlIENMSSB0byBiYXJmIGxvZ3MgdG8gdGhlIGNvbnNvbGUuXG4gIHNldFNka1RyYWNpbmcoYXJndi5kZWJ1ZyB8fCBhcmd2LnZlcmJvc2UgPiAyKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNoZWNrRm9yUGxhdGZvcm1XYXJuaW5ncyhpb0hlbHBlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoYEVycm9yIHdoaWxlIGNoZWNraW5nIGZvciBwbGF0Zm9ybSB3YXJuaW5nczogJHtlfWApO1xuICB9XG5cbiAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKCdDREsgVG9vbGtpdCBDTEkgdmVyc2lvbjonLCB2ZXJzaW9uV2l0aEJ1aWxkKCkpO1xuICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoJ0NvbW1hbmQgbGluZSBhcmd1bWVudHM6JywgYXJndik7XG5cbiAgY29uc3QgdW5rbm93bk9wdGlvbnMgPSBmaW5kVW5rbm93bk9wdGlvbnMoYXJndik7XG4gIGlmICh1bmtub3duT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gdW5rbm93bk9wdGlvbnMubWFwKChvKSA9PiBgLS0ke299YCkuam9pbignLCAnKTtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybihgVW5rbm93biBvcHRpb24ocyk6ICR7Zm9ybWF0dGVkfS4gVGhlc2Ugd2lsbCBiZSBpZ25vcmVkLiBSdW4gJ2NkayAtLWhlbHAnIHRvIHNlZSBhdmFpbGFibGUgb3B0aW9ucy5gKTtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBhd2FpdCBDb25maWd1cmF0aW9uLmZyb21BcmdzQW5kRmlsZXMoaW9IZWxwZXIsXG4gICAge1xuICAgICAgY29tbWFuZExpbmVBcmd1bWVudHM6IHtcbiAgICAgICAgLi4uYXJndixcbiAgICAgICAgXzogYXJndi5fIGFzIFtDb21tYW5kLCAuLi5zdHJpbmdbXV0sIC8vIFR5cGVTY3JpcHQgYXQgaXRzIGJlc3RcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgLy8gQWx3YXlzIGNyZWF0ZSBhbmQgdXNlIFByb3h5QWdlbnQgdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uIHZpYSBlbnYgdmFyc1xuICBjb25zdCBwcm94eUFnZW50ID0gYXdhaXQgbmV3IFByb3h5QWdlbnRQcm92aWRlcihpb0hlbHBlcikuY3JlYXRlKHtcbiAgICBwcm94eUFkZHJlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJveHknXSksXG4gICAgY2FCdW5kbGVQYXRoOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2NhQnVuZGxlUGF0aCddKSxcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpb0hvc3Quc3RhcnRUZWxlbWV0cnkoYXJndiwgY29uZmlndXJhdGlvbi5jb250ZXh0KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgYXdhaXQgaW9Ib3N0LmFzSW9IZWxwZXIoKS5kZWZhdWx0cy50cmFjZShgVGVsZW1ldHJ5IGluc3RhbnRpYXRpb24gZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaExhbmd1YWdlKGF3YWl0IGd1ZXNzTGFuZ3VhZ2UocHJvY2Vzcy5jd2QoKSkpO1xuICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hBZ2VudChndWVzc0FnZW50KCkpO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZGlzcGxheWluZyAoYW5kIHJlZnJlc2hpbmcpIG5vdGljZXMgb24gYWxsIGNvbW1hbmRzLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBkaWRuJ3Qgc3VwcGx5IGVpdGhlciBgLS1ub3RpY2VzYCBvciBgLS1uby1ub3RpY2VzYCwgd2UgZG9cbiAgICogYXV0b2RldGVjdGlvbi4gVGhlIGF1dG9kZXRlY3Rpb24gY3VycmVudGx5IGlzOiBkbyB3cml0ZSBub3RpY2VzIGlmIHdlIGFyZVxuICAgKiBub3Qgb24gQ0ksIG9yIGFyZSBvbiBhIENJIHN5c3RlbSB3aGVyZSB3ZSBrbm93IHRoYXQgd3JpdGluZyB0byBzdGRlcnIgaXNcbiAgICogc2FmZS4gV2UgZmFpbCBcImNsb3NlZFwiOyB0aGF0IGlzLCB3ZSBkZWNpZGUgdG8gTk9UIHByaW50IGZvciB1bmtub3duIENJXG4gICAqIHN5c3RlbXMsIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5IHdlIG1heWJlIGNvdWxkLlxuICAgKi9cbiAgY29uc3QgaXNTYWZlVG9Xcml0ZU5vdGljZXMgPSAhaXNDSSgpIHx8IEJvb2xlYW4oY2lTeXN0ZW1Jc1N0ZEVyclNhZmUoKSk7XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIG5vdGljZXMgc2hvdWxkIGJlIGRpc3BsYXllZCBiYXNlZCBvbiBDTEkgYXJncyBhbmQgY29uZmlndXJhdGlvblxuICBsZXQgc2hvdWxkRGlzcGxheU5vdGljZXM6IGJvb2xlYW47XG4gIGlmIChhcmd2Lm5vdGljZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIENMSSBhcmd1bWVudCB0YWtlcyBwcmVjZWRlbmNlXG4gICAgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBhcmd2Lm5vdGljZXM7XG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbCBiYWNrIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5nLCB0aGVuIGF1dG9kZXRlY3Rpb25cbiAgICBjb25zdCBjb25maWdOb3RpY2VzID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydub3RpY2VzJ10pO1xuICAgIGlmIChjb25maWdOb3RpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENvbnNpZGVyIHN0cmluZyBcImZhbHNlXCIgdG8gYmUgZmFsc3kgaW4gdGhpcyBjb250ZXh0XG4gICAgICBzaG91bGREaXNwbGF5Tm90aWNlcyA9IGNvbmZpZ05vdGljZXMgIT09ICdmYWxzZScgJiYgQm9vbGVhbihjb25maWdOb3RpY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCBhdXRvZGV0ZWN0aW9uIGJlaGF2aW9yXG4gICAgICBzaG91bGREaXNwbGF5Tm90aWNlcyA9IGlzU2FmZVRvV3JpdGVOb3RpY2VzO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vdGljZXMgZWl0aGVyIGdvIHRvIHN0ZGVyciwgb3Igbm93aGVyZVxuICBpb0hvc3Qubm90aWNlc0Rlc3RpbmF0aW9uID0gc2hvdWxkRGlzcGxheU5vdGljZXMgPyAnc3RkZXJyJyA6ICdkcm9wJztcbiAgY29uc3Qgbm90aWNlcyA9IE5vdGljZXMuY3JlYXRlKHtcbiAgICBpb0hvc3QsXG4gICAgY29udGV4dDogY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgIG91dHB1dDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydvdXRkaXInXSksXG4gICAgbGFuZ3VhZ2U6IGF3YWl0IGd1ZXNzTGFuZ3VhZ2UocHJvY2Vzcy5jd2QoKSksXG4gICAgaHR0cE9wdGlvbnM6IHsgYWdlbnQ6IHByb3h5QWdlbnQgfSxcbiAgICBjbGlWZXJzaW9uOiB2ZXJzaW9uTnVtYmVyKCksXG4gIH0pO1xuICBjb25zdCByZWZyZXNoTm90aWNlcyA9IChhc3luYyAoKSA9PiB7XG4gICAgLy8gdGhlIGNkayBub3RpY2VzIGNvbW1hbmQgaGFzIGl0J3Mgb3duIHJlZnJlc2hcbiAgICBpZiAoc2hvdWxkRGlzcGxheU5vdGljZXMgJiYgY21kICE9PSAnbm90aWNlcycpIHtcbiAgICAgIGF3YWl0IHRyYXBFcnJvcnMoaW9IZWxwZXIsICdDb3VsZCBub3QgcmVmcmVzaCBub3RpY2VzJywgKCkgPT4gbm90aWNlcy5yZWZyZXNoKCkpO1xuICAgIH1cbiAgfSkoKTtcblxuICBjb25zdCBzZGtQcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoe1xuICAgIGlvSGVscGVyLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBzZGtSZXF1ZXN0SGFuZGxlcihwcm94eUFnZW50KSxcbiAgICBsb2dnZXI6IG5ldyBJb0hvc3RTZGtMb2dnZXIoYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSkpLFxuICAgIHBsdWdpbkhvc3Q6IEdMT0JBTF9QTFVHSU5fSE9TVCxcbiAgfSwgY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9maWxlJ10pLCBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JlZ2lvbiddKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hSZWdpb24oc2RrUHJvdmlkZXIuZGVmYXVsdFJlZ2lvbik7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGF3YWl0IGlvSG9zdC5hc0lvSGVscGVyKCkuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBhdHRhY2ggcmVnaW9uIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBsZXQgb3V0RGlyTG9jazogSVJlYWRMb2NrIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBjb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyLFxuICAgIHN5bnRoZXNpemVyOlxuICAgICAgc3ludGhlc2l6ZXIgPz9cbiAgICAgIChhc3luYyAoYXdzLCBjb25maWcpID0+IHtcbiAgICAgICAgLy8gSW52b2tlICdleGVjUHJvZ3JhbScsIGFuZCBjb3B5IHRoZSBsb2NrIGZvciB0aGUgZGlyZWN0b3J5IGluIHRoZSBnbG9iYWxcbiAgICAgICAgLy8gdmFyaWFibGUgaGVyZS4gSXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBDTEkgZXhpdHMuIExvY2tzIGFyZSBub3QgcmUtZW50cmFudFxuICAgICAgICAvLyBzbyByZWxlYXNlIGl0IGlmIHdlIGhhdmUgdG8gc3ludGhlc2l6ZSBtb3JlIHRoYW4gb25jZSAoYmVjYXVzZSBvZiBjb250ZXh0IGxvb2t1cHMpLlxuICAgICAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG4gICAgICAgIGNvbnN0IHsgYXNzZW1ibHksIGxvY2ssIHBlcmZDb3VudGVycyB9ID0gYXdhaXQgZXhlY1Byb2dyYW0oYXdzLCBpb0hvc3QuYXNJb0hlbHBlcigpLCBjb25maWcpO1xuICAgICAgICBvdXREaXJMb2NrID0gbG9jaztcblxuICAgICAgICBjb25zdCB0cmVlID0gYXdhaXQgbG9hZFRyZWUoYXNzZW1ibHksIGlvSGVscGVyLmRlZmF1bHRzLnRyYWNlLmJpbmQoaW9IZWxwZXIuZGVmYXVsdHMpKTtcbiAgICAgICAgaWYgKHRyZWUpIHtcbiAgICAgICAgICBjb25zdCB2ID0gZmluZENvbnN0cnVjdExpYnJhcnlWZXJzaW9uKHRyZWUpO1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hDZGtMaWJWZXJzaW9uKHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJmQ291bnRlcnMpIHtcbiAgICAgICAgICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hDb3VudGVyc1RvTmV4dEV2ZW50KHBlcmZDb3VudGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNzZW1ibHk7XG4gICAgICB9KSxcbiAgICBpb0hlbHBlcjogaW9Ib3N0LmFzSW9IZWxwZXIoKSxcbiAgfSk7XG5cbiAgLyoqIEZ1bmN0aW9uIHRvIGxvYWQgcGx1Zy1pbnMsIHVzaW5nIGNvbmZpZ3VyYXRpb25zIGFkZGl0aXZlbHkuICovXG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRQbHVnaW5zKC4uLnNldHRpbmdzOiBTZXR0aW5nc1tdKSB7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0IHBsdWdpbnM6IHN0cmluZ1tdID0gc291cmNlLmdldChbJ3BsdWdpbiddKSB8fCBbXTtcbiAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgICAgYXdhaXQgR0xPQkFMX1BMVUdJTl9IT1NULmxvYWQocGx1Z2luLCBpb0hvc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGxvYWRQbHVnaW5zKGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MpO1xuXG4gIGlmICgodHlwZW9mIGNtZCkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignSW52YWxpZEFyZ1R5cGUnLCBgRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nLiBHb3Q6ICR7Y21kfSAoJHt0eXBlb2YgY21kfSlgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG1haW4oY21kLCBhcmd2KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBJZiB3ZSBsb2NrZWQgdGhlICdjZGsub3V0JyBkaXJlY3RvcnksIHJlbGVhc2UgaXQgaGVyZS5cbiAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG5cbiAgICAvLyBEbyBQU0FzIGhlcmVcbiAgICBhd2FpdCBkaXNwbGF5VmVyc2lvbk1lc3NhZ2UoaW9IZWxwZXIpO1xuXG4gICAgYXdhaXQgcmVmcmVzaE5vdGljZXM7XG4gICAgaWYgKGNtZCA9PT0gJ25vdGljZXMnKSB7XG4gICAgICAvLyBkbyBub3QgdHJhcCBlcnJvcnMgaGVyZVxuICAgICAgLy8gdGhpcyBpcyB0aGUgbm90aWNlcyBjb21tYW5kIGl0c2VsZiwgYW55IGVycm9yIHNob3VsZCBiZSBsb3VkXG4gICAgICBhd2FpdCBub3RpY2VzLnJlZnJlc2goeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IG5vdGljZXMuZGlzcGxheSh7XG4gICAgICAgIGluY2x1ZGVBY2tub3dsZWRnZWQ6ICFhcmd2LnVuYWNrbm93bGVkZ2VkLFxuICAgICAgICBzaG93VG90YWw6IGFyZ3YudW5hY2tub3dsZWRnZWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZERpc3BsYXlOb3RpY2VzICYmIGNtZCAhPT0gJ3ZlcnNpb24nKSB7XG4gICAgICBhd2FpdCB0cmFwRXJyb3JzKGlvSGVscGVyLCAnQ291bGQgbm90IGRpc3BsYXkgbm90aWNlcycsICgpID0+IG5vdGljZXMuZGlzcGxheSgpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBtYWluKGNvbW1hbmQ6IHN0cmluZywgYXJnczogYW55KTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7XG4gICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSBjb21tYW5kIGFzIGFueTtcbiAgICBjb25zdCB0b29sa2l0U3RhY2tOYW1lOiBzdHJpbmcgPSBUb29sa2l0SW5mby5kZXRlcm1pbmVOYW1lKGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndG9vbGtpdFN0YWNrTmFtZSddKSk7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKGBUb29sa2l0IHN0YWNrOiAke2NoYWxrLmJvbGQodG9vbGtpdFN0YWNrTmFtZSl9YCk7XG5cbiAgICBjb25zdCBjbG91ZEZvcm1hdGlvbiA9IG5ldyBEZXBsb3ltZW50cyh7XG4gICAgICBzZGtQcm92aWRlcixcbiAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICBpb0hlbHBlcjogYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSksXG4gICAgfSk7XG5cbiAgICBpZiAoYXJncy5hbGwgJiYgYXJncy5TVEFDS1MpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1N0YWNrc09yQWxsUmVxdWlyZWQnLCAnWW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBsaXN0IG9mIFN0YWNrcyBvciB0aGUgYC0tYWxsYCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIGFyZ3MuU1RBQ0tTID0gYXJncy5TVEFDS1MgPz8gKGFyZ3MuU1RBQ0sgPyBbYXJncy5TVEFDS10gOiBbXSk7XG4gICAgYXJncy5FTlZJUk9OTUVOVFMgPSBhcmdzLkVOVklST05NRU5UUyA/PyBbXTtcblxuICAgIGNvbnN0IHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yID0ge1xuICAgICAgYWxsVG9wTGV2ZWw6IGFyZ3MuYWxsLFxuICAgICAgcGF0dGVybnM6IGFyZ3MuU1RBQ0tTLFxuICAgIH07XG5cbiAgICBjb25zdCBjbGkgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBpb0hvc3QsXG4gICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgZGVwbG95bWVudHM6IGNsb3VkRm9ybWF0aW9uLFxuICAgICAgdmVyYm9zZTogYXJndi50cmFjZSB8fCBhcmd2LnZlcmJvc2UgPiAwLFxuICAgICAgaWdub3JlRXJyb3JzOiBhcmd2WydpZ25vcmUtZXJyb3JzJ10sXG4gICAgICBzdHJpY3Q6IGFyZ3Yuc3RyaWN0LFxuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XG4gICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnY29udGV4dCc7XG4gICAgICAgIHJldHVybiBjb250ZXh0KHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBjb250ZXh0OiBjb25maWd1cmF0aW9uLmNvbnRleHQsXG4gICAgICAgICAgY2xlYXI6IGFyZ3YuY2xlYXIsXG4gICAgICAgICAganNvbjogYXJndi5qc29uLFxuICAgICAgICAgIGZvcmNlOiBhcmd2LmZvcmNlLFxuICAgICAgICAgIHJlc2V0OiBhcmd2LnJlc2V0LFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZG9jcyc6XG4gICAgICBjYXNlICdkb2MnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkb2NzJztcbiAgICAgICAgcmV0dXJuIGRvY3Moe1xuICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICAgIGJyb3dzZXI6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYnJvd3NlciddKSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RvY3Rvcic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RvY3Rvcic7XG4gICAgICAgIHJldHVybiBkb2N0b3Ioe1xuICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnbHMnOlxuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2xpc3QnO1xuICAgICAgICByZXR1cm4gY2xpLmxpc3QoYXJncy5TVEFDS1MsIHtcbiAgICAgICAgICBsb25nOiBhcmdzLmxvbmcsXG4gICAgICAgICAganNvbjogYXJndi5qc29uLFxuICAgICAgICAgIHNob3dEZXBzOiBhcmdzLnNob3dEZXBlbmRlbmNpZXMsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWZmJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlmZic7XG4gICAgICAgIGNvbnN0IGVuYWJsZURpZmZOb0ZhaWwgPSBpc0ZlYXR1cmVFbmFibGVkKGNvbmZpZ3VyYXRpb24sIGN4YXBpLkVOQUJMRV9ESUZGX05PX0ZBSUxfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiBjbGkuZGlmZih7XG4gICAgICAgICAgc3RhY2tOYW1lczogYXJncy5TVEFDS1MsXG4gICAgICAgICAgZXhjbHVzaXZlbHk6IGFyZ3MuZXhjbHVzaXZlbHksXG4gICAgICAgICAgdGVtcGxhdGVQYXRoOiBhcmdzLnRlbXBsYXRlLFxuICAgICAgICAgIHN0cmljdDogYXJncy5zdHJpY3QsXG4gICAgICAgICAgY29udGV4dExpbmVzOiBhcmdzLmNvbnRleHRMaW5lcyxcbiAgICAgICAgICBzZWN1cml0eU9ubHk6IGFyZ3Muc2VjdXJpdHlPbmx5LFxuICAgICAgICAgIGZhaWw6IGFyZ3MuZmFpbCAhPSBudWxsID8gYXJncy5mYWlsIDogIWVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICAgICAgY29tcGFyZUFnYWluc3RQcm9jZXNzZWRUZW1wbGF0ZTogYXJncy5wcm9jZXNzZWQsXG4gICAgICAgICAgcXVpZXQ6IGFyZ3MucXVpZXQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRlcm1pbmVEaWZmTWV0aG9kKGFyZ3MpLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgICAgaW5jbHVkZU1vdmVzOiBhcmdzWydpbmNsdWRlLW1vdmVzJ10sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkcmlmdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RyaWZ0JztcbiAgICAgICAgcmV0dXJuIGNsaS5kcmlmdCh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgZmFpbDogYXJncy5mYWlsLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncmVmYWN0b3InOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3JlZmFjdG9yJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncmVmYWN0b3InO1xuICAgICAgICByZXR1cm4gY2xpLnJlZmFjdG9yKHtcbiAgICAgICAgICBkcnlSdW46IGFyZ3MuZHJ5UnVuLFxuICAgICAgICAgIG92ZXJyaWRlRmlsZTogYXJncy5vdmVycmlkZUZpbGUsXG4gICAgICAgICAgcmV2ZXJ0OiBhcmdzLnJldmVydCxcbiAgICAgICAgICBzdGFja3M6IHNlbGVjdG9yLFxuICAgICAgICAgIGFkZGl0aW9uYWxTdGFja05hbWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmFkZGl0aW9uYWxTdGFja05hbWUgPz8gW10pLFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlID8/IGZhbHNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Jvb3RzdHJhcCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Jvb3RzdHJhcCc7XG4gICAgICAgIGNvbnN0IHNvdXJjZTogQm9vdHN0cmFwU291cmNlID0gYXdhaXQgZGV0ZXJtaW5lQm9vdHN0cmFwVmVyc2lvbihpb0hvc3QsIGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLnNob3dUZW1wbGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGJvb3RzdHJhcHBlciA9IG5ldyBCb290c3RyYXBwZXIoc291cmNlLCBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24pKTtcbiAgICAgICAgICByZXR1cm4gYm9vdHN0cmFwcGVyLnNob3dUZW1wbGF0ZShhcmdzLmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5ib290c3RyYXAoYXJncy5FTlZJUk9OTUVOVFMsIHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIGZvcmNlRGVwbG95bWVudDogYXJndi5mb3JjZSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSxcbiAgICAgICAgICB0YWdzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3RhZ3MnXSksXG4gICAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBhcmdzLnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IGFyZ3NbJ3ByZXZpb3VzLXBhcmFtZXRlcnMnXSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBidWNrZXROYW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAnYnVja2V0TmFtZSddKSxcbiAgICAgICAgICAgIGttc0tleUlkOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAna21zS2V5SWQnXSksXG4gICAgICAgICAgICBjcmVhdGVDdXN0b21lck1hc3RlcktleTogYXJncy5ib290c3RyYXBDdXN0b21lcktleSxcbiAgICAgICAgICAgIHF1YWxpZmllcjogYXJncy5xdWFsaWZpZXIgPz8gY29uZmlndXJhdGlvbi5jb250ZXh0LmdldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInKSxcbiAgICAgICAgICAgIHB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjogYXJncy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBleGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeTogYXJndi5leGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIGN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIHRydXN0ZWRBY2NvdW50czogYXJyYXlGcm9tWWFyZ3MoYXJncy50cnVzdCksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3RGb3JMb29rdXApLFxuICAgICAgICAgICAgdW50cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudW50cnVzdCksXG4gICAgICAgICAgICBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMpLFxuICAgICAgICAgICAgZGVueUV4dGVybmFsSWQ6IGFyZ3MuZGVueUV4dGVybmFsSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RlcGxveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RlcGxveSc7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlck1hcDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYXJncy5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IChwYXJhbWV0ZXIgYXMgc3RyaW5nKS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgcGFyYW1ldGVyTWFwW2tleVZhbHVlWzBdXSA9IGtleVZhbHVlLnNsaWNlKDEpLmpvaW4oJz0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5leGVjdXRlICE9PSB1bmRlZmluZWQgJiYgYXJncy5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0NvbmZsaWN0aW5nRXhlY3V0ZUFuZE1ldGhvZCcsICdDYW4gbm90IHN1cHBseSBib3RoIC0tW25vLV1leGVjdXRlIGFuZCAtLW1ldGhvZCBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xpLmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgZXhjbHVzaXZlbHk6IGFyZ3MuZXhjbHVzaXZlbHksXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgbm90aWZpY2F0aW9uQXJuczogYXJncy5ub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyZXF1aXJlQXBwcm92YWwnXSksXG4gICAgICAgICAgcmV1c2VBc3NldHM6IGFyZ3NbJ2J1aWxkLWV4Y2x1ZGUnXSxcbiAgICAgICAgICB0YWdzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3RhZ3MnXSksXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDogZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzLCBjb25maWd1cmF0aW9uKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJNYXAsXG4gICAgICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiBhcmdzWydwcmV2aW91cy1wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgb3V0cHV0c0ZpbGU6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnb3V0cHV0c0ZpbGUnXSksXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgY2k6IGFyZ3MuY2ksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgd2F0Y2g6IGFyZ3Mud2F0Y2gsXG4gICAgICAgICAgdHJhY2VMb2dzOiBhcmdzLmxvZ3MsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgICAgYXNzZXRQYXJhbGxlbGlzbTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldFBhcmFsbGVsaXNtJ10pLFxuICAgICAgICAgIGFzc2V0QnVpbGRDb25jdXJyZW5jeTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldEJ1aWxkQ29uY3VycmVuY3knXSksXG4gICAgICAgICAgYXNzZXRCdWlsZFRpbWU6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRQcmVidWlsZCddKVxuICAgICAgICAgICAgPyBBc3NldEJ1aWxkVGltZS5BTExfQkVGT1JFX0RFUExPWVxuICAgICAgICAgICAgOiBBc3NldEJ1aWxkVGltZS5KVVNUX0lOX1RJTUUsXG4gICAgICAgICAgaWdub3JlTm9TdGFja3M6IGFyZ3MuaWdub3JlTm9TdGFja3MsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWFnbm9zZSc6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZGlhZ25vc2UnKTtcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlhZ25vc2UnO1xuXG4gICAgICAgIC8vIEltcGxpY2l0bHkgc3dpdGNoICdkZWJ1ZycgbW9kZSB0byB0cnVlLCB0aGF0IGlzIGdvaW5nIHRvIGJlIG1vc3QgdXNlZnVsLlxuICAgICAgICBjb25maWd1cmF0aW9uLnNldHRpbmdzLnRlbXBvcmFyaWx5TXV0YWJsZSgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICBzZXR0aW5ncy5zZXQoWydkZWJ1ZyddLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNsaS5kaWFnbm9zZSh7XG4gICAgICAgICAgc3RhY2tzOiBzcGVjaWZpY1N0YWNrc09yQWxsUmVjdXJzaXZlbHkoYXJncy5TVEFDS1MpLFxuICAgICAgICAgIGNvbmN1cnJlbmN5OiBhcmdzLmNvbmN1cnJlbmN5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IGFyZ3MudG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3JvbGxiYWNrJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncm9sbGJhY2snO1xuICAgICAgICByZXR1cm4gY2xpLnJvbGxiYWNrKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbjogYXJnc1sndmFsaWRhdGUtYm9vdHN0cmFwLXZlcnNpb24nXSxcbiAgICAgICAgICBvcnBoYW5Mb2dpY2FsSWRzOiBhcmdzLm9ycGhhbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3B1Ymxpc2gtYXNzZXRzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncHVibGlzaC1hc3NldHMnO1xuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3B1Ymxpc2gtYXNzZXRzJyk7XG5cbiAgICAgICAgcmV0dXJuIGNsaS5wdWJsaXNoQXNzZXRzKHtcbiAgICAgICAgICBzdGFja3M6IGNvbnZlcnRTdGFja1NlbGVjdG9yKHNlbGVjdG9yLCBhcmdzLmV4Y2x1c2l2ZWx5KSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ29ycGhhbic6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnb3JwaGFuJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnb3JwaGFuJztcbiAgICAgICAgcmV0dXJuIGNsaS5vcnBoYW4oe1xuICAgICAgICAgIGNvbnN0cnVjdFBhdGg6IGFyZ3MuUEFUSFMgPz8gW10sXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbXBvcnQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbXBvcnQnO1xuICAgICAgICByZXR1cm4gY2xpLmltcG9ydCh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDoge1xuICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICBleGVjdXRlOiBhcmdzLmV4ZWN1dGUsXG4gICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICByZWNvcmRSZXNvdXJjZU1hcHBpbmc6IGFyZ3NbJ3JlY29yZC1yZXNvdXJjZS1tYXBwaW5nJ10sXG4gICAgICAgICAgcmVzb3VyY2VNYXBwaW5nRmlsZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZyddLFxuICAgICAgICAgIHJlc291cmNlTWFwcGluZ0lubGluZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZy1pbmxpbmUnXSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3dhdGNoJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnd2F0Y2gnO1xuICAgICAgICBhd2FpdCBjbGkud2F0Y2goe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDogZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzLCBjb25maWd1cmF0aW9uLCB0cnVlKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICB0cmFjZUxvZ3M6IGFyZ3MubG9ncyxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnZGVzdHJveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Rlc3Ryb3knO1xuICAgICAgICByZXR1cm4gY2xpLmRlc3Ryb3koe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2djJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZ2MnO1xuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ2djJyk7XG4gICAgICAgIGlmIChhcmdzLmJvb3RzdHJhcFN0YWNrTmFtZSkge1xuICAgICAgICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy53YXJuKCctLWJvb3RzdHJhcC1zdGFjay1uYW1lIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIGdjIGlzIEdBLiBVc2UgLS10b29sa2l0LXN0YWNrLW5hbWUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcm9sZUFybiBpcyBkZWZpbmVkIGZvciB3aGVuIGNsb3VkZm9ybWF0aW9uIGlzIGludm9rZWRcbiAgICAgICAgLy8gVGhpcyBjb25mbGljdHMgd2l0aCBkaXJlY3Qgc2RrIGNhbGxzIGV4aXN0aW5nIGluIHRoZSBnYyBjb21tYW5kIHRvIHMzIGFuZCBlY3JcbiAgICAgICAgaWYgKGFyZ3Mucm9sZUFybikge1xuICAgICAgICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy53YXJuKCdUaGUgLS1yb2xlLWFybiBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIGdjIGNvbW1hbmQgYW5kIHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xpLmdhcmJhZ2VDb2xsZWN0KGFyZ3MuRU5WSVJPTk1FTlRTLCB7XG4gICAgICAgICAgYWN0aW9uOiBhcmdzLmFjdGlvbixcbiAgICAgICAgICB0eXBlOiBhcmdzLnR5cGUsXG4gICAgICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiBhcmdzWydyb2xsYmFjay1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGNyZWF0ZWRCdWZmZXJEYXlzOiBhcmdzWydjcmVhdGVkLWJ1ZmZlci1kYXlzJ10sXG4gICAgICAgICAgYm9vdHN0cmFwU3RhY2tOYW1lOiBhcmdzLnRvb2xraXRTdGFja05hbWUgPz8gYXJncy5ib290c3RyYXBTdGFja05hbWUsXG4gICAgICAgICAgY29uZmlybTogYXJncy5jb25maXJtLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZmxhZ3MnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdmbGFncyc7XG5cbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdmbGFncycpO1xuXG4gICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgVG9vbGtpdCh7XG4gICAgICAgICAgaW9Ib3N0LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgdW5zdGFibGVGZWF0dXJlczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd1bnN0YWJsZSddKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZsYWdzRGF0YSA9IGF3YWl0IHRvb2xraXQuZmxhZ3MoY2xvdWRFeGVjdXRhYmxlKTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBGbGFnQ29tbWFuZEhhbmRsZXIoZmxhZ3NEYXRhLCBpb0hlbHBlciwgYXJncywgdG9vbGtpdCwgY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVyLnByb2Nlc3NGbGFnc0NvbW1hbmQoKTtcblxuICAgICAgY2FzZSAnc3ludGhlc2l6ZSc6XG4gICAgICBjYXNlICdzeW50aCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3N5bnRoJztcbiAgICAgICAgY29uc3QgcXVpZXQgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3F1aWV0J10pID8/IGFyZ3MucXVpZXQ7XG4gICAgICAgIGlmIChhcmdzLmV4Y2x1c2l2ZWx5KSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aChhcmdzLlNUQUNLUywgYXJncy5leGNsdXNpdmVseSwgcXVpZXQsIGFyZ3MudmFsaWRhdGlvbiwgYXJndi5qc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2xpLnN5bnRoKGFyZ3MuU1RBQ0tTLCB0cnVlLCBxdWlldCwgYXJncy52YWxpZGF0aW9uLCBhcmd2Lmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ25vdGljZXMnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciBub3RpY2VzLCB0aGV5IGFyZSBub3cgdGhlIHByaW1hcnkgb3V0cHV0XG4gICAgICAgIC8vIG9mIHRoZSBjb21tYW5kIGFuZCB0aGV5IHNob3VsZCBnbyB0byBzdGRvdXQuXG4gICAgICAgIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSAnc3Rkb3V0JztcblxuICAgICAgICAvLyBUaGlzIGlzIGEgdmFsaWQgY29tbWFuZCwgYnV0IHdlJ3JlIHBvc3Rwb25pbmcgaXRzIGV4ZWN1dGlvbiBiZWNhdXNlIGRpc3BsYXlpbmdcbiAgICAgICAgLy8gbm90aWNlcyBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgZXZlcnkgY29tbWFuZC5cbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21ldGFkYXRhJztcbiAgICAgICAgcmV0dXJuIGNsaS5tZXRhZGF0YShhcmdzLlNUQUNLLCBhcmd2Lmpzb24pO1xuXG4gICAgICBjYXNlICdhY2tub3dsZWRnZSc6XG4gICAgICBjYXNlICdhY2snOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgcmV0dXJuIGNsaS5hY2tub3dsZWRnZShhcmdzLklEKTtcblxuICAgICAgY2FzZSAnY2xpLXRlbGVtZXRyeSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2NsaS10ZWxlbWV0cnknO1xuICAgICAgICBpZiAoYXJncy5lbmFibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLmRpc2FibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVGVsZW1ldHJ5QXJnUmVxdWlyZWQnLCAnTXVzdCBzcGVjaWZ5IFxcJy0tZW5hYmxlXFwnLCBcXCctLWRpc2FibGVcXCcsIG9yIFxcJy0tc3RhdHVzXFwnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5zdGF0dXMpIHtcbiAgICAgICAgICByZXR1cm4gY2xpLmNsaVRlbGVtZXRyeVN0YXR1cyhhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlbmFibGUgPSBhcmdzLmVuYWJsZSA/PyAhYXJncy5kaXNhYmxlO1xuICAgICAgICAgIHJldHVybiBjbGkuY2xpVGVsZW1ldHJ5KGVuYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2luaXQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbml0JztcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2xhbmd1YWdlJ10pO1xuICAgICAgICBpZiAoYXJncy5saXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHByaW50QXZhaWxhYmxlVGVtcGxhdGVzKGlvSGVscGVyLCBsYW5ndWFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gR2F0ZSBjdXN0b20gdGVtcGxhdGUgc3VwcG9ydCB3aXRoIHVuc3RhYmxlIGZsYWdcbiAgICAgICAgICBpZiAoYXJnc1snZnJvbS1wYXRoJ10pIHtcbiAgICAgICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnaW5pdCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjbGlJbml0KHtcbiAgICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICAgICAgdHlwZTogYXJncy5URU1QTEFURSxcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgY2FuVXNlTmV0d29yazogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ2VuZXJhdGVPbmx5OiBhcmdzLmdlbmVyYXRlT25seSxcbiAgICAgICAgICAgIGxpYlZlcnNpb246IGFyZ3MubGliVmVyc2lvbixcbiAgICAgICAgICAgIGZyb21QYXRoOiBhcmdzWydmcm9tLXBhdGgnXSxcbiAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogYXJnc1sndGVtcGxhdGUtcGF0aCddLFxuICAgICAgICAgICAgcGFja2FnZU1hbmFnZXI6IGFyZ3NbJ3BhY2thZ2UtbWFuYWdlciddLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IGFyZ3MubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnbWlncmF0ZSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21pZ3JhdGUnO1xuICAgICAgICByZXR1cm4gY2xpLm1pZ3JhdGUoe1xuICAgICAgICAgIHN0YWNrTmFtZTogYXJnc1snc3RhY2stbmFtZSddLFxuICAgICAgICAgIGZyb21QYXRoOiBhcmdzWydmcm9tLXBhdGgnXSxcbiAgICAgICAgICBmcm9tU3RhY2s6IGFyZ3NbJ2Zyb20tc3RhY2snXSxcbiAgICAgICAgICBsYW5ndWFnZTogYXJncy5sYW5ndWFnZSxcbiAgICAgICAgICBvdXRwdXRQYXRoOiBhcmdzWydvdXRwdXQtcGF0aCddLFxuICAgICAgICAgIGZyb21TY2FuOiBnZXRNaWdyYXRlU2NhblR5cGUoYXJnc1snZnJvbS1zY2FuJ10pLFxuICAgICAgICAgIGZpbHRlcjogYXJncy5maWx0ZXIsXG4gICAgICAgICAgYWNjb3VudDogYXJncy5hY2NvdW50LFxuICAgICAgICAgIHJlZ2lvbjogYXJncy5yZWdpb24sXG4gICAgICAgICAgY29tcHJlc3M6IGFyZ3MuY29tcHJlc3MsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAndmVyc2lvbic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3ZlcnNpb24nO1xuICAgICAgICByZXR1cm4gaW9Ib3N0LmRlZmF1bHRzLnJlc3VsdCh2ZXJzaW9uV2l0aEJ1aWxkKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdVbmtub3duQ29tbWFuZCcsICdVbmtub3duIGNvbW1hbmQ6ICcgKyBjb21tYW5kKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hpY2ggdmVyc2lvbiBvZiBib290c3RyYXBwaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVybWluZUJvb3RzdHJhcFZlcnNpb24oaW9Ib3N0OiBDbGlJb0hvc3QsIGFyZ3M6IHsgdGVtcGxhdGU/OiBzdHJpbmcgfSk6IFByb21pc2U8Qm9vdHN0cmFwU291cmNlPiB7XG4gIGxldCBzb3VyY2U6IEJvb3RzdHJhcFNvdXJjZTtcbiAgaWYgKGFyZ3MudGVtcGxhdGUpIHtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuaW5mbyhgVXNpbmcgYm9vdHN0cmFwcGluZyB0ZW1wbGF0ZSBmcm9tICR7YXJncy50ZW1wbGF0ZX1gKTtcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2N1c3RvbScsIHRlbXBsYXRlRmlsZTogYXJncy50ZW1wbGF0ZSB9O1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LkNES19MRUdBQ1lfQk9PVFNUUkFQKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmluZm8oJ0NES19MRUdBQ1lfQk9PVFNUUkFQIHNldCwgdXNpbmcgbGVnYWN5LXN0eWxlIGJvb3RzdHJhcHBpbmcnKTtcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2xlZ2FjeScgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpbiBWMiwgdGhlIFwibmV3XCIgYm9vdHN0cmFwcGluZyBpcyB0aGUgZGVmYXVsdFxuICAgIHNvdXJjZSA9IHsgc291cmNlOiAnZGVmYXVsdCcgfTtcbiAgfVxuICByZXR1cm4gc291cmNlO1xufVxuXG5mdW5jdGlvbiBpc0ZlYXR1cmVFbmFibGVkKGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sIGZlYXR1cmVGbGFnOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvbmZpZ3VyYXRpb24uY29udGV4dC5nZXQoZmVhdHVyZUZsYWcpID8/IGN4YXBpLmZ1dHVyZUZsYWdEZWZhdWx0KGZlYXR1cmVGbGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgU3RhY2tTZWxlY3RvciBhbmQgZXhjbHVzaXZlbHkgZmxhZyB0byB0b29sa2l0LWxpYidzIFN0YWNrU2VsZWN0b3IgZm9ybWF0XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGFja1NlbGVjdG9yKHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yLCBleGNsdXNpdmVseT86IGJvb2xlYW4pOiBMaWJTdGFja1NlbGVjdG9yIHtcbiAgcmV0dXJuIHtcbiAgICBwYXR0ZXJuczogc2VsZWN0b3IucGF0dGVybnMsXG4gICAgc3RyYXRlZ3k6IHNlbGVjdG9yLnBhdHRlcm5zLmxlbmd0aCA+IDAgPyBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LlBBVFRFUk5fTUFUQ0ggOiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1MsXG4gICAgZXhwYW5kOiBleGNsdXNpdmVseSA/IEV4cGFuZFN0YWNrU2VsZWN0aW9uLk5PTkUgOiBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHRvb2xraXQtbGliIFN0YWNrU2VsZWN0b3IgZnJvbSBhIGdpdmVuIHNldCBvZiBzdGFjayBjb25zdHJ1Y3QgcGF0aCBwYXR0ZXJuc1xuICpcbiAqIElmIG5vIHBhdHRlcm5zIGFyZSBnaXZlbiwgYWxsIHN0YWNrcyBpbiB0aGUgYXNzZW1ibHkgYW5kIGFsbCBvZiBpdHMgc3RhZ2VzIGFyZSBzZWxlY3RlZC5cbiAqL1xuZnVuY3Rpb24gc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KHBhdHRlcm5zOiBzdHJpbmdbXSk6IExpYlN0YWNrU2VsZWN0b3Ige1xuICByZXR1cm4ge1xuICAgIHN0cmF0ZWd5OiBwYXR0ZXJucy5sZW5ndGggPiAwID8gU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5QQVRURVJOX01BVENIIDogU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5BTExfU1RBQ0tTLFxuICAgIHBhdHRlcm5zLFxuICB9O1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBhIFlhcmdzIGlucHV0IGFycmF5IHRvIHNvbWV0aGluZyB0aGF0IG1ha2VzIG1vcmUgc2Vuc2UgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZVxuICogbW9kZWwgKHRlbGxpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhYnNlbmNlIGFuZCBhbiBlbXB0eSBhcnJheSlcbiAqXG4gKiAtIEFuIGVtcHR5IGFycmF5IGlzIHRoZSBkZWZhdWx0IGNhc2UsIG1lYW5pbmcgdGhlIHVzZXIgZGlkbid0IHBhc3MgYW55IGFyZ3VtZW50cy4gV2UgcmV0dXJuXG4gKiAgIHVuZGVmaW5lZC5cbiAqIC0gSWYgdGhlIHVzZXIgcGFzc2VkIGEgc2luZ2xlIGVtcHR5IHN0cmluZywgdGhleSBkaWQgc29tZXRoaW5nIGxpa2UgYC0tYXJyYXk9YCwgd2hpY2ggd2UnbGxcbiAqICAgdGFrZSB0byBtZWFuIHRoZXkgcGFzc2VkIGFuIGVtcHR5IGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZyb21ZYXJncyh4czogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICh4cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB4cy5maWx0ZXIoKHgpID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBkaWZmIG1ldGhvZCBmcm9tIENMSSBhcmdzLlxuICogLS1tZXRob2QgdGFrZXMgcHJlY2VkZW5jZSwgdGhlbiBkZXByZWNhdGVkIC0tY2hhbmdlLXNldCwgdGhlbiAtLXRlbXBsYXRlIGltcGxpZXMgdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZURpZmZNZXRob2QoYXJnczogYW55KTogJ2NoYW5nZS1zZXQnIHwgJ3RlbXBsYXRlJyB8ICdhdXRvJyB7XG4gIGlmIChhcmdzLm1ldGhvZCAmJiBhcmdzLm1ldGhvZCAhPT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuIGFyZ3MubWV0aG9kO1xuICB9XG5cbiAgLy8gRGVwcmVjYXRlZCAtLW5vLWNoYW5nZS1zZXQgbWFwcyB0byB0ZW1wbGF0ZVxuICBpZiAoYXJnc1snY2hhbmdlLXNldCddID09PSBmYWxzZSkge1xuICAgIHJldHVybiAndGVtcGxhdGUnO1xuICB9XG5cbiAgLy8gLS10ZW1wbGF0ZSBpbXBsaWVzIHRlbXBsYXRlXG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgcmV0dXJuICd0ZW1wbGF0ZSc7XG4gIH1cblxuICByZXR1cm4gJ2F1dG8nO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVEZXBsb3ltZW50TWV0aG9kKGFyZ3M6IGFueSwgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgd2F0Y2g/OiBib29sZWFuKTogRGVwbG95bWVudE1ldGhvZCB7XG4gIGxldCBkZXBsb3ltZW50TWV0aG9kOiBDaGFuZ2VTZXREZXBsb3ltZW50IHwgRGlyZWN0RGVwbG95bWVudCB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLm1ldGhvZCkge1xuICAgIGNhc2UgJ2V4ZWN1dGUtY2hhbmdlLXNldCc6XG4gICAgICBpZiAoIWFyZ3MuU1RBQ0tTIHx8IGFyZ3MuU1RBQ0tTLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdFeGFjdGx5T25lU3RhY2snLCAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0IHJlcXVpcmVzIGV4YWN0bHkgb25lIHN0YWNrJyk7XG4gICAgICB9XG4gICAgICBpZiAod2F0Y2ggfHwgYXJncy53YXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdXYXRjaFdpdGhFeGVjdXRlQ2hhbmdlU2V0JywgJy0tbWV0aG9kPWV4ZWN1dGUtY2hhbmdlLXNldCBjYW5ub3QgYmUgdXNlZCB3aXRoIHdhdGNoJyk7XG4gICAgICB9XG4gICAgICByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3MsICctLW1ldGhvZD1leGVjdXRlLWNoYW5nZS1zZXQnLCB7XG4gICAgICAgIGZvcmNlOiAnLS1mb3JjZScsXG4gICAgICAgIHBhcmFtZXRlcnM6ICctLXBhcmFtZXRlcnMnLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcycsXG4gICAgICAgIHJldmVydERyaWZ0OiAnLS1yZXZlcnQtZHJpZnQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdleGVjdXRlLWNoYW5nZS1zZXQnLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUgPz8gJ2Nkay1kZXBsb3ktY2hhbmdlLXNldCcsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RpcmVjdCc6XG4gICAgICByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3MsICctLW1ldGhvZD1kaXJlY3QnLCB7XG4gICAgICAgIGNoYW5nZVNldE5hbWU6ICctLWNoYW5nZS1zZXQtbmFtZScsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiAnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJyxcbiAgICAgICAgcmV2ZXJ0RHJpZnQ6ICctLXJldmVydC1kcmlmdCcsXG4gICAgICB9KTtcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7IG1ldGhvZDogJ2RpcmVjdCcgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NoYW5nZS1zZXQnOlxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGV4ZWN1dGU6IHRydWUsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXBhcmUtY2hhbmdlLXNldCc6XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgZXhlY3V0ZTogZmFsc2UsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgZXhlY3V0ZTogd2F0Y2ggPyB0cnVlIDogYXJncy5leGVjdXRlID8/IHRydWUsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgaG90c3dhcE1vZGUgPSBkZXRlcm1pbmVIb3Rzd2FwTW9kZShhcmdzLmhvdHN3YXAsIGFyZ3MuaG90c3dhcEZhbGxiYWNrLCB3YXRjaCk7XG4gIGNvbnN0IGhvdHN3YXBQcm9wZXJ0aWVzID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydob3Rzd2FwJ10pIHx8IHt9O1xuICBzd2l0Y2ggKGhvdHN3YXBNb2RlKSB7XG4gICAgY2FzZSBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0s6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgcHJvcGVydGllczogaG90c3dhcFByb3BlcnRpZXMsXG4gICAgICAgIGZhbGxiYWNrOiBkZXBsb3ltZW50TWV0aG9kLFxuICAgICAgfTtcbiAgICBjYXNlIEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ2hvdHN3YXAnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBob3Rzd2FwUHJvcGVydGllcyxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICBjYXNlIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDpcbiAgICAgIHJldHVybiBkZXBsb3ltZW50TWV0aG9kO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlOiBzdHJpbmcpIHtcbiAgaWYgKCFjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Vuc3RhYmxlJ10pLmluY2x1ZGVzKGZlYXR1cmUpKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVW5zdGFibGUke3VjZmlyc3QoZmVhdHVyZSl9YCwgYFVuc3RhYmxlIGZlYXR1cmUgdXNlOiBcXCcke2ZlYXR1cmV9XFwnIGlzIHVuc3RhYmxlLiBJdCBtdXN0IGJlIG9wdGVkIGluIHZpYSBcXCctLXVuc3RhYmxlXFwnLCBlLmcuIFxcJ2NkayAke2ZlYXR1cmV9IC0tdW5zdGFibGU9JHtmZWF0dXJlfVxcJ2ApO1xuICB9XG5cbiAgZnVuY3Rpb24gdWNmaXJzdCh4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4geFswXS50b1VwcGVyQ2FzZSgpICsgeC5zbGljZSgxKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93IGlmIGFueSBvZiB0aGUgZ2l2ZW4gZmxhZ3MgYXJlIHNldCwgYXMgdGhleSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIG9wdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVqZWN0SW5jb21wYXRpYmxlT3B0aW9ucyhhcmdzOiBhbnksIG9wdGlvbjogc3RyaW5nLCBmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICBmb3IgKGNvbnN0IFtrZXksIGZsYWddIG9mIE9iamVjdC5lbnRyaWVzKGZsYWdzKSkge1xuICAgIGNvbnN0IHZhbHVlID0gYXJnc1trZXldO1xuXG4gICAgbGV0IGlzU2V0ID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyB5YXJncyBtYXkgZGVmYXVsdCBhcnJheSBvcHRpb25zIHRvIFt7fV0sIHNvIG9ubHkgY291bnQgcmVhbCB2YWx1ZXNcbiAgICAgIGlzU2V0ID0gdmFsdWUuc29tZSgodjogdW5rbm93bikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU2V0ID0gISF2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNTZXQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0luY29tcGF0aWJsZU9wdGlvbnMnLCBgJHtmbGFnfSBjYW5ub3QgYmUgdXNlZCB3aXRoICR7b3B0aW9ufWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVIb3Rzd2FwTW9kZShob3Rzd2FwPzogYm9vbGVhbiwgaG90c3dhcEZhbGxiYWNrPzogYm9vbGVhbiwgd2F0Y2g/OiBib29sZWFuKTogSG90c3dhcE1vZGUge1xuICBpZiAoaG90c3dhcCAmJiBob3Rzd2FwRmFsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDb25mbGljdGluZ0hvdHN3YXBBcmdzJywgJ0NhbiBub3Qgc3VwcGx5IGJvdGggLS1ob3Rzd2FwIGFuZCAtLWhvdHN3YXAtZmFsbGJhY2sgYXQgdGhlIHNhbWUgdGltZScpO1xuICB9IGVsc2UgaWYgKCFob3Rzd2FwICYmICFob3Rzd2FwRmFsbGJhY2spIHtcbiAgICBpZiAoaG90c3dhcCA9PT0gdW5kZWZpbmVkICYmIGhvdHN3YXBGYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gd2F0Y2ggPyBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFkgOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQ7XG4gICAgfSBlbHNlIGlmIChob3Rzd2FwID09PSBmYWxzZSB8fCBob3Rzd2FwRmFsbGJhY2sgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cbiAgfVxuXG4gIGxldCBob3Rzd2FwTW9kZTogSG90c3dhcE1vZGU7XG4gIGlmIChob3Rzd2FwKSB7XG4gICAgaG90c3dhcE1vZGUgPSBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFk7XG4gICAgLyogaWYgKGhvdHN3YXBGYWxsYmFjaykqL1xuICB9IGVsc2Uge1xuICAgIGhvdHN3YXBNb2RlID0gSG90c3dhcE1vZGUuRkFMTF9CQUNLO1xuICB9XG5cbiAgcmV0dXJuIGhvdHN3YXBNb2RlO1xufVxuXG4vKiBjOCBpZ25vcmUgc3RhcnQgKi8gLy8gd2UgbmV2ZXIgY2FsbCB0aGlzIGluIHVuaXQgdGVzdHNcbmV4cG9ydCBmdW5jdGlvbiBjbGkoYXJnczogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpIHtcbiAgbGV0IGVycm9yOiBFcnJvckRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGV4ZWMoYXJncylcbiAgICAudGhlbihhc3luYyAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaChhc3luYyAoZXJyKSA9PiB7XG4gICAgICAvLyBMb2cgdGhlIHN0YWNrIHRyYWNlIGlmIHdlJ3JlIG9uIGEgZGV2ZWxvcGVyIHdvcmtzdGF0aW9uLiBPdGhlcndpc2UgdGhpcyB3aWxsIGJlIGludG8gYSBtaW5pZmllZFxuICAgICAgLy8gZmlsZSBhbmQgdGhlIHByaW50ZWQgY29kZSBsaW5lIGFuZCBzdGFjayB0cmFjZSBhcmUgaHVnZSBhbmQgdXNlbGVzcy5cbiAgICAgIHByZXR0eVByaW50RXJyb3IoZXJyLCBpc0RldmVsb3BlckJ1aWxkVmVyc2lvbigpKTtcbiAgICAgIGVycm9yID0ge1xuICAgICAgICBuYW1lOiBjZGtDbGlFcnJvck5hbWUoZXJyKSxcbiAgICAgIH07XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICB9KVxuICAgIC5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IENsaUlvSG9zdC5nZXQoKT8udGVsZW1ldHJ5Py5lbmQoZXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGF3YWl0IENsaUlvSG9zdC5nZXQoKT8uYXNJb0hlbHBlcigpLmRlZmF1bHRzLnRyYWNlKGBFbmRpbmcgVGVsZW1ldHJ5IGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSk7XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuIl19
|
|
824
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNENBLG9CQXVtQkM7QUF5TkQsa0JBd0JDO0FBcDRCRCxpREFBaUQsQ0FBQyxRQUFRO0FBQzFELHlDQUF5QztBQUV6QyxzREFBMkc7QUFDM0csK0JBQStCO0FBQy9CLGtDQUF3QztBQUN4QywrQ0FBMkQ7QUFDM0QsNkNBQW9EO0FBQ3BELHVEQUEwRDtBQUUxRCx1Q0FBc0M7QUFDdEMsaUZBQTJFO0FBQzNFLDJEQUErRDtBQUMvRCw2REFBd0Q7QUFDeEQsK0NBQW1EO0FBQ25ELG1FQUE2RDtBQUM3RCw2Q0FBb0Q7QUFHcEQsNkRBQXFEO0FBQ3JELG9EQUFnRDtBQUNoRCx1Q0FBcUY7QUFDckYsdURBQW1EO0FBRW5ELGdDQUFxRjtBQUNyRiw4Q0FBaUc7QUFFakcsZ0RBQWdEO0FBQ2hELG9EQUFpRDtBQUNqRCw0Q0FBNkM7QUFFN0MsaURBQWdFO0FBQ2hFLDJDQUF3QztBQUN4QywrQ0FBNEM7QUFDNUMsbURBQTZEO0FBQzdELDJDQUFvRTtBQUNwRSxtREFBNEQ7QUFDNUQsaURBQXlEO0FBQ3pELG9DQUF3RDtBQUV4RCx3RUFBa0U7QUFDbEUsa0NBQWlDO0FBQ2pDLG9EQUFnRDtBQUV6QyxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQWMsRUFBRSxXQUF5QjtJQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsd0RBQXlCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFBLCtCQUFvQixFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBRXJFLCtCQUErQjtJQUMvQixpREFBaUQ7SUFDakQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQ2hDLENBQUM7U0FBTSxJQUFJ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QUNqRCxLQUFLLEdBQUc7WUFDTixJQUFJLEVBQUUsSUFBQSx1QkFBZSxFQUFDLEdBQUcsQ0FBQztTQUMzQixDQUFDO1FBQ0YsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO1NBQ0QsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xCLElBQUksQ0FBQztZQUNILE1BQU0sbUJBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sbUJBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Qsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqLyAvLyB5YXJnc1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgQ2hhbmdlU2V0RGVwbG95bWVudCwgRGVwbG95bWVudE1ldGhvZCwgRGlyZWN0RGVwbG95bWVudCwgU3RhY2tTZWxlY3RvciBhcyBMaWJTdGFja1NlbGVjdG9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgRXhwYW5kU3RhY2tTZWxlY3Rpb24sIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3ksIFRvb2xraXRFcnJvciwgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IGd1ZXNzTGFuZ3VhZ2UgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IENka1Rvb2xraXQsIEFzc2V0QnVpbGRUaW1lIH0gZnJvbSAnLi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBjaVN5c3RlbUlzU3RkRXJyU2FmZSB9IGZyb20gJy4vY2ktc3lzdGVtcyc7XG5pbXBvcnQgeyBkaXNwbGF5VmVyc2lvbk1lc3NhZ2UgfSBmcm9tICcuL2Rpc3BsYXktdmVyc2lvbic7XG5pbXBvcnQgdHlwZSB7IElvTWVzc2FnZUxldmVsIH0gZnJvbSAnLi9pby1ob3N0JztcbmltcG9ydCB7IENsaUlvSG9zdCB9IGZyb20gJy4vaW8taG9zdCc7XG5pbXBvcnQgeyBwYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzIH0gZnJvbSAnLi9wYXJzZS1jb21tYW5kLWxpbmUtYXJndW1lbnRzJztcbmltcG9ydCB7IGNoZWNrRm9yUGxhdGZvcm1XYXJuaW5ncyB9IGZyb20gJy4vcGxhdGZvcm0td2FybmluZ3MnO1xuaW1wb3J0IHsgcHJldHR5UHJpbnRFcnJvciB9IGZyb20gJy4vcHJldHR5LXByaW50LWVycm9yJztcbmltcG9ydCB7IFByb3h5QWdlbnRQcm92aWRlciB9IGZyb20gJy4vcHJveHktYWdlbnQnO1xuaW1wb3J0IHsgR0xPQkFMX1BMVUdJTl9IT1NUIH0gZnJvbSAnLi9zaW5nbGV0b24tcGx1Z2luLWhvc3QnO1xuaW1wb3J0IHsgY2RrQ2xpRXJyb3JOYW1lIH0gZnJvbSAnLi90ZWxlbWV0cnkvZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBFcnJvckRldGFpbHMgfSBmcm9tICcuL3RlbGVtZXRyeS9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi91c2VyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vdXNlci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHRyYXBFcnJvcnMgfSBmcm9tICcuL3V0aWwvdHJhcC1lcnJvcnMnO1xuaW1wb3J0IHsgaXNEZXZlbG9wZXJCdWlsZFZlcnNpb24sIHZlcnNpb25XaXRoQnVpbGQsIHZlcnNpb25OdW1iZXIgfSBmcm9tICcuL3ZlcnNpb24nO1xuaW1wb3J0IHsgYXNJb0hlbHBlciB9IGZyb20gJy4uLy4uL2xpYi9hcGktcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElSZWFkTG9jayB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBUb29sa2l0SW5mbywgTm90aWNlcywgbG9hZFRyZWUsIGZpbmRDb25zdHJ1Y3RMaWJyYXJ5VmVyc2lvbiB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBTZGtQcm92aWRlciwgSW9Ib3N0U2RrTG9nZ2VyLCBzZXRTZGtUcmFjaW5nLCBzZGtSZXF1ZXN0SGFuZGxlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aCc7XG5pbXBvcnQgdHlwZSB7IEJvb3RzdHJhcFNvdXJjZSB9IGZyb20gJy4uL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVyIH0gZnJvbSAnLi4vYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBEZXBsb3ltZW50cyB9IGZyb20gJy4uL2FwaS9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBIb3Rzd2FwTW9kZSB9IGZyb20gJy4uL2FwaS9ob3Rzd2FwJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3MgfSBmcm9tICcuLi9hcGkvc2V0dGluZ3MnO1xuaW1wb3J0IHsgY29udGV4dEhhbmRsZXIgYXMgY29udGV4dCB9IGZyb20gJy4uL2NvbW1hbmRzL2NvbnRleHQnO1xuaW1wb3J0IHsgZG9jcyB9IGZyb20gJy4uL2NvbW1hbmRzL2RvY3MnO1xuaW1wb3J0IHsgZG9jdG9yIH0gZnJvbSAnLi4vY29tbWFuZHMvZG9jdG9yJztcbmltcG9ydCB7IEZsYWdDb21tYW5kSGFuZGxlciB9IGZyb20gJy4uL2NvbW1hbmRzL2ZsYWdzL2ZsYWdzJztcbmltcG9ydCB7IGNsaUluaXQsIHByaW50QXZhaWxhYmxlVGVtcGxhdGVzIH0gZnJvbSAnLi4vY29tbWFuZHMvaW5pdCc7XG5pbXBvcnQgeyBnZXRMYW5ndWFnZUZyb21BbGlhcyB9IGZyb20gJy4uL2NvbW1hbmRzL2xhbmd1YWdlJztcbmltcG9ydCB7IGdldE1pZ3JhdGVTY2FuVHlwZSB9IGZyb20gJy4uL2NvbW1hbmRzL21pZ3JhdGUnO1xuaW1wb3J0IHsgZXhlY1Byb2dyYW0sIENsb3VkRXhlY3V0YWJsZSB9IGZyb20gJy4uL2N4YXBwJztcbmltcG9ydCB0eXBlIHsgU3RhY2tTZWxlY3RvciwgU3ludGhlc2l6ZXIgfSBmcm9tICcuLi9jeGFwcCc7XG5pbXBvcnQgeyBmaW5kVW5rbm93bk9wdGlvbnMgfSBmcm9tICcuL3V0aWwvY2hlY2stdW5rbm93bi1vcHRpb25zJztcbmltcG9ydCB7IGlzQ0kgfSBmcm9tICcuL3V0aWwvY2knO1xuaW1wb3J0IHsgZ3Vlc3NBZ2VudCB9IGZyb20gJy4vdXRpbC9ndWVzcy1hZ2VudCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKGFyZ3M6IHN0cmluZ1tdLCBzeW50aGVzaXplcj86IFN5bnRoZXNpemVyKTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7XG4gIGNvbnN0IGFyZ3YgPSBhd2FpdCBwYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzKGFyZ3MpO1xuICBhcmd2Lmxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2VGcm9tQWxpYXMoYXJndi5sYW5ndWFnZSkgPz8gYXJndi5sYW5ndWFnZTtcblxuICAvLyBIYW5kbGUgY29sb3Igb3V0cHV0IHNldHRpbmdzXG4gIC8vIFByaW9yaXR5OiAtLW5vLWNvbG9yID4gLS1jb2xvciA+IFRUWSBkZXRlY3Rpb25cbiAgaWYgKGFyZ3Yubm9Db2xvcikge1xuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzAnO1xuICB9IGVsc2UgaWYgKGFyZ3YuY29sb3IpIHtcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9ICczJztcbiAgfSBlbHNlIGlmICghcHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yOiBkaXNhYmxlIGNvbG9ycyBmb3Igbm9uLVRUWVxuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzAnO1xuICB9XG5cbiAgY29uc3QgY21kID0gYXJndi5fWzBdO1xuXG4gIC8vIGlmIG9uZSAtdiwgbG9nIGF0IGEgREVCVUcgbGV2ZWxcbiAgLy8gaWYgMiAtdiwgbG9nIGF0IGEgVFJBQ0UgbGV2ZWxcbiAgbGV0IGlvTWVzc2FnZUxldmVsOiBJb01lc3NhZ2VMZXZlbCA9ICdpbmZvJztcbiAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgIHN3aXRjaCAoYXJndi52ZXJib3NlKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlvTWVzc2FnZUxldmVsID0gJ2RlYnVnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpb01lc3NhZ2VMZXZlbCA9ICd0cmFjZSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlvSG9zdCA9IENsaUlvSG9zdC5pbnN0YW5jZSh7XG4gICAgbG9nTGV2ZWw6IGlvTWVzc2FnZUxldmVsLFxuICAgIGlzVFRZOiBwcm9jZXNzLnN0ZG91dC5pc1RUWSxcbiAgICBpc0NJOiBCb29sZWFuKGFyZ3YuY2kpLFxuICAgIGN1cnJlbnRBY3Rpb246IGNtZCxcbiAgICBzdGFja1Byb2dyZXNzOiBhcmd2LnByb2dyZXNzLFxuICAgIGF1dG9SZXNwb25kOiBhcmd2LnllcyxcbiAgfSwgdHJ1ZSk7XG4gIGNvbnN0IGlvSGVscGVyID0gYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSk7XG5cbiAgLy8gSWYgdXNlcnMgcmVxdWVzdCBkZWJ1ZyBpbmZvcm1hdGlvbiAod2hpY2ggc3dpdGNoZXMgb24gQ0RLX0RFQlVHPTEgdG8gZ2V0IHRoZVxuICAvLyBDREsgYXBwIHRvIGVtaXQgbW9yZSBpbmZvcm1hdGlvbiksIHRoZXkgcHJvYmFibHkgYXJlIHRyb3VibGVzaG9vdGluZyBhbmQgd2UndmVcbiAgLy8gaGlzdG9yaWNhbGx5IGRlY2lkZWQgdGhleSB0aGVuIHdhbnQgbW9yZSBsb2dnaW5nIGZyb20gdGhlIENMSSBhcyB3ZWxsLlxuICAvLyBUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGdldCB0aGUgQ0RLIHRvIGVtaXQgdHJhY2luZyBpbmZvcm1hdGlvbiB0aGF0XG4gIC8vIGRvZXMgbm90IGNhdXNlIHRoZSBDTEkgdG8gYmFyZiBsb2dzIHRvIHRoZSBjb25zb2xlLlxuICBzZXRTZGtUcmFjaW5nKGFyZ3YuZGVidWcgfHwgYXJndi52ZXJib3NlID4gMik7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjaGVja0ZvclBsYXRmb3JtV2FybmluZ3MoaW9IZWxwZXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKGBFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgcGxhdGZvcm0gd2FybmluZ3M6ICR7ZX1gKTtcbiAgfVxuXG4gIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZygnQ0RLIFRvb2xraXQgQ0xJIHZlcnNpb246JywgdmVyc2lvbldpdGhCdWlsZCgpKTtcbiAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKCdDb21tYW5kIGxpbmUgYXJndW1lbnRzOicsIGFyZ3YpO1xuXG4gIGNvbnN0IHVua25vd25PcHRpb25zID0gZmluZFVua25vd25PcHRpb25zKGFyZ3YpO1xuICBpZiAodW5rbm93bk9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHVua25vd25PcHRpb25zLm1hcCgobykgPT4gYC0tJHtvfWApLmpvaW4oJywgJyk7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLndhcm4oYFVua25vd24gb3B0aW9uKHMpOiAke2Zvcm1hdHRlZH0uIFRoZXNlIHdpbGwgYmUgaWdub3JlZC4gUnVuICdjZGsgLS1oZWxwJyB0byBzZWUgYXZhaWxhYmxlIG9wdGlvbnMuYCk7XG4gIH1cblxuICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgQ29uZmlndXJhdGlvbi5mcm9tQXJnc0FuZEZpbGVzKGlvSGVscGVyLFxuICAgIHtcbiAgICAgIGNvbW1hbmRMaW5lQXJndW1lbnRzOiB7XG4gICAgICAgIC4uLmFyZ3YsXG4gICAgICAgIF86IGFyZ3YuXyBhcyBbQ29tbWFuZCwgLi4uc3RyaW5nW11dLCAvLyBUeXBlU2NyaXB0IGF0IGl0cyBiZXN0XG4gICAgICB9LFxuICAgIH0pO1xuXG4gIC8vIEFsd2F5cyBjcmVhdGUgYW5kIHVzZSBQcm94eUFnZW50IHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiB2aWEgZW52IHZhcnNcbiAgY29uc3QgcHJveHlBZ2VudCA9IGF3YWl0IG5ldyBQcm94eUFnZW50UHJvdmlkZXIoaW9IZWxwZXIpLmNyZWF0ZSh7XG4gICAgcHJveHlBZGRyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb3h5J10pLFxuICAgIGNhQnVuZGxlUGF0aDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydjYUJ1bmRsZVBhdGgnXSksXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaW9Ib3N0LnN0YXJ0VGVsZW1ldHJ5KGFyZ3YsIGNvbmZpZ3VyYXRpb24uY29udGV4dCwgcHJveHlBZ2VudCk7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGF3YWl0IGlvSG9zdC5hc0lvSGVscGVyKCkuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBpbnN0YW50aWF0aW9uIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hMYW5ndWFnZShhd2FpdCBndWVzc0xhbmd1YWdlKHByb2Nlc3MuY3dkKCkpKTtcbiAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoQWdlbnQoZ3Vlc3NBZ2VudCgpKTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGRpc3BsYXlpbmcgKGFuZCByZWZyZXNoaW5nKSBub3RpY2VzIG9uIGFsbCBjb21tYW5kcy5cbiAgICpcbiAgICogSWYgdGhlIHVzZXIgZGlkbid0IHN1cHBseSBlaXRoZXIgYC0tbm90aWNlc2Agb3IgYC0tbm8tbm90aWNlc2AsIHdlIGRvXG4gICAqIGF1dG9kZXRlY3Rpb24uIFRoZSBhdXRvZGV0ZWN0aW9uIGN1cnJlbnRseSBpczogZG8gd3JpdGUgbm90aWNlcyBpZiB3ZSBhcmVcbiAgICogbm90IG9uIENJLCBvciBhcmUgb24gYSBDSSBzeXN0ZW0gd2hlcmUgd2Uga25vdyB0aGF0IHdyaXRpbmcgdG8gc3RkZXJyIGlzXG4gICAqIHNhZmUuIFdlIGZhaWwgXCJjbG9zZWRcIjsgdGhhdCBpcywgd2UgZGVjaWRlIHRvIE5PVCBwcmludCBmb3IgdW5rbm93biBDSVxuICAgKiBzeXN0ZW1zLCBldmVuIHRob3VnaCB0ZWNobmljYWxseSB3ZSBtYXliZSBjb3VsZC5cbiAgICovXG4gIGNvbnN0IGlzU2FmZVRvV3JpdGVOb3RpY2VzID0gIWlzQ0koKSB8fCBCb29sZWFuKGNpU3lzdGVtSXNTdGRFcnJTYWZlKCkpO1xuXG4gIC8vIERldGVybWluZSBpZiBub3RpY2VzIHNob3VsZCBiZSBkaXNwbGF5ZWQgYmFzZWQgb24gQ0xJIGFyZ3MgYW5kIGNvbmZpZ3VyYXRpb25cbiAgbGV0IHNob3VsZERpc3BsYXlOb3RpY2VzOiBib29sZWFuO1xuICBpZiAoYXJndi5ub3RpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBDTEkgYXJndW1lbnQgdGFrZXMgcHJlY2VkZW5jZVxuICAgIHNob3VsZERpc3BsYXlOb3RpY2VzID0gYXJndi5ub3RpY2VzO1xuICB9IGVsc2Uge1xuICAgIC8vIEZhbGwgYmFjayB0byBjb25maWd1cmF0aW9uIGZpbGUgc2V0dGluZywgdGhlbiBhdXRvZGV0ZWN0aW9uXG4gICAgY29uc3QgY29uZmlnTm90aWNlcyA9IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnbm90aWNlcyddKTtcbiAgICBpZiAoY29uZmlnTm90aWNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDb25zaWRlciBzdHJpbmcgXCJmYWxzZVwiIHRvIGJlIGZhbHN5IGluIHRoaXMgY29udGV4dFxuICAgICAgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBjb25maWdOb3RpY2VzICE9PSAnZmFsc2UnICYmIEJvb2xlYW4oY29uZmlnTm90aWNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgYXV0b2RldGVjdGlvbiBiZWhhdmlvclxuICAgICAgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBpc1NhZmVUb1dyaXRlTm90aWNlcztcbiAgICB9XG4gIH1cblxuICAvLyBOb3RpY2VzIGVpdGhlciBnbyB0byBzdGRlcnIsIG9yIG5vd2hlcmVcbiAgaW9Ib3N0Lm5vdGljZXNEZXN0aW5hdGlvbiA9IHNob3VsZERpc3BsYXlOb3RpY2VzID8gJ3N0ZGVycicgOiAnZHJvcCc7XG4gIGNvbnN0IG5vdGljZXMgPSBOb3RpY2VzLmNyZWF0ZSh7XG4gICAgaW9Ib3N0LFxuICAgIGNvbnRleHQ6IGNvbmZpZ3VyYXRpb24uY29udGV4dCxcbiAgICBvdXRwdXQ6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnb3V0ZGlyJ10pLFxuICAgIGxhbmd1YWdlOiBhd2FpdCBndWVzc0xhbmd1YWdlKHByb2Nlc3MuY3dkKCkpLFxuICAgIGh0dHBPcHRpb25zOiB7IGFnZW50OiBwcm94eUFnZW50IH0sXG4gICAgY2xpVmVyc2lvbjogdmVyc2lvbk51bWJlcigpLFxuICB9KTtcbiAgY29uc3QgcmVmcmVzaE5vdGljZXMgPSAoYXN5bmMgKCkgPT4ge1xuICAgIC8vIHRoZSBjZGsgbm90aWNlcyBjb21tYW5kIGhhcyBpdCdzIG93biByZWZyZXNoXG4gICAgaWYgKHNob3VsZERpc3BsYXlOb3RpY2VzICYmIGNtZCAhPT0gJ25vdGljZXMnKSB7XG4gICAgICBhd2FpdCB0cmFwRXJyb3JzKGlvSGVscGVyLCAnQ291bGQgbm90IHJlZnJlc2ggbm90aWNlcycsICgpID0+IG5vdGljZXMucmVmcmVzaCgpKTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgY29uc3Qgc2RrUHJvdmlkZXIgPSBhd2FpdCBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHtcbiAgICBpb0hlbHBlcixcbiAgICByZXF1ZXN0SGFuZGxlcjogc2RrUmVxdWVzdEhhbmRsZXIocHJveHlBZ2VudCksXG4gICAgbG9nZ2VyOiBuZXcgSW9Ib3N0U2RrTG9nZ2VyKGFzSW9IZWxwZXIoaW9Ib3N0LCBpb0hvc3QuY3VycmVudEFjdGlvbiBhcyBhbnkpKSxcbiAgICBwbHVnaW5Ib3N0OiBHTE9CQUxfUExVR0lOX0hPU1QsXG4gIH0sIGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZmlsZSddKSwgY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyZWdpb24nXSkpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoUmVnaW9uKHNka1Byb3ZpZGVyLmRlZmF1bHRSZWdpb24pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBhd2FpdCBpb0hvc3QuYXNJb0hlbHBlcigpLmRlZmF1bHRzLnRyYWNlKGBUZWxlbWV0cnkgYXR0YWNoIHJlZ2lvbiBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG5cbiAgbGV0IG91dERpckxvY2s6IElSZWFkTG9jayB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2xvdWRFeGVjdXRhYmxlID0gbmV3IENsb3VkRXhlY3V0YWJsZSh7XG4gICAgY29uZmlndXJhdGlvbixcbiAgICBzZGtQcm92aWRlcixcbiAgICBzeW50aGVzaXplcjpcbiAgICAgIHN5bnRoZXNpemVyID8/XG4gICAgICAoYXN5bmMgKGF3cywgY29uZmlnKSA9PiB7XG4gICAgICAgIC8vIEludm9rZSAnZXhlY1Byb2dyYW0nLCBhbmQgY29weSB0aGUgbG9jayBmb3IgdGhlIGRpcmVjdG9yeSBpbiB0aGUgZ2xvYmFsXG4gICAgICAgIC8vIHZhcmlhYmxlIGhlcmUuIEl0IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgQ0xJIGV4aXRzLiBMb2NrcyBhcmUgbm90IHJlLWVudHJhbnRcbiAgICAgICAgLy8gc28gcmVsZWFzZSBpdCBpZiB3ZSBoYXZlIHRvIHN5bnRoZXNpemUgbW9yZSB0aGFuIG9uY2UgKGJlY2F1c2Ugb2YgY29udGV4dCBsb29rdXBzKS5cbiAgICAgICAgYXdhaXQgb3V0RGlyTG9jaz8ucmVsZWFzZSgpO1xuICAgICAgICBjb25zdCB7IGFzc2VtYmx5LCBsb2NrLCBwZXJmQ291bnRlcnMgfSA9IGF3YWl0IGV4ZWNQcm9ncmFtKGF3cywgaW9Ib3N0LmFzSW9IZWxwZXIoKSwgY29uZmlnKTtcbiAgICAgICAgb3V0RGlyTG9jayA9IGxvY2s7XG5cbiAgICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGxvYWRUcmVlKGFzc2VtYmx5LCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZS5iaW5kKGlvSGVscGVyLmRlZmF1bHRzKSk7XG4gICAgICAgIGlmICh0cmVlKSB7XG4gICAgICAgICAgY29uc3QgdiA9IGZpbmRDb25zdHJ1Y3RMaWJyYXJ5VmVyc2lvbih0cmVlKTtcbiAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoQ2RrTGliVmVyc2lvbih2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGVyZkNvdW50ZXJzKSB7XG4gICAgICAgICAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoQ291bnRlcnNUb05leHRFdmVudChwZXJmQ291bnRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzc2VtYmx5O1xuICAgICAgfSksXG4gICAgaW9IZWxwZXI6IGlvSG9zdC5hc0lvSGVscGVyKCksXG4gIH0pO1xuXG4gIC8qKiBGdW5jdGlvbiB0byBsb2FkIHBsdWctaW5zLCB1c2luZyBjb25maWd1cmF0aW9ucyBhZGRpdGl2ZWx5LiAqL1xuICBhc3luYyBmdW5jdGlvbiBsb2FkUGx1Z2lucyguLi5zZXR0aW5nczogU2V0dGluZ3NbXSkge1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCBwbHVnaW5zOiBzdHJpbmdbXSA9IHNvdXJjZS5nZXQoWydwbHVnaW4nXSkgfHwgW107XG4gICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKSB7XG4gICAgICAgIGF3YWl0IEdMT0JBTF9QTFVHSU5fSE9TVC5sb2FkKHBsdWdpbiwgaW9Ib3N0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhd2FpdCBsb2FkUGx1Z2lucyhjb25maWd1cmF0aW9uLnNldHRpbmdzKTtcblxuICBpZiAoKHR5cGVvZiBjbWQpICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ludmFsaWRBcmdUeXBlJywgYEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZy4gR290OiAke2NtZH0gKCR7dHlwZW9mIGNtZH0pYCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBtYWluKGNtZCwgYXJndik7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gSWYgd2UgbG9ja2VkIHRoZSAnY2RrLm91dCcgZGlyZWN0b3J5LCByZWxlYXNlIGl0IGhlcmUuXG4gICAgYXdhaXQgb3V0RGlyTG9jaz8ucmVsZWFzZSgpO1xuXG4gICAgLy8gRG8gUFNBcyBoZXJlXG4gICAgYXdhaXQgZGlzcGxheVZlcnNpb25NZXNzYWdlKGlvSGVscGVyKTtcblxuICAgIGF3YWl0IHJlZnJlc2hOb3RpY2VzO1xuICAgIGlmIChjbWQgPT09ICdub3RpY2VzJykge1xuICAgICAgLy8gZG8gbm90IHRyYXAgZXJyb3JzIGhlcmVcbiAgICAgIC8vIHRoaXMgaXMgdGhlIG5vdGljZXMgY29tbWFuZCBpdHNlbGYsIGFueSBlcnJvciBzaG91bGQgYmUgbG91ZFxuICAgICAgYXdhaXQgbm90aWNlcy5yZWZyZXNoKHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICBhd2FpdCBub3RpY2VzLmRpc3BsYXkoe1xuICAgICAgICBpbmNsdWRlQWNrbm93bGVkZ2VkOiAhYXJndi51bmFja25vd2xlZGdlZCxcbiAgICAgICAgc2hvd1RvdGFsOiBhcmd2LnVuYWNrbm93bGVkZ2VkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChzaG91bGREaXNwbGF5Tm90aWNlcyAmJiBjbWQgIT09ICd2ZXJzaW9uJykge1xuICAgICAgYXdhaXQgdHJhcEVycm9ycyhpb0hlbHBlciwgJ0NvdWxkIG5vdCBkaXNwbGF5IG5vdGljZXMnLCAoKSA9PiBub3RpY2VzLmRpc3BsYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbWFpbihjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IGFueSk6IFByb21pc2U8bnVtYmVyIHwgdm9pZD4ge1xuICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gY29tbWFuZCBhcyBhbnk7XG4gICAgY29uc3QgdG9vbGtpdFN0YWNrTmFtZTogc3RyaW5nID0gVG9vbGtpdEluZm8uZGV0ZXJtaW5lTmFtZShjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRTdGFja05hbWUnXSkpO1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZyhgVG9vbGtpdCBzdGFjazogJHtjaGFsay5ib2xkKHRvb2xraXRTdGFja05hbWUpfWApO1xuXG4gICAgY29uc3QgY2xvdWRGb3JtYXRpb24gPSBuZXcgRGVwbG95bWVudHMoe1xuICAgICAgc2RrUHJvdmlkZXIsXG4gICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgaW9IZWxwZXI6IGFzSW9IZWxwZXIoaW9Ib3N0LCBpb0hvc3QuY3VycmVudEFjdGlvbiBhcyBhbnkpLFxuICAgIH0pO1xuXG4gICAgaWYgKGFyZ3MuYWxsICYmIGFyZ3MuU1RBQ0tTKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdTdGFja3NPckFsbFJlcXVpcmVkJywgJ1lvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IGEgbGlzdCBvZiBTdGFja3Mgb3IgdGhlIGAtLWFsbGAgYXJndW1lbnQnKTtcbiAgICB9XG5cbiAgICBhcmdzLlNUQUNLUyA9IGFyZ3MuU1RBQ0tTID8/IChhcmdzLlNUQUNLID8gW2FyZ3MuU1RBQ0tdIDogW10pO1xuICAgIGFyZ3MuRU5WSVJPTk1FTlRTID0gYXJncy5FTlZJUk9OTUVOVFMgPz8gW107XG5cbiAgICBjb25zdCBzZWxlY3RvcjogU3RhY2tTZWxlY3RvciA9IHtcbiAgICAgIGFsbFRvcExldmVsOiBhcmdzLmFsbCxcbiAgICAgIHBhdHRlcm5zOiBhcmdzLlNUQUNLUyxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xpID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgaW9Ib3N0LFxuICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgIGRlcGxveW1lbnRzOiBjbG91ZEZvcm1hdGlvbixcbiAgICAgIHZlcmJvc2U6IGFyZ3YudHJhY2UgfHwgYXJndi52ZXJib3NlID4gMCxcbiAgICAgIGlnbm9yZUVycm9yczogYXJndlsnaWdub3JlLWVycm9ycyddLFxuICAgICAgc3RyaWN0OiBhcmd2LnN0cmljdCxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcixcbiAgICB9KTtcblxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2NvbnRleHQnO1xuICAgICAgICByZXR1cm4gY29udGV4dCh7XG4gICAgICAgICAgaW9IZWxwZXIsXG4gICAgICAgICAgY29udGV4dDogY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgICAgICAgIGNsZWFyOiBhcmd2LmNsZWFyLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgICBmb3JjZTogYXJndi5mb3JjZSxcbiAgICAgICAgICByZXNldDogYXJndi5yZXNldCxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RvY3MnOlxuICAgICAgY2FzZSAnZG9jJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZG9jcyc7XG4gICAgICAgIHJldHVybiBkb2NzKHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBicm93c2VyOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Jyb3dzZXInXSksXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkb2N0b3InOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkb2N0b3InO1xuICAgICAgICByZXR1cm4gZG9jdG9yKHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2xzJzpcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdsaXN0JztcbiAgICAgICAgcmV0dXJuIGNsaS5saXN0KGFyZ3MuU1RBQ0tTLCB7XG4gICAgICAgICAgbG9uZzogYXJncy5sb25nLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgICBzaG93RGVwczogYXJncy5zaG93RGVwZW5kZW5jaWVzLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZGlmZic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RpZmYnO1xuICAgICAgICBjb25zdCBlbmFibGVEaWZmTm9GYWlsID0gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uLCBjeGFwaS5FTkFCTEVfRElGRl9OT19GQUlMX0NPTlRFWFQpO1xuICAgICAgICByZXR1cm4gY2xpLmRpZmYoe1xuICAgICAgICAgIHN0YWNrTmFtZXM6IGFyZ3MuU1RBQ0tTLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRlbXBsYXRlUGF0aDogYXJncy50ZW1wbGF0ZSxcbiAgICAgICAgICBzdHJpY3Q6IGFyZ3Muc3RyaWN0LFxuICAgICAgICAgIGNvbnRleHRMaW5lczogYXJncy5jb250ZXh0TGluZXMsXG4gICAgICAgICAgc2VjdXJpdHlPbmx5OiBhcmdzLnNlY3VyaXR5T25seSxcbiAgICAgICAgICBmYWlsOiBhcmdzLmZhaWwgIT0gbnVsbCA/IGFyZ3MuZmFpbCA6ICFlbmFibGVEaWZmTm9GYWlsLFxuICAgICAgICAgIGNvbXBhcmVBZ2FpbnN0UHJvY2Vzc2VkVGVtcGxhdGU6IGFyZ3MucHJvY2Vzc2VkLFxuICAgICAgICAgIHF1aWV0OiBhcmdzLnF1aWV0LFxuICAgICAgICAgIG1ldGhvZDogZGV0ZXJtaW5lRGlmZk1ldGhvZChhcmdzKSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgIGluY2x1ZGVNb3ZlczogYXJnc1snaW5jbHVkZS1tb3ZlcyddLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZHJpZnQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkcmlmdCc7XG4gICAgICAgIHJldHVybiBjbGkuZHJpZnQoe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGZhaWw6IGFyZ3MuZmFpbCxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3JlZmFjdG9yJzpcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdyZWZhY3RvcicpO1xuXG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3JlZmFjdG9yJztcbiAgICAgICAgcmV0dXJuIGNsaS5yZWZhY3Rvcih7XG4gICAgICAgICAgZHJ5UnVuOiBhcmdzLmRyeVJ1bixcbiAgICAgICAgICBvdmVycmlkZUZpbGU6IGFyZ3Mub3ZlcnJpZGVGaWxlLFxuICAgICAgICAgIHJldmVydDogYXJncy5yZXZlcnQsXG4gICAgICAgICAgc3RhY2tzOiBzZWxlY3RvcixcbiAgICAgICAgICBhZGRpdGlvbmFsU3RhY2tOYW1lczogYXJyYXlGcm9tWWFyZ3MoYXJncy5hZGRpdGlvbmFsU3RhY2tOYW1lID8/IFtdKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSA/PyBmYWxzZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdib290c3RyYXAnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdib290c3RyYXAnO1xuICAgICAgICBjb25zdCBzb3VyY2U6IEJvb3RzdHJhcFNvdXJjZSA9IGF3YWl0IGRldGVybWluZUJvb3RzdHJhcFZlcnNpb24oaW9Ib3N0LCBhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5zaG93VGVtcGxhdGUpIHtcbiAgICAgICAgICBjb25zdCBib290c3RyYXBwZXIgPSBuZXcgQm9vdHN0cmFwcGVyKHNvdXJjZSwgYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uKSk7XG4gICAgICAgICAgcmV0dXJuIGJvb3RzdHJhcHBlci5zaG93VGVtcGxhdGUoYXJncy5qc29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbGkuYm9vdHN0cmFwKGFyZ3MuRU5WSVJPTk1FTlRTLCB7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZURlcGxveW1lbnQ6IGFyZ3YuZm9yY2UsXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICBleGVjdXRlOiBhcmdzLmV4ZWN1dGUsXG4gICAgICAgICAgdGFnczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0YWdzJ10pLFxuICAgICAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbjogYXJncy50ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiBhcmdzWydwcmV2aW91cy1wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgYnVja2V0TmFtZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0b29sa2l0QnVja2V0JywgJ2J1Y2tldE5hbWUnXSksXG4gICAgICAgICAgICBrbXNLZXlJZDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0b29sa2l0QnVja2V0JywgJ2ttc0tleUlkJ10pLFxuICAgICAgICAgICAgY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXk6IGFyZ3MuYm9vdHN0cmFwQ3VzdG9tZXJLZXksXG4gICAgICAgICAgICBxdWFsaWZpZXI6IGFyZ3MucXVhbGlmaWVyID8/IGNvbmZpZ3VyYXRpb24uY29udGV4dC5nZXQoJ0Bhd3MtY2RrL2NvcmU6Ym9vdHN0cmFwUXVhbGlmaWVyJyksXG4gICAgICAgICAgICBwdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb246IGFyZ3MucHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuZXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnksXG4gICAgICAgICAgICBjdXN0b21QZXJtaXNzaW9uc0JvdW5kYXJ5OiBhcmd2LmN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3QpLFxuICAgICAgICAgICAgdHJ1c3RlZEFjY291bnRzRm9yTG9va3VwOiBhcnJheUZyb21ZYXJncyhhcmdzLnRydXN0Rm9yTG9va3VwKSxcbiAgICAgICAgICAgIHVudHJ1c3RlZEFjY291bnRzOiBhcnJheUZyb21ZYXJncyhhcmdzLnVudHJ1c3QpLFxuICAgICAgICAgICAgY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llczogYXJyYXlGcm9tWWFyZ3MoYXJncy5jbG91ZGZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzKSxcbiAgICAgICAgICAgIGRlbnlFeHRlcm5hbElkOiBhcmdzLmRlbnlFeHRlcm5hbElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkZXBsb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXBsb3knO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJNYXA6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGFyZ3MucGFyYW1ldGVycykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSAocGFyYW1ldGVyIGFzIHN0cmluZykuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcFtrZXlWYWx1ZVswXV0gPSBrZXlWYWx1ZS5zbGljZSgxKS5qb2luKCc9Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MuZXhlY3V0ZSAhPT0gdW5kZWZpbmVkICYmIGFyZ3MubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDb25mbGljdGluZ0V4ZWN1dGVBbmRNZXRob2QnLCAnQ2FuIG5vdCBzdXBwbHkgYm90aCAtLVtuby1dZXhlY3V0ZSBhbmQgLS1tZXRob2QgYXQgdGhlIHNhbWUgdGltZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5kZXBsb3koe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnM6IGFyZ3Mubm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncmVxdWlyZUFwcHJvdmFsJ10pLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgdGFnczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0YWdzJ10pLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IGRldGVybWluZURlcGxveW1lbnRNZXRob2QoYXJncywgY29uZmlndXJhdGlvbiksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVyTWFwLFxuICAgICAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogYXJnc1sncHJldmlvdXMtcGFyYW1ldGVycyddLFxuICAgICAgICAgIG91dHB1dHNGaWxlOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ291dHB1dHNGaWxlJ10pLFxuICAgICAgICAgIHByb2dyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2dyZXNzJ10pLFxuICAgICAgICAgIGNpOiBhcmdzLmNpLFxuICAgICAgICAgIHJvbGxiYWNrOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JvbGxiYWNrJ10pLFxuICAgICAgICAgIHdhdGNoOiBhcmdzLndhdGNoLFxuICAgICAgICAgIHRyYWNlTG9nczogYXJncy5sb2dzLFxuICAgICAgICAgIGNvbmN1cnJlbmN5OiBhcmdzLmNvbmN1cnJlbmN5LFxuICAgICAgICAgIGFzc2V0UGFyYWxsZWxpc206IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRQYXJhbGxlbGlzbSddKSxcbiAgICAgICAgICBhc3NldEJ1aWxkQ29uY3VycmVuY3k6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRCdWlsZENvbmN1cnJlbmN5J10pLFxuICAgICAgICAgIGFzc2V0QnVpbGRUaW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Fzc2V0UHJlYnVpbGQnXSlcbiAgICAgICAgICAgID8gQXNzZXRCdWlsZFRpbWUuQUxMX0JFRk9SRV9ERVBMT1lcbiAgICAgICAgICAgIDogQXNzZXRCdWlsZFRpbWUuSlVTVF9JTl9USU1FLFxuICAgICAgICAgIGlnbm9yZU5vU3RhY2tzOiBhcmdzLmlnbm9yZU5vU3RhY2tzLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZGlhZ25vc2UnOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ2RpYWdub3NlJyk7XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RpYWdub3NlJztcblxuICAgICAgICAvLyBJbXBsaWNpdGx5IHN3aXRjaCAnZGVidWcnIG1vZGUgdG8gdHJ1ZSwgdGhhdCBpcyBnb2luZyB0byBiZSBtb3N0IHVzZWZ1bC5cbiAgICAgICAgY29uZmlndXJhdGlvbi5zZXR0aW5ncy50ZW1wb3JhcmlseU11dGFibGUoKHNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgc2V0dGluZ3Muc2V0KFsnZGVidWcnXSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjbGkuZGlhZ25vc2Uoe1xuICAgICAgICAgIHN0YWNrczogc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KGFyZ3MuU1RBQ0tTKSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiBhcmdzLnRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3JvbGxiYWNrJztcbiAgICAgICAgcmV0dXJuIGNsaS5yb2xsYmFjayh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgdmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb246IGFyZ3NbJ3ZhbGlkYXRlLWJvb3RzdHJhcC12ZXJzaW9uJ10sXG4gICAgICAgICAgb3JwaGFuTG9naWNhbElkczogYXJncy5vcnBoYW4sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwdWJsaXNoLWFzc2V0cyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3B1Ymxpc2gtYXNzZXRzJztcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdwdWJsaXNoLWFzc2V0cycpO1xuXG4gICAgICAgIHJldHVybiBjbGkucHVibGlzaEFzc2V0cyh7XG4gICAgICAgICAgc3RhY2tzOiBjb252ZXJ0U3RhY2tTZWxlY3RvcihzZWxlY3RvciwgYXJncy5leGNsdXNpdmVseSksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdvcnBoYW4nOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ29ycGhhbicpO1xuXG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ29ycGhhbic7XG4gICAgICAgIHJldHVybiBjbGkub3JwaGFuKHtcbiAgICAgICAgICBjb25zdHJ1Y3RQYXRoOiBhcmdzLlBBVEhTID8/IFtdLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnaW1wb3J0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnaW1wb3J0JztcbiAgICAgICAgcmV0dXJuIGNsaS5pbXBvcnQoe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICAgICAgZXhlY3V0ZTogYXJncy5leGVjdXRlLFxuICAgICAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgcmVjb3JkUmVzb3VyY2VNYXBwaW5nOiBhcmdzWydyZWNvcmQtcmVzb3VyY2UtbWFwcGluZyddLFxuICAgICAgICAgIHJlc291cmNlTWFwcGluZ0ZpbGU6IGFyZ3NbJ3Jlc291cmNlLW1hcHBpbmcnXSxcbiAgICAgICAgICByZXNvdXJjZU1hcHBpbmdJbmxpbmU6IGFyZ3NbJ3Jlc291cmNlLW1hcHBpbmctaW5saW5lJ10sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICd3YXRjaCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3dhdGNoJztcbiAgICAgICAgYXdhaXQgY2xpLndhdGNoKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICByZXVzZUFzc2V0czogYXJnc1snYnVpbGQtZXhjbHVkZSddLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IGRldGVybWluZURlcGxveW1lbnRNZXRob2QoYXJncywgY29uZmlndXJhdGlvbiwgdHJ1ZSksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgdHJhY2VMb2dzOiBhcmdzLmxvZ3MsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXN0cm95JztcbiAgICAgICAgcmV0dXJuIGNsaS5kZXN0cm95KHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdnYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2djJztcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdnYycpO1xuICAgICAgICBpZiAoYXJncy5ib290c3RyYXBTdGFja05hbWUpIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignLS1ib290c3RyYXAtc3RhY2stbmFtZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBnYyBpcyBHQS4gVXNlIC0tdG9vbGtpdC1zdGFjay1uYW1lLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJvbGVBcm4gaXMgZGVmaW5lZCBmb3Igd2hlbiBjbG91ZGZvcm1hdGlvbiBpcyBpbnZva2VkXG4gICAgICAgIC8vIFRoaXMgY29uZmxpY3RzIHdpdGggZGlyZWN0IHNkayBjYWxscyBleGlzdGluZyBpbiB0aGUgZ2MgY29tbWFuZCB0byBzMyBhbmQgZWNyXG4gICAgICAgIGlmIChhcmdzLnJvbGVBcm4pIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignVGhlIC0tcm9sZS1hcm4gb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBnYyBjb21tYW5kIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsaS5nYXJiYWdlQ29sbGVjdChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgdHlwZTogYXJncy50eXBlLFxuICAgICAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogYXJnc1sncm9sbGJhY2stYnVmZmVyLWRheXMnXSxcbiAgICAgICAgICBjcmVhdGVkQnVmZmVyRGF5czogYXJnc1snY3JlYXRlZC1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogYXJncy50b29sa2l0U3RhY2tOYW1lID8/IGFyZ3MuYm9vdHN0cmFwU3RhY2tOYW1lLFxuICAgICAgICAgIGNvbmZpcm06IGFyZ3MuY29uZmlybSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZsYWdzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZmxhZ3MnO1xuXG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZmxhZ3MnKTtcblxuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IFRvb2xraXQoe1xuICAgICAgICAgIGlvSG9zdCxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHVuc3RhYmxlRmVhdHVyZXM6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndW5zdGFibGUnXSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmbGFnc0RhdGEgPSBhd2FpdCB0b29sa2l0LmZsYWdzKGNsb3VkRXhlY3V0YWJsZSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgRmxhZ0NvbW1hbmRIYW5kbGVyKGZsYWdzRGF0YSwgaW9IZWxwZXIsIGFyZ3MsIHRvb2xraXQsIGNvbmZpZ3VyYXRpb24uY29udGV4dC5hbGwpO1xuICAgICAgICByZXR1cm4gaGFuZGxlci5wcm9jZXNzRmxhZ3NDb21tYW5kKCk7XG5cbiAgICAgIGNhc2UgJ3N5bnRoZXNpemUnOlxuICAgICAgY2FzZSAnc3ludGgnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdzeW50aCc7XG4gICAgICAgIGNvbnN0IHF1aWV0ID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydxdWlldCddKSA/PyBhcmdzLnF1aWV0O1xuICAgICAgICBpZiAoYXJncy5leGNsdXNpdmVseSkge1xuICAgICAgICAgIHJldHVybiBjbGkuc3ludGgoYXJncy5TVEFDS1MsIGFyZ3MuZXhjbHVzaXZlbHksIHF1aWV0LCBhcmdzLnZhbGlkYXRpb24sIGFyZ3YuanNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aChhcmdzLlNUQUNLUywgdHJ1ZSwgcXVpZXQsIGFyZ3MudmFsaWRhdGlvbiwgYXJndi5qc29uKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdub3RpY2VzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnbm90aWNlcyc7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrcyBmb3Igbm90aWNlcywgdGhleSBhcmUgbm93IHRoZSBwcmltYXJ5IG91dHB1dFxuICAgICAgICAvLyBvZiB0aGUgY29tbWFuZCBhbmQgdGhleSBzaG91bGQgZ28gdG8gc3Rkb3V0LlxuICAgICAgICBpb0hvc3Qubm90aWNlc0Rlc3RpbmF0aW9uID0gJ3N0ZG91dCc7XG5cbiAgICAgICAgLy8gVGhpcyBpcyBhIHZhbGlkIGNvbW1hbmQsIGJ1dCB3ZSdyZSBwb3N0cG9uaW5nIGl0cyBleGVjdXRpb24gYmVjYXVzZSBkaXNwbGF5aW5nXG4gICAgICAgIC8vIG5vdGljZXMgYXV0b21hdGljYWxseSBoYXBwZW5zIGFmdGVyIGV2ZXJ5IGNvbW1hbmQuXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnbWV0YWRhdGEnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtZXRhZGF0YSc7XG4gICAgICAgIHJldHVybiBjbGkubWV0YWRhdGEoYXJncy5TVEFDSywgYXJndi5qc29uKTtcblxuICAgICAgY2FzZSAnYWNrbm93bGVkZ2UnOlxuICAgICAgY2FzZSAnYWNrJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnbm90aWNlcyc7XG4gICAgICAgIHJldHVybiBjbGkuYWNrbm93bGVkZ2UoYXJncy5JRCk7XG5cbiAgICAgIGNhc2UgJ2NsaS10ZWxlbWV0cnknOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdjbGktdGVsZW1ldHJ5JztcbiAgICAgICAgaWYgKGFyZ3MuZW5hYmxlID09PSB1bmRlZmluZWQgJiYgYXJncy5kaXNhYmxlID09PSB1bmRlZmluZWQgJiYgYXJncy5zdGF0dXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1RlbGVtZXRyeUFyZ1JlcXVpcmVkJywgJ011c3Qgc3BlY2lmeSBcXCctLWVuYWJsZVxcJywgXFwnLS1kaXNhYmxlXFwnLCBvciBcXCctLXN0YXR1c1xcJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3Muc3RhdHVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5jbGlUZWxlbWV0cnlTdGF0dXMoYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZW5hYmxlID0gYXJncy5lbmFibGUgPz8gIWFyZ3MuZGlzYWJsZTtcbiAgICAgICAgICByZXR1cm4gY2xpLmNsaVRlbGVtZXRyeShlbmFibGUpO1xuICAgICAgICB9XG4gICAgICBjYXNlICdpbml0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnaW5pdCc7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydsYW5ndWFnZSddKTtcbiAgICAgICAgaWYgKGFyZ3MubGlzdCkge1xuICAgICAgICAgIHJldHVybiBwcmludEF2YWlsYWJsZVRlbXBsYXRlcyhpb0hlbHBlciwgbGFuZ3VhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEdhdGUgY3VzdG9tIHRlbXBsYXRlIHN1cHBvcnQgd2l0aCB1bnN0YWJsZSBmbGFnXG4gICAgICAgICAgaWYgKGFyZ3NbJ2Zyb20tcGF0aCddKSB7XG4gICAgICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ2luaXQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2xpSW5pdCh7XG4gICAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICAgIHR5cGU6IGFyZ3MuVEVNUExBVEUsXG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgIGNhblVzZU5ldHdvcms6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGdlbmVyYXRlT25seTogYXJncy5nZW5lcmF0ZU9ubHksXG4gICAgICAgICAgICBsaWJWZXJzaW9uOiBhcmdzLmxpYlZlcnNpb24sXG4gICAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IGFyZ3NbJ3RlbXBsYXRlLXBhdGgnXSxcbiAgICAgICAgICAgIHBhY2thZ2VNYW5hZ2VyOiBhcmdzWydwYWNrYWdlLW1hbmFnZXInXSxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBhcmdzLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21pZ3JhdGUnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtaWdyYXRlJztcbiAgICAgICAgcmV0dXJuIGNsaS5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6IGFyZ3NbJ3N0YWNrLW5hbWUnXSxcbiAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgZnJvbVN0YWNrOiBhcmdzWydmcm9tLXN0YWNrJ10sXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFyZ3MubGFuZ3VhZ2UsXG4gICAgICAgICAgb3V0cHV0UGF0aDogYXJnc1snb3V0cHV0LXBhdGgnXSxcbiAgICAgICAgICBmcm9tU2NhbjogZ2V0TWlncmF0ZVNjYW5UeXBlKGFyZ3NbJ2Zyb20tc2NhbiddKSxcbiAgICAgICAgICBmaWx0ZXI6IGFyZ3MuZmlsdGVyLFxuICAgICAgICAgIGFjY291bnQ6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICByZWdpb246IGFyZ3MucmVnaW9uLFxuICAgICAgICAgIGNvbXByZXNzOiBhcmdzLmNvbXByZXNzLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICd2ZXJzaW9uJztcbiAgICAgICAgcmV0dXJuIGlvSG9zdC5kZWZhdWx0cy5yZXN1bHQodmVyc2lvbldpdGhCdWlsZCgpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5rbm93bkNvbW1hbmQnLCAnVW5rbm93biBjb21tYW5kOiAnICsgY29tbWFuZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoaWNoIHZlcnNpb24gb2YgYm9vdHN0cmFwcGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlcm1pbmVCb290c3RyYXBWZXJzaW9uKGlvSG9zdDogQ2xpSW9Ib3N0LCBhcmdzOiB7IHRlbXBsYXRlPzogc3RyaW5nIH0pOiBQcm9taXNlPEJvb3RzdHJhcFNvdXJjZT4ge1xuICBsZXQgc291cmNlOiBCb290c3RyYXBTb3VyY2U7XG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmluZm8oYFVzaW5nIGJvb3RzdHJhcHBpbmcgdGVtcGxhdGUgZnJvbSAke2FyZ3MudGVtcGxhdGV9YCk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdjdXN0b20nLCB0ZW1wbGF0ZUZpbGU6IGFyZ3MudGVtcGxhdGUgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5DREtfTEVHQUNZX0JPT1RTVFJBUCkge1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5pbmZvKCdDREtfTEVHQUNZX0JPT1RTVFJBUCBzZXQsIHVzaW5nIGxlZ2FjeS1zdHlsZSBib290c3RyYXBwaW5nJyk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdsZWdhY3knIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gVjIsIHRoZSBcIm5ld1wiIGJvb3RzdHJhcHBpbmcgaXMgdGhlIGRlZmF1bHRcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2RlZmF1bHQnIH07XG4gIH1cbiAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZnVuY3Rpb24gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlRmxhZzogc3RyaW5nKSB7XG4gIHJldHVybiBjb25maWd1cmF0aW9uLmNvbnRleHQuZ2V0KGZlYXR1cmVGbGFnKSA/PyBjeGFwaS5mdXR1cmVGbGFnRGVmYXVsdChmZWF0dXJlRmxhZyk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIFN0YWNrU2VsZWN0b3IgYW5kIGV4Y2x1c2l2ZWx5IGZsYWcgdG8gdG9vbGtpdC1saWIncyBTdGFja1NlbGVjdG9yIGZvcm1hdFxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RhY2tTZWxlY3RvcihzZWxlY3RvcjogU3RhY2tTZWxlY3RvciwgZXhjbHVzaXZlbHk/OiBib29sZWFuKTogTGliU3RhY2tTZWxlY3RvciB7XG4gIHJldHVybiB7XG4gICAgcGF0dGVybnM6IHNlbGVjdG9yLnBhdHRlcm5zLFxuICAgIHN0cmF0ZWd5OiBzZWxlY3Rvci5wYXR0ZXJucy5sZW5ndGggPiAwID8gU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5QQVRURVJOX01BVENIIDogU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5BTExfU1RBQ0tTLFxuICAgIGV4cGFuZDogZXhjbHVzaXZlbHkgPyBFeHBhbmRTdGFja1NlbGVjdGlvbi5OT05FIDogRXhwYW5kU3RhY2tTZWxlY3Rpb24uVVBTVFJFQU0sXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSB0b29sa2l0LWxpYiBTdGFja1NlbGVjdG9yIGZyb20gYSBnaXZlbiBzZXQgb2Ygc3RhY2sgY29uc3RydWN0IHBhdGggcGF0dGVybnNcbiAqXG4gKiBJZiBubyBwYXR0ZXJucyBhcmUgZ2l2ZW4sIGFsbCBzdGFja3MgaW4gdGhlIGFzc2VtYmx5IGFuZCBhbGwgb2YgaXRzIHN0YWdlcyBhcmUgc2VsZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShwYXR0ZXJuczogc3RyaW5nW10pOiBMaWJTdGFja1NlbGVjdG9yIHtcbiAgcmV0dXJuIHtcbiAgICBzdHJhdGVneTogcGF0dGVybnMubGVuZ3RoID4gMCA/IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NQVRDSCA6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuQUxMX1NUQUNLUyxcbiAgICBwYXR0ZXJucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4geHMuZmlsdGVyKCh4KSA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZGlmZiBtZXRob2QgZnJvbSBDTEkgYXJncy5cbiAqIC0tbWV0aG9kIHRha2VzIHByZWNlZGVuY2UsIHRoZW4gZGVwcmVjYXRlZCAtLWNoYW5nZS1zZXQsIHRoZW4gLS10ZW1wbGF0ZSBpbXBsaWVzIHRlbXBsYXRlLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVEaWZmTWV0aG9kKGFyZ3M6IGFueSk6ICdjaGFuZ2Utc2V0JyB8ICd0ZW1wbGF0ZScgfCAnYXV0bycge1xuICBpZiAoYXJncy5tZXRob2QgJiYgYXJncy5tZXRob2QgIT09ICdhdXRvJykge1xuICAgIHJldHVybiBhcmdzLm1ldGhvZDtcbiAgfVxuXG4gIC8vIERlcHJlY2F0ZWQgLS1uby1jaGFuZ2Utc2V0IG1hcHMgdG8gdGVtcGxhdGVcbiAgaWYgKGFyZ3NbJ2NoYW5nZS1zZXQnXSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJ3RlbXBsYXRlJztcbiAgfVxuXG4gIC8vIC0tdGVtcGxhdGUgaW1wbGllcyB0ZW1wbGF0ZVxuICBpZiAoYXJncy50ZW1wbGF0ZSkge1xuICAgIHJldHVybiAndGVtcGxhdGUnO1xuICB9XG5cbiAgcmV0dXJuICdhdXRvJztcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzOiBhbnksIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sIHdhdGNoPzogYm9vbGVhbik6IERlcGxveW1lbnRNZXRob2Qge1xuICBsZXQgZGVwbG95bWVudE1ldGhvZDogQ2hhbmdlU2V0RGVwbG95bWVudCB8IERpcmVjdERlcGxveW1lbnQgfCB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5tZXRob2QpIHtcbiAgICBjYXNlICdleGVjdXRlLWNoYW5nZS1zZXQnOlxuICAgICAgaWYgKCFhcmdzLlNUQUNLUyB8fCBhcmdzLlNUQUNLUy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignRXhhY3RseU9uZVN0YWNrJywgJy0tbWV0aG9kPWV4ZWN1dGUtY2hhbmdlLXNldCByZXF1aXJlcyBleGFjdGx5IG9uZSBzdGFjaycpO1xuICAgICAgfVxuICAgICAgaWYgKHdhdGNoIHx8IGFyZ3Mud2F0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignV2F0Y2hXaXRoRXhlY3V0ZUNoYW5nZVNldCcsICctLW1ldGhvZD1leGVjdXRlLWNoYW5nZS1zZXQgY2Fubm90IGJlIHVzZWQgd2l0aCB3YXRjaCcpO1xuICAgICAgfVxuICAgICAgcmVqZWN0SW5jb21wYXRpYmxlT3B0aW9ucyhhcmdzLCAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0Jywge1xuICAgICAgICBmb3JjZTogJy0tZm9yY2UnLFxuICAgICAgICBwYXJhbWV0ZXJzOiAnLS1wYXJhbWV0ZXJzJyxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6ICctLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnLFxuICAgICAgICByZXZlcnREcmlmdDogJy0tcmV2ZXJ0LWRyaWZ0JyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAnZXhlY3V0ZS1jaGFuZ2Utc2V0JyxcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lID8/ICdjZGstZGVwbG95LWNoYW5nZS1zZXQnLFxuICAgICAgfTtcbiAgICBjYXNlICdkaXJlY3QnOlxuICAgICAgcmVqZWN0SW5jb21wYXRpYmxlT3B0aW9ucyhhcmdzLCAnLS1tZXRob2Q9ZGlyZWN0Jywge1xuICAgICAgICBjaGFuZ2VTZXROYW1lOiAnLS1jaGFuZ2Utc2V0LW5hbWUnLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcycsXG4gICAgICAgIHJldmVydERyaWZ0OiAnLS1yZXZlcnQtZHJpZnQnLFxuICAgICAgfSk7XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0geyBtZXRob2Q6ICdkaXJlY3QnIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjaGFuZ2Utc2V0JzpcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICBleGVjdXRlOiB0cnVlLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICByZXZlcnREcmlmdDogYXJncy5yZXZlcnREcmlmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwcmVwYXJlLWNoYW5nZS1zZXQnOlxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICByZXZlcnREcmlmdDogYXJncy5yZXZlcnREcmlmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICBkZWZhdWx0OlxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGV4ZWN1dGU6IHdhdGNoID8gdHJ1ZSA6IGFyZ3MuZXhlY3V0ZSA/PyB0cnVlLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICByZXZlcnREcmlmdDogYXJncy5yZXZlcnREcmlmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGhvdHN3YXBNb2RlID0gZGV0ZXJtaW5lSG90c3dhcE1vZGUoYXJncy5ob3Rzd2FwLCBhcmdzLmhvdHN3YXBGYWxsYmFjaywgd2F0Y2gpO1xuICBjb25zdCBob3Rzd2FwUHJvcGVydGllcyA9IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnaG90c3dhcCddKSB8fCB7fTtcbiAgc3dpdGNoIChob3Rzd2FwTW9kZSkge1xuICAgIGNhc2UgSG90c3dhcE1vZGUuRkFMTF9CQUNLOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAnaG90c3dhcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IGhvdHN3YXBQcm9wZXJ0aWVzLFxuICAgICAgICBmYWxsYmFjazogZGVwbG95bWVudE1ldGhvZCxcbiAgICAgIH07XG4gICAgY2FzZSBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFk6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgcHJvcGVydGllczogaG90c3dhcFByb3BlcnRpZXMsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgY2FzZSBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQ6XG4gICAgICByZXR1cm4gZGVwbG95bWVudE1ldGhvZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgZmVhdHVyZTogc3RyaW5nKSB7XG4gIGlmICghY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd1bnN0YWJsZSddKS5pbmNsdWRlcyhmZWF0dXJlKSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFVuc3RhYmxlJHt1Y2ZpcnN0KGZlYXR1cmUpfWAsIGBVbnN0YWJsZSBmZWF0dXJlIHVzZTogXFwnJHtmZWF0dXJlfVxcJyBpcyB1bnN0YWJsZS4gSXQgbXVzdCBiZSBvcHRlZCBpbiB2aWEgXFwnLS11bnN0YWJsZVxcJywgZS5nLiBcXCdjZGsgJHtmZWF0dXJlfSAtLXVuc3RhYmxlPSR7ZmVhdHVyZX1cXCdgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVjZmlyc3QoeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHhbMF0udG9VcHBlckNhc2UoKSArIHguc2xpY2UoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvdyBpZiBhbnkgb2YgdGhlIGdpdmVuIGZsYWdzIGFyZSBzZXQsIGFzIHRoZXkgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBnaXZlbiBvcHRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlamVjdEluY29tcGF0aWJsZU9wdGlvbnMoYXJnczogYW55LCBvcHRpb246IHN0cmluZywgZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgZm9yIChjb25zdCBba2V5LCBmbGFnXSBvZiBPYmplY3QuZW50cmllcyhmbGFncykpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGFyZ3Nba2V5XTtcblxuICAgIGxldCBpc1NldCA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8geWFyZ3MgbWF5IGRlZmF1bHQgYXJyYXkgb3B0aW9ucyB0byBbe31dLCBzbyBvbmx5IGNvdW50IHJlYWwgdmFsdWVzXG4gICAgICBpc1NldCA9IHZhbHVlLnNvbWUoKHY6IHVua25vd24pID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc1NldCA9ICEhdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGlzU2V0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbmNvbXBhdGlibGVPcHRpb25zJywgYCR7ZmxhZ30gY2Fubm90IGJlIHVzZWQgd2l0aCAke29wdGlvbn1gKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lSG90c3dhcE1vZGUoaG90c3dhcD86IGJvb2xlYW4sIGhvdHN3YXBGYWxsYmFjaz86IGJvb2xlYW4sIHdhdGNoPzogYm9vbGVhbik6IEhvdHN3YXBNb2RlIHtcbiAgaWYgKGhvdHN3YXAgJiYgaG90c3dhcEZhbGxiYWNrKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ29uZmxpY3RpbmdIb3Rzd2FwQXJncycsICdDYW4gbm90IHN1cHBseSBib3RoIC0taG90c3dhcCBhbmQgLS1ob3Rzd2FwLWZhbGxiYWNrIGF0IHRoZSBzYW1lIHRpbWUnKTtcbiAgfSBlbHNlIGlmICghaG90c3dhcCAmJiAhaG90c3dhcEZhbGxiYWNrKSB7XG4gICAgaWYgKGhvdHN3YXAgPT09IHVuZGVmaW5lZCAmJiBob3Rzd2FwRmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHdhdGNoID8gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZIDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UO1xuICAgIH0gZWxzZSBpZiAoaG90c3dhcCA9PT0gZmFsc2UgfHwgaG90c3dhcEZhbGxiYWNrID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICBsZXQgaG90c3dhcE1vZGU6IEhvdHN3YXBNb2RlO1xuICBpZiAoaG90c3dhcCkge1xuICAgIGhvdHN3YXBNb2RlID0gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZO1xuICAgIC8qIGlmIChob3Rzd2FwRmFsbGJhY2spKi9cbiAgfSBlbHNlIHtcbiAgICBob3Rzd2FwTW9kZSA9IEhvdHN3YXBNb2RlLkZBTExfQkFDSztcbiAgfVxuXG4gIHJldHVybiBob3Rzd2FwTW9kZTtcbn1cblxuLyogYzggaWdub3JlIHN0YXJ0ICovIC8vIHdlIG5ldmVyIGNhbGwgdGhpcyBpbiB1bml0IHRlc3RzXG5leHBvcnQgZnVuY3Rpb24gY2xpKGFyZ3M6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gIGxldCBlcnJvcjogRXJyb3JEZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBleGVjKGFyZ3MpXG4gICAgLnRoZW4oYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgLy8gTG9nIHRoZSBzdGFjayB0cmFjZSBpZiB3ZSdyZSBvbiBhIGRldmVsb3BlciB3b3Jrc3RhdGlvbi4gT3RoZXJ3aXNlIHRoaXMgd2lsbCBiZSBpbnRvIGEgbWluaWZpZWRcbiAgICAgIC8vIGZpbGUgYW5kIHRoZSBwcmludGVkIGNvZGUgbGluZSBhbmQgc3RhY2sgdHJhY2UgYXJlIGh1Z2UgYW5kIHVzZWxlc3MuXG4gICAgICBwcmV0dHlQcmludEVycm9yKGVyciwgaXNEZXZlbG9wZXJCdWlsZFZlcnNpb24oKSk7XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbmFtZTogY2RrQ2xpRXJyb3JOYW1lKGVyciksXG4gICAgICB9O1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgfSlcbiAgICAuZmluYWxseShhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBDbGlJb0hvc3QuZ2V0KCk/LnRlbGVtZXRyeT8uZW5kKGVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBhd2FpdCBDbGlJb0hvc3QuZ2V0KCk/LmFzSW9IZWxwZXIoKS5kZWZhdWx0cy50cmFjZShgRW5kaW5nIFRlbGVtZXRyeSBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pO1xufVxuLyogYzggaWdub3JlIHN0b3AgKi9cbiJdfQ==
|