@tscircuit/eval 0.0.387 → 0.0.389
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blob-url.js +1 -1
- package/dist/eval/index.js +27 -3
- package/dist/lib/index.js +27 -3
- package/dist/webworker/entrypoint.js +102 -102
- package/package.json +3 -3
package/dist/eval/index.js
CHANGED
|
@@ -967,6 +967,15 @@ var setupDefaultEntrypointIfNeeded = (opts) => {
|
|
|
967
967
|
}
|
|
968
968
|
};
|
|
969
969
|
|
|
970
|
+
// lib/utils/enhance-root-circuit-error.ts
|
|
971
|
+
var enhanceRootCircuitHasNoChildrenError = (error, entrypoint) => {
|
|
972
|
+
if (error instanceof Error && entrypoint && error.message.includes("RootCircuit has no children") && !error.message.includes('"entrypoint":')) {
|
|
973
|
+
const entrypointMessage = entrypoint.startsWith("./") ? entrypoint.slice(2) : entrypoint;
|
|
974
|
+
error.message = `${error.message}. "entrypoint": "${entrypointMessage}" is set in the runner configuration, entrypoints must contain "circuit.add(...)", you might be looking to use mainComponentPath instead if your file exports a component.`;
|
|
975
|
+
}
|
|
976
|
+
return error;
|
|
977
|
+
};
|
|
978
|
+
|
|
970
979
|
// lib/runner/CircuitRunner.ts
|
|
971
980
|
import Debug6 from "debug";
|
|
972
981
|
var debug6 = Debug6("tsci:eval:CircuitRunner");
|
|
@@ -1008,6 +1017,7 @@ var CircuitRunner = class {
|
|
|
1008
1017
|
}
|
|
1009
1018
|
);
|
|
1010
1019
|
this._bindEventListeners(this._executionContext.circuit);
|
|
1020
|
+
this._executionContext.entrypoint = opts.entrypoint;
|
|
1011
1021
|
this._executionContext.fsMap = normalizeFsMap(opts.fsMap);
|
|
1012
1022
|
if (!this._executionContext.fsMap[opts.entrypoint]) {
|
|
1013
1023
|
throw new Error(`Entrypoint "${opts.entrypoint}" not found`);
|
|
@@ -1067,13 +1077,27 @@ var CircuitRunner = class {
|
|
|
1067
1077
|
if (!this._executionContext) {
|
|
1068
1078
|
throw new Error("No circuit has been created");
|
|
1069
1079
|
}
|
|
1070
|
-
|
|
1080
|
+
try {
|
|
1081
|
+
await this._executionContext.circuit.renderUntilSettled();
|
|
1082
|
+
} catch (error) {
|
|
1083
|
+
throw enhanceRootCircuitHasNoChildrenError(
|
|
1084
|
+
error,
|
|
1085
|
+
this._executionContext.entrypoint
|
|
1086
|
+
);
|
|
1087
|
+
}
|
|
1071
1088
|
}
|
|
1072
1089
|
async getCircuitJson() {
|
|
1073
1090
|
if (!this._executionContext) {
|
|
1074
1091
|
throw new Error("No circuit has been created");
|
|
1075
1092
|
}
|
|
1076
|
-
|
|
1093
|
+
try {
|
|
1094
|
+
return this._executionContext.circuit.getCircuitJson();
|
|
1095
|
+
} catch (error) {
|
|
1096
|
+
throw enhanceRootCircuitHasNoChildrenError(
|
|
1097
|
+
error,
|
|
1098
|
+
this._executionContext.entrypoint
|
|
1099
|
+
);
|
|
1100
|
+
}
|
|
1077
1101
|
}
|
|
1078
1102
|
clearEventListeners() {
|
|
1079
1103
|
if (this._executionContext?.circuit) {
|
|
@@ -1177,4 +1201,4 @@ export {
|
|
|
1177
1201
|
runTscircuitCode,
|
|
1178
1202
|
runTscircuitModule
|
|
1179
1203
|
};
|
|
1180
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vd2Vid29ya2VyL2V4ZWN1dGlvbi1jb250ZXh0LnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AdHNjaXJjdWl0L3BhcnRzLWVuZ2luZS9saWIvZm9vdHByaW50LXRyYW5zbGF0b3JzL2dldC1mb290cHJpbnRlci1zdHJpbmctZnJvbS1raWNhZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQHRzY2lyY3VpdC9wYXJ0cy1lbmdpbmUvbGliL2Zvb3RwcmludC10cmFuc2xhdG9ycy9nZXQtamxjLXBhY2thZ2UtZnJvbS1mb290cHJpbnRlci1zdHJpbmcudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0B0c2NpcmN1aXQvcGFydHMtZW5naW5lL2xpYi9mb290cHJpbnQtdHJhbnNsYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0B0c2NpcmN1aXQvcGFydHMtZW5naW5lL2xpYi9qbGMtcGFydHMtZW5naW5lLnRzIiwgIi4uLy4uL2xpYi9nZXRQbGF0Zm9ybUNvbmZpZy50cyIsICIuLi8uLi9saWIvcnVubmVyL25vcm1hbGl6ZUZzTWFwLnRzIiwgIi4uLy4uL2xpYi9ydW5uZXIvQ2lyY3VpdFJ1bm5lci50cyIsICIuLi8uLi9saWIvdXRpbHMvZGlybmFtZS50cyIsICIuLi8uLi9saWIvcnVubmVyL3RzY29uZmlnUGF0aHMudHMiLCAiLi4vLi4vbGliL3V0aWxzL3Jlc29sdmVSZWxhdGl2ZVBhdGgudHMiLCAiLi4vLi4vbGliL3J1bm5lci9yZXNvbHZlRmlsZVBhdGgudHMiLCAiLi4vLi4vbGliL3V0aWxzL2dldC1pbXBvcnRzLWZyb20tY29kZS50cyIsICIuLi8uLi93ZWJ3b3JrZXIvZXZhbC1jb21waWxlZC1qcy50cyIsICIuLi8uLi93ZWJ3b3JrZXIvaW1wb3J0LWxvY2FsLWZpbGUudHMiLCAiLi4vLi4vbGliL3NoYXJlZC9zdGF0aWMtYXNzZXQtZXh0ZW5zaW9ucy50cyIsICIuLi8uLi93ZWJ3b3JrZXIvdHJhbnNmb3JtLXdpdGgtc3VjcmFzZS50cyIsICIuLi8uLi93ZWJ3b3JrZXIvaW1wb3J0LXNuaXBwZXQudHMiLCAiLi4vLi4vbGliL3V0aWxzL3Jlc29sdmUtbm9kZS1tb2R1bGUudHMiLCAiLi4vLi4vd2Vid29ya2VyL2ltcG9ydC1ub2RlLW1vZHVsZS50cyIsICIuLi8uLi93ZWJ3b3JrZXIvaW1wb3J0LW5wbS1wYWNrYWdlLnRzIiwgIi4uLy4uL3dlYndvcmtlci9pbXBvcnQtZXZhbC1wYXRoLnRzIiwgIi4uLy4uL2xpYi9ydW5uZXIvc2V0dXBEZWZhdWx0RW50cnlwb2ludElmTmVlZGVkLnRzIiwgIi4uLy4uL2xpYi9ydW5uZXIvcnVuVHNjaXJjdWl0Q29kZS50cyIsICIuLi8uLi9saWIvcnVubmVyL3J1blRzY2lyY3VpdE1vZHVsZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUm9vdENpcmN1aXQgfSBmcm9tIFwiQHRzY2lyY3VpdC9jb3JlXCJcbmltcG9ydCB0eXBlIHsgV2ViV29ya2VyQ29uZmlndXJhdGlvbiB9IGZyb20gXCJsaWIvc2hhcmVkL3R5cGVzXCJcbmltcG9ydCAqIGFzIHRzY2lyY3VpdENvcmUgZnJvbSBcIkB0c2NpcmN1aXQvY29yZVwiXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0ICogYXMgdHNjaXJjdWl0TWF0aFV0aWxzIGZyb20gXCJAdHNjaXJjdWl0L21hdGgtdXRpbHNcIlxuaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUNvbmZpZyB9IGZyb20gXCJAdHNjaXJjdWl0L3Byb3BzXCJcbmltcG9ydCB7IGdldFBsYXRmb3JtQ29uZmlnIH0gZnJvbSBcImxpYi9nZXRQbGF0Zm9ybUNvbmZpZ1wiXG5pbXBvcnQgRGVidWcgZnJvbSBcImRlYnVnXCJcblxuY29uc3QgZGVidWcgPSBEZWJ1ZyhcInRzY2k6ZXZhbDpleGVjdXRpb24tY29udGV4dFwiKVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkNvbnRleHQgZXh0ZW5kcyBXZWJXb3JrZXJDb25maWd1cmF0aW9uIHtcbiAgZnNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgZW50cnlwb2ludDogc3RyaW5nXG4gIHByZVN1cHBsaWVkSW1wb3J0czogUmVjb3JkPHN0cmluZywgYW55PlxuICBjaXJjdWl0OiBSb290Q2lyY3VpdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhlY3V0aW9uQ29udGV4dChcbiAgd2ViV29ya2VyQ29uZmlndXJhdGlvbjogV2ViV29ya2VyQ29uZmlndXJhdGlvbixcbiAgb3B0czoge1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBwbGF0Zm9ybT86IFBsYXRmb3JtQ29uZmlnXG4gICAgcHJvamVjdENvbmZpZz86IFBhcnRpYWw8UGxhdGZvcm1Db25maWc+XG4gICAgZGVidWdOYW1lc3BhY2U/OiBzdHJpbmdcbiAgfSA9IHt9LFxuKTogRXhlY3V0aW9uQ29udGV4dCB7XG4gIGdsb2JhbFRoaXMuUmVhY3QgPSBSZWFjdFxuXG4gIGNvbnN0IGJhc2VQbGF0Zm9ybSA9IG9wdHMucGxhdGZvcm0gfHwgZ2V0UGxhdGZvcm1Db25maWcoKVxuICBjb25zdCBwbGF0Zm9ybSA9IG9wdHMucHJvamVjdENvbmZpZ1xuICAgID8geyAuLi5iYXNlUGxhdGZvcm0sIC4uLm9wdHMucHJvamVjdENvbmZpZyB9XG4gICAgOiBiYXNlUGxhdGZvcm1cblxuICBjb25zdCBjaXJjdWl0ID0gbmV3IFJvb3RDaXJjdWl0KHtcbiAgICBwbGF0Zm9ybSxcbiAgfSlcblxuICBpZiAob3B0cy5uYW1lKSB7XG4gICAgY2lyY3VpdC5uYW1lID0gb3B0cy5uYW1lXG4gIH1cblxuICBpZiAob3B0cy5kZWJ1Z05hbWVzcGFjZSkge1xuICAgIGNpcmN1aXQuZW5hYmxlRGVidWcob3B0cy5kZWJ1Z05hbWVzcGFjZSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZnNNYXA6IHt9LFxuICAgIGVudHJ5cG9pbnQ6IFwiXCIsXG4gICAgcHJlU3VwcGxpZWRJbXBvcnRzOiB7XG4gICAgICBcIkB0c2NpcmN1aXQvY29yZVwiOiB0c2NpcmN1aXRDb3JlLFxuICAgICAgdHNjaXJjdWl0OiB0c2NpcmN1aXRDb3JlLFxuICAgICAgXCJAdHNjaXJjdWl0L21hdGgtdXRpbHNcIjogdHNjaXJjdWl0TWF0aFV0aWxzLFxuICAgICAgcmVhY3Q6IFJlYWN0LFxuICAgICAgZGVidWc6IERlYnVnLFxuXG4gICAgICAvLyBUaGlzIGlzIHVzdWFsbHkgdXNlZCBhcyBhIHR5cGUgaW1wb3J0LCB3ZSBjYW4gcmVtb3ZlIHRoZSBzaGltIHdoZW4gd2VcbiAgICAgIC8vIGlnbm9yZSB0eXBlIGltcG9ydHMgaW4gZ2V0SW1wb3J0c0Zyb21Db2RlXG4gICAgICBcIkB0c2NpcmN1aXQvcHJvcHNcIjoge30sXG4gICAgfSxcbiAgICBjaXJjdWl0LFxuICAgIC4uLndlYldvcmtlckNvbmZpZ3VyYXRpb24sXG4gIH1cbn1cbiIsICIvKipcbiAqIFRyYW5zZm9ybXMgYSBLaUNhZCBmb290cHJpbnQgc3RyaW5nIGludG8gYSBnZW5lcmljIFwiZm9vdHByaW50ZXIgc3RyaW5nXCIuXG4gKiBGb3Igbm93LCB0aGlzIGlzIGEgc2ltcGxpZmllZCBjb252ZXJzaW9uIHRvIGEgc3RhbmRhcmQgcGFja2FnZSBuYW1lLlxuICogZS5nLiBcImtpY2FkOlJlc2lzdG9yX1NNRDpSXzA2MDNfMTYwOE1ldHJpY1wiIC0+IFwiMDYwM1wiXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZCA9IChcbiAga2ljYWRGb290cHJpbnQ6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIC8vIGtpY2FkOlJlc2lzdG9yX1NNRDpSXzA2MDNfMTYwOE1ldHJpYyAtPiAwNjAzXG4gIGxldCBtYXRjaCA9IGtpY2FkRm9vdHByaW50Lm1hdGNoKC86W1JDXV8oXFxkezR9KV8vKVxuICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFsxXVxuXG4gIC8vIGtpY2FkOlBhY2thZ2VfU086U09JQy04XzMuOXg0LjltbV9QMS4yN21tIC0+IFNPSUMtOFxuICAvLyBraWNhZDpQYWNrYWdlX1RPX1NPVF9TTUQ6U09ULTIzIC0+IFNPVC0yM1xuICBtYXRjaCA9IGtpY2FkRm9vdHByaW50Lm1hdGNoKFxuICAgIC86KFNPSUMtXFxkK3xTT1QtXFxkK3xTT0QtXFxkK3xTU09QLVxcZCt8VFNTT1AtXFxkK3xRRlAtXFxkK3xRRk4tXFxkKykvLFxuICApXG4gIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoWzFdXG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIiwgIi8qKlxuICogVHJhbnNmb3JtcyBhIGdlbmVyaWMgXCJmb290cHJpbnRlciBzdHJpbmdcIiBpbnRvIGEgSkxDLWNvbXBhdGlibGUgcGFja2FnZSBuYW1lLlxuICogZS5nLiBcImNhcDA2MDNcIiAtPiBcIjA2MDNcIlxuICovXG5leHBvcnQgY29uc3QgZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyA9IChcbiAgZm9vdHByaW50ZXJTdHJpbmc6IHN0cmluZyxcbik6IHN0cmluZyA9PiB7XG4gIGlmIChmb290cHJpbnRlclN0cmluZy5pbmNsdWRlcyhcImNhcFwiKSkge1xuICAgIHJldHVybiBmb290cHJpbnRlclN0cmluZy5yZXBsYWNlKC9jYXAvZywgXCJcIilcbiAgfVxuICByZXR1cm4gZm9vdHByaW50ZXJTdHJpbmdcbn1cbiIsICJpbXBvcnQgeyBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZCB9IGZyb20gXCIuL2dldC1mb290cHJpbnRlci1zdHJpbmctZnJvbS1raWNhZFwiXG5pbXBvcnQgeyBnZXRKbGNQYWNrYWdlRnJvbUZvb3RwcmludGVyU3RyaW5nIH0gZnJvbSBcIi4vZ2V0LWpsYy1wYWNrYWdlLWZyb20tZm9vdHByaW50ZXItc3RyaW5nXCJcblxuLyoqXG4gKiBHZXQgYSBKTEMtY29tcGF0aWJsZSBwYWNrYWdlIG5hbWUgZnJvbSBhIGZvb3RwcmludCBzdHJpbmcsIHdoaWNoIGNvdWxkIGJlXG4gKiBhIEtpQ2FkIGZvb3RwcmludCBvciBhIGdlbmVyaWMgXCJmb290cHJpbnRlciBzdHJpbmdcIi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEpsY3BjYlBhY2thZ2VOYW1lID0gKFxuICBmb290cHJpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghZm9vdHByaW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKGZvb3RwcmludC5zdGFydHNXaXRoKFwia2ljYWQ6XCIpKSB7XG4gICAgY29uc3QgZm9vdHByaW50ZXJTdHJpbmcgPSBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZChmb290cHJpbnQpXG4gICAgaWYgKGZvb3RwcmludGVyU3RyaW5nKSB7XG4gICAgICByZXR1cm4gZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyhmb290cHJpbnRlclN0cmluZylcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgdW4tbWF0Y2hlZCBLaUNhZCBzdHJpbmdzXG4gICAgcmV0dXJuIGZvb3RwcmludFxuICB9XG5cbiAgLy8gTm90IGEgS2lDYWQgc3RyaW5nLCBhc3N1bWUgaXQncyBhIGZvb3RwcmludGVyIHN0cmluZ1xuICByZXR1cm4gZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyhmb290cHJpbnQpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBQYXJ0c0VuZ2luZSwgU3VwcGxpZXJQYXJ0TnVtYmVycyB9IGZyb20gXCJAdHNjaXJjdWl0L3Byb3BzXCJcbmltcG9ydCB7IGdldEpsY3BjYlBhY2thZ2VOYW1lIH0gZnJvbSBcIi4vZm9vdHByaW50LXRyYW5zbGF0b3JzL2luZGV4XCJcblxuZXhwb3J0IGNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKVxuXG5jb25zdCBnZXRKbGNQYXJ0c0NhY2hlZCA9IGFzeW5jIChuYW1lOiBhbnksIHBhcmFtczogYW55KSA9PiB7XG4gIGNvbnN0IHBhcmFtU3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgLi4ucGFyYW1zLFxuICAgIGpzb246IFwidHJ1ZVwiLFxuICB9KS50b1N0cmluZygpXG4gIGlmIChjYWNoZS5oYXMocGFyYW1TdHJpbmcpKSB7XG4gICAgcmV0dXJuIGNhY2hlLmdldChwYXJhbVN0cmluZylcbiAgfVxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgIGBodHRwczovL2psY3NlYXJjaC50c2NpcmN1aXQuY29tLyR7bmFtZX0vbGlzdD8ke3BhcmFtU3RyaW5nfWAsXG4gIClcbiAgY29uc3QgcmVzcG9uc2VKc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIGNhY2hlLnNldChwYXJhbVN0cmluZywgcmVzcG9uc2VKc29uKVxuICByZXR1cm4gcmVzcG9uc2VKc29uXG59XG5cbmNvbnN0IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlID0gKHBhcnRzOiBhbnlbXSB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIXBhcnRzKSByZXR1cm4gW11cbiAgcmV0dXJuIFsuLi5wYXJ0c10uc29ydChcbiAgICAoYSwgYikgPT4gTnVtYmVyKGIuaXNfYmFzaWMgPz8gZmFsc2UpIC0gTnVtYmVyKGEuaXNfYmFzaWMgPz8gZmFsc2UpLFxuICApXG59XG5cbmV4cG9ydCBjb25zdCBqbGNQYXJ0c0VuZ2luZTogUGFydHNFbmdpbmUgPSB7XG4gIGZpbmRQYXJ0OiBhc3luYyAoe1xuICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICBmb290cHJpbnRlclN0cmluZyxcbiAgfSk6IFByb21pc2U8U3VwcGxpZXJQYXJ0TnVtYmVycz4gPT4ge1xuICAgIGNvbnN0IGpsY3BjYlBhY2thZ2UgPSBnZXRKbGNwY2JQYWNrYWdlTmFtZShmb290cHJpbnRlclN0cmluZylcblxuICAgIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9yZXNpc3RvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHJlc2lzdG9ycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJyZXNpc3RvcnNcIiwge1xuICAgICAgICByZXNpc3RhbmNlOiBzb3VyY2VDb21wb25lbnQucmVzaXN0YW5jZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UocmVzaXN0b3JzKVxuICAgICAgICAgIC5tYXAoKHI6IGFueSkgPT4gYEMke3IubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2NhcGFjaXRvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGNhcGFjaXRvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiY2FwYWNpdG9yc1wiLCB7XG4gICAgICAgIGNhcGFjaXRhbmNlOiBzb3VyY2VDb21wb25lbnQuY2FwYWNpdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKGNhcGFjaXRvcnMpXG4gICAgICAgICAgLm1hcCgoYzogYW55KSA9PiBgQyR7Yy5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcGluX2hlYWRlclwiXG4gICAgKSB7XG4gICAgICBsZXQgcGl0Y2g6IG51bWJlciB8IHVuZGVmaW5lZFxuICAgICAgaWYgKGZvb3RwcmludGVyU3RyaW5nPy5pbmNsdWRlcyhcIl9wXCIpKSB7XG4gICAgICAgIHBpdGNoID0gTnVtYmVyKGZvb3RwcmludGVyU3RyaW5nLnNwbGl0KFwiX3BcIilbMV0pXG4gICAgICB9XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFxuICAgICAgICBcImhlYWRlcnNcIixcbiAgICAgICAgcGl0Y2hcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGl0Y2g6IHBpdGNoLFxuICAgICAgICAgICAgICBudW1fcGluczogc291cmNlQ29tcG9uZW50LnBpbl9jb3VudCxcbiAgICAgICAgICAgICAgZ2VuZGVyOiBzb3VyY2VDb21wb25lbnQuZ2VuZGVyLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBudW1fcGluczogc291cmNlQ29tcG9uZW50LnBpbl9jb3VudCxcbiAgICAgICAgICAgICAgZ2VuZGVyOiBzb3VyY2VDb21wb25lbnQuZ2VuZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoaGVhZGVycylcbiAgICAgICAgICAubWFwKChoOiBhbnkpID0+IGBDJHtoLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9wb3RlbnRpb21ldGVyXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcG90ZW50aW9tZXRlcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwicG90ZW50aW9tZXRlcnNcIiwge1xuICAgICAgICByZXNpc3RhbmNlOiBzb3VyY2VDb21wb25lbnQubWF4X3Jlc2lzdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShwb3RlbnRpb21ldGVycylcbiAgICAgICAgICAubWFwKChwOiBhbnkpID0+IGBDJHtwLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9kaW9kZVwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGRpb2RlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJkaW9kZXNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoZGlvZGVzKVxuICAgICAgICAgIC5tYXAoKGQ6IGFueSkgPT4gYEMke2QubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2NoaXBcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBjaGlwcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJjaGlwc1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShjaGlwcylcbiAgICAgICAgICAubWFwKChjOiBhbnkpID0+IGBDJHtjLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV90cmFuc2lzdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgdHJhbnNpc3RvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwidHJhbnNpc3RvcnNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgICB0cmFuc2lzdG9yX3R5cGU6IHNvdXJjZUNvbXBvbmVudC50cmFuc2lzdG9yX3R5cGUsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZSh0cmFuc2lzdG9ycylcbiAgICAgICAgICAubWFwKCh0OiBhbnkpID0+IGBDJHt0Lmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9wb3dlcl9zb3VyY2VcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBwb3dlcl9zb3VyY2VzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcInBvd2VyX3NvdXJjZXNcIiwge1xuICAgICAgICB2b2x0YWdlOiBzb3VyY2VDb21wb25lbnQudm9sdGFnZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHBvd2VyX3NvdXJjZXMpXG4gICAgICAgICAgLm1hcCgocDogYW55KSA9PiBgQyR7cC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfaW5kdWN0b3JcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBpbmR1Y3RvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiaW5kdWN0b3JzXCIsIHtcbiAgICAgICAgaW5kdWN0YW5jZTogc291cmNlQ29tcG9uZW50LmluZHVjdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShpbmR1Y3RvcnMpXG4gICAgICAgICAgLm1hcCgoaTogYW55KSA9PiBgQyR7aS5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfY3J5c3RhbFwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGNyeXN0YWxzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImNyeXN0YWxzXCIsIHtcbiAgICAgICAgZnJlcXVlbmN5OiBzb3VyY2VDb21wb25lbnQuZnJlcXVlbmN5LFxuICAgICAgICBsb2FkX2NhcGFjaXRhbmNlOiBzb3VyY2VDb21wb25lbnQubG9hZF9jYXBhY2l0YW5jZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKGNyeXN0YWxzKVxuICAgICAgICAgIC5tYXAoKGM6IGFueSkgPT4gYEMke2MubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX21vc2ZldFwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IG1vc2ZldHMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwibW9zZmV0c1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICAgIG1vc2ZldF9tb2RlOiBzb3VyY2VDb21wb25lbnQubW9zZmV0X21vZGUsXG4gICAgICAgIGNoYW5uZWxfdHlwZTogc291cmNlQ29tcG9uZW50LmNoYW5uZWxfdHlwZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKG1vc2ZldHMpXG4gICAgICAgICAgLm1hcCgobTogYW55KSA9PiBgQyR7bS5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcmVzb25hdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcmVzb25hdG9ycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJyZXNvbmF0b3JzXCIsIHtcbiAgICAgICAgZnJlcXVlbmN5OiBzb3VyY2VDb21wb25lbnQuZnJlcXVlbmN5LFxuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UocmVzb25hdG9ycylcbiAgICAgICAgICAubWFwKChyOiBhbnkpID0+IGBDJHtyLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9zd2l0Y2hcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBzd2l0Y2hlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJzd2l0Y2hlc1wiLCB7XG4gICAgICAgIHN3aXRjaF90eXBlOiBzb3VyY2VDb21wb25lbnQudHlwZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHN3aXRjaGVzKVxuICAgICAgICAgIC5tYXAoKHM6IGFueSkgPT4gYEMke3MubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2xlZFwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGxlZHMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwibGVkc1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShsZWRzKVxuICAgICAgICAgIC5tYXAoKGw6IGFueSkgPT4gYEMke2wubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2Z1c2VcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBmdXNlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJmdXNlc1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShmdXNlcylcbiAgICAgICAgICAubWFwKChsOiBhbnkpID0+IGBDJHtsLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fVxuICB9LFxufVxuIiwgImltcG9ydCB0eXBlIHsgUGxhdGZvcm1Db25maWcgfSBmcm9tIFwiQHRzY2lyY3VpdC9wcm9wc1wiXG5pbXBvcnQgeyBqbGNQYXJ0c0VuZ2luZSB9IGZyb20gXCJAdHNjaXJjdWl0L3BhcnRzLWVuZ2luZVwiXG5pbXBvcnQgeyBwYXJzZUtpY2FkTW9kVG9DaXJjdWl0SnNvbiB9IGZyb20gXCJraWNhZC1jb21wb25lbnQtY29udmVydGVyXCJcbmNvbnN0IEtJQ0FEX0ZPT1RQUklOVF9DQUNIRV9VUkwgPSBcImh0dHBzOi8va2ljYWQtbW9kLWNhY2hlLnRzY2lyY3VpdC5jb21cIlxuXG5leHBvcnQgY29uc3QgZ2V0UGxhdGZvcm1Db25maWcgPSAoKTogUGxhdGZvcm1Db25maWcgPT4gKHtcbiAgcGFydHNFbmdpbmU6IGpsY1BhcnRzRW5naW5lLFxuICBmb290cHJpbnRMaWJyYXJ5TWFwOiB7XG4gICAga2ljYWQ6IGFzeW5jIChmb290cHJpbnROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBgJHtLSUNBRF9GT09UUFJJTlRfQ0FDSEVfVVJMfS8ke2Zvb3RwcmludE5hbWV9YFxuICAgICAgY29uc3QgY2lyY3VpdEpzb25VcmwgPSBgJHtiYXNlVXJsfS5jaXJjdWl0Lmpzb25gXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChjaXJjdWl0SnNvblVybClcbiAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlcy5qc29uKClcbiAgICAgIC8vIEZpbHRlciBwY2Jfc2lsa3NjcmVlbl90ZXh0IHRvIG9ubHkga2VlcCBlbnRyaWVzIHdpdGggdGV4dCA9PT0gXCJSRUYqKlwiXG4gICAgICAvLyBBcHBseSBmaWx0ZXJpbmcgb25seSB0byBlbGVtZW50cyBjb21pbmcgZnJvbSB0aGUga2ljYWRfbW9kX3NlcnZlciByZXNwb25zZVxuICAgICAgY29uc3QgZmlsdGVyZWQgPSBBcnJheS5pc0FycmF5KHJhdylcbiAgICAgICAgPyByYXcuZmlsdGVyKChlbCkgPT5cbiAgICAgICAgICAgIGVsPy50eXBlID09PSBcInBjYl9zaWxrc2NyZWVuX3RleHRcIiA/IGVsPy50ZXh0ID09PSBcIlJFRioqXCIgOiB0cnVlLFxuICAgICAgICAgIClcbiAgICAgICAgOiByYXdcbiAgICAgIGNvbnN0IHdybFVybCA9IGAke2Jhc2VVcmx9LndybGBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvb3RwcmludENpcmN1aXRKc29uOiBmaWx0ZXJlZCxcbiAgICAgICAgY2FkTW9kZWw6IHsgd3JsVXJsLCBtb2RlbFVuaXRUb01tU2NhbGU6IDIuNTQgfSxcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBmb290cHJpbnRGaWxlUGFyc2VyTWFwOiB7XG4gICAga2ljYWRfbW9kOiB7XG4gICAgICBsb2FkRnJvbVVybDogYXN5bmMgKHVybDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGtpY2FkQ29udGVudCA9IGF3YWl0IGZldGNoKHVybCkudGhlbigocmVzKSA9PiByZXMudGV4dCgpKVxuICAgICAgICBjb25zdCBraWNhZEpzb24gPSBhd2FpdCBwYXJzZUtpY2FkTW9kVG9DaXJjdWl0SnNvbihraWNhZENvbnRlbnQpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZm9vdHByaW50Q2lyY3VpdEpzb246IEFycmF5LmlzQXJyYXkoa2ljYWRKc29uKVxuICAgICAgICAgICAgPyBraWNhZEpzb25cbiAgICAgICAgICAgIDogW2tpY2FkSnNvbl0sXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0pXG4iLCAiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgbGV0IG5vcm1GaWxlUGF0aCA9IGZpbGVQYXRoXG4gIG5vcm1GaWxlUGF0aCA9IG5vcm1GaWxlUGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKVxuICBub3JtRmlsZVBhdGggPSBub3JtRmlsZVBhdGgudHJpbSgpXG4gIGlmIChub3JtRmlsZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpKSB7XG4gICAgbm9ybUZpbGVQYXRoID0gbm9ybUZpbGVQYXRoLnNsaWNlKDIpXG4gIH1cbiAgaWYgKG5vcm1GaWxlUGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgIG5vcm1GaWxlUGF0aCA9IG5vcm1GaWxlUGF0aC5zbGljZSgxKVxuICB9XG4gIHJldHVybiBub3JtRmlsZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZzTWFwKGZzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRGc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gIGZvciAoY29uc3QgW2ZzUGF0aCwgZmlsZUNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZzTWFwKSkge1xuICAgIG5vcm1hbGl6ZWRGc01hcFtub3JtYWxpemVGaWxlUGF0aChmc1BhdGgpXSA9IGZpbGVDb250ZW50XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRGc01hcFxufVxuIiwgImltcG9ydCB0eXBlIHsgQW55Q2lyY3VpdEVsZW1lbnQgfSBmcm9tIFwiY2lyY3VpdC1qc29uXCJcbmltcG9ydCB0eXBlIHtcbiAgQ2lyY3VpdFJ1bm5lckFwaSxcbiAgQ2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24sXG59IGZyb20gXCJsaWIvc2hhcmVkL3R5cGVzXCJcbmltcG9ydCB0eXBlIHsgUGxhdGZvcm1Db25maWcgfSBmcm9tIFwiQHRzY2lyY3VpdC9wcm9wc1wiXG5pbXBvcnQgeyBjcmVhdGVFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL3dlYndvcmtlci9leGVjdXRpb24tY29udGV4dFwiXG5pbXBvcnQgeyBub3JtYWxpemVGc01hcCB9IGZyb20gXCIuL25vcm1hbGl6ZUZzTWFwXCJcbmltcG9ydCB0eXBlIHsgUm9vdENpcmN1aXQgfSBmcm9tIFwiQHRzY2lyY3VpdC9jb3JlXCJcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyBpbXBvcnRFdmFsUGF0aCB9IGZyb20gXCJ3ZWJ3b3JrZXIvaW1wb3J0LWV2YWwtcGF0aFwiXG5pbXBvcnQgeyBzZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWQgfSBmcm9tIFwiLi9zZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWRcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJ0c2NpOmV2YWw6Q2lyY3VpdFJ1bm5lclwiKVxuXG5leHBvcnQgY2xhc3MgQ2lyY3VpdFJ1bm5lciBpbXBsZW1lbnRzIENpcmN1aXRSdW5uZXJBcGkge1xuICBfZXhlY3V0aW9uQ29udGV4dDogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlRXhlY3V0aW9uQ29udGV4dD4gfCBudWxsID0gbnVsbFxuICBfY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb246IENpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uID0ge1xuICAgIHNuaXBwZXRzQXBpQmFzZVVybDogXCJodHRwczovL3JlZ2lzdHJ5LWFwaS50c2NpcmN1aXQuY29tXCIsXG4gICAgY2pzUmVnaXN0cnlVcmw6IFwiaHR0cHM6Ly9janMudHNjaXJjdWl0LmNvbVwiLFxuICAgIHZlcmJvc2U6IGZhbHNlLFxuICB9XG4gIF9ldmVudExpc3RlbmVyczogUmVjb3JkPHN0cmluZywgKCguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZClbXT4gPSB7fVxuICBfZGVidWdOYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb246IFBhcnRpYWw8Q2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24+ID0ge30pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uKVxuICB9XG5cbiAgYXN5bmMgdmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBcIjAuMC4wXCJcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVXaXRoRnNNYXAob2dPcHRzOiB7XG4gICAgZW50cnlwb2ludD86IHN0cmluZ1xuICAgIG1haW5Db21wb25lbnRQYXRoPzogc3RyaW5nXG4gICAgbWFpbkNvbXBvbmVudE5hbWU/OiBzdHJpbmdcbiAgICBmc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBtYWluQ29tcG9uZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcHRzID0geyAuLi5vZ09wdHMgfVxuXG4gICAgaWYgKHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnZlcmJvc2UpIHtcbiAgICAgIERlYnVnLmVuYWJsZShcInRzY2k6ZXZhbDoqXCIpXG4gICAgfVxuXG4gICAgZGVidWcoXCJleGVjdXRlV2l0aEZzTWFwIGNhbGxlZCB3aXRoOlwiLCB7XG4gICAgICBlbnRyeXBvaW50OiBvcHRzLmVudHJ5cG9pbnQsXG4gICAgICBmc01hcEtleXM6IE9iamVjdC5rZXlzKG9wdHMuZnNNYXApLFxuICAgICAgbmFtZTogb3B0cy5uYW1lLFxuICAgIH0pXG5cbiAgICBzZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWQob3B0cylcblxuICAgIGRlYnVnKFwiZW50cnlwb2ludCBhZnRlciBzZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWQ6XCIsIHtcbiAgICAgIGVudHJ5cG9pbnQ6IG9wdHMuZW50cnlwb2ludCxcbiAgICB9KVxuXG4gICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0cy5uYW1lLFxuICAgICAgICBwbGF0Zm9ybTogdGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24ucGxhdGZvcm0sXG4gICAgICAgIHByb2plY3RDb25maWc6IHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnByb2plY3RDb25maWcsXG4gICAgICAgIGRlYnVnTmFtZXNwYWNlOiB0aGlzLl9kZWJ1Z05hbWVzcGFjZSxcbiAgICAgIH0sXG4gICAgKVxuICAgIHRoaXMuX2JpbmRFdmVudExpc3RlbmVycyh0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQpXG5cbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0LmZzTWFwID0gbm9ybWFsaXplRnNNYXAob3B0cy5mc01hcClcbiAgICBpZiAoIXRoaXMuX2V4ZWN1dGlvbkNvbnRleHQuZnNNYXBbb3B0cy5lbnRyeXBvaW50IV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW50cnlwb2ludCBcIiR7b3B0cy5lbnRyeXBvaW50fVwiIG5vdCBmb3VuZGApXG4gICAgfVxuICAgIDsoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fdHNjaXJjdWl0X2NpcmN1aXQgPSB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXRcblxuICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBvcHRzLmVudHJ5cG9pbnQhLnN0YXJ0c1dpdGgoXCIuL1wiKVxuICAgICAgPyBvcHRzLmVudHJ5cG9pbnRcbiAgICAgIDogYC4vJHtvcHRzLmVudHJ5cG9pbnR9YFxuXG4gICAgZGVidWcoXCJmaW5hbCBlbnRyeXBvaW50OlwiLCBlbnRyeXBvaW50KVxuICAgIGF3YWl0IGltcG9ydEV2YWxQYXRoKGVudHJ5cG9pbnQhLCB0aGlzLl9leGVjdXRpb25Db250ZXh0KVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZShjb2RlOiBzdHJpbmcsIG9wdHM6IHsgbmFtZT86IHN0cmluZyB9ID0ge30pIHtcbiAgICBpZiAodGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24udmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiW0NpcmN1aXRSdW5uZXJdIGV4ZWN1dGUgY2FsbGVkIHdpdGggY29kZSBsZW5ndGg6XCIsXG4gICAgICAgIGNvZGUubGVuZ3RoLFxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBjcmVhdGVFeGVjdXRpb25Db250ZXh0KFxuICAgICAgdGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24sXG4gICAgICB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHBsYXRmb3JtOiB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbi5wbGF0Zm9ybSxcbiAgICAgICAgcHJvamVjdENvbmZpZzogdGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24ucHJvamVjdENvbmZpZyxcbiAgICAgICAgZGVidWdOYW1lc3BhY2U6IHRoaXMuX2RlYnVnTmFtZXNwYWNlLFxuICAgICAgfSxcbiAgICApXG4gICAgdGhpcy5fYmluZEV2ZW50TGlzdGVuZXJzKHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQuY2lyY3VpdClcbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0LmZzTWFwW1wiZW50cnlwb2ludC50c3hcIl0gPSBjb2RlXG4gICAgOyhnbG9iYWxUaGlzIGFzIGFueSkuX190c2NpcmN1aXRfY2lyY3VpdCA9IHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQuY2lyY3VpdFxuXG4gICAgYXdhaXQgaW1wb3J0RXZhbFBhdGgoXCIuL2VudHJ5cG9pbnQudHN4XCIsIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQpXG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tcG9uZW50KGNvbXBvbmVudDogYW55LCBvcHRzOiB7IG5hbWU/OiBzdHJpbmcgfSA9IHt9KSB7XG4gICAgaWYgKHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW0NpcmN1aXRSdW5uZXJdIGV4ZWN1dGVDb21wb25lbnQgY2FsbGVkXCIpXG4gICAgfVxuXG4gICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbixcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgcGxhdGZvcm06IHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnBsYXRmb3JtLFxuICAgICAgICBwcm9qZWN0Q29uZmlnOiB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbi5wcm9qZWN0Q29uZmlnLFxuICAgICAgICBkZWJ1Z05hbWVzcGFjZTogdGhpcy5fZGVidWdOYW1lc3BhY2UsXG4gICAgICB9LFxuICAgIClcbiAgICB0aGlzLl9iaW5kRXZlbnRMaXN0ZW5lcnModGhpcy5fZXhlY3V0aW9uQ29udGV4dC5jaXJjdWl0KVxuICAgIDsoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fdHNjaXJjdWl0X2NpcmN1aXQgPSB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXRcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgPyBjb21wb25lbnQoKSA6IGNvbXBvbmVudFxuICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQuY2lyY3VpdC5hZGQoZWxlbWVudCBhcyBhbnkpXG4gIH1cblxuICBvbihldmVudDogc3RyaW5nLCBjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnRdID8/PSBbXVxuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKVxuICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQ/LmNpcmN1aXQub24oZXZlbnQgYXMgYW55LCBjYWxsYmFjaylcbiAgfVxuXG4gIGFzeW5jIHJlbmRlclVudGlsU2V0dGxlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2V4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNpcmN1aXQgaGFzIGJlZW4gY3JlYXRlZFwiKVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQucmVuZGVyVW50aWxTZXR0bGVkKClcbiAgfVxuXG4gIGFzeW5jIGdldENpcmN1aXRKc29uKCk6IFByb21pc2U8QW55Q2lyY3VpdEVsZW1lbnRbXT4ge1xuICAgIGlmICghdGhpcy5fZXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2lyY3VpdCBoYXMgYmVlbiBjcmVhdGVkXCIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQuZ2V0Q2lyY3VpdEpzb24oKVxuICB9XG5cbiAgY2xlYXJFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fZXhlY3V0aW9uQ29udGV4dD8uY2lyY3VpdCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBpbiB0aGlzLl9ldmVudExpc3RlbmVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgIGNvbnN0IGNpcmN1aXQgPSB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IDxleHBsYW5hdGlvbj5cbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyPzogKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgIH1cbiAgICAgICAgICBjaXJjdWl0LnJlbW92ZUxpc3RlbmVyPy4oZXZlbnQsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBldmVudCBpbiB0aGlzLl9ldmVudExpc3RlbmVycykge1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGtpbGwoKSB7XG4gICAgLy8gQ2xlYW51cCByZXNvdXJjZXNcbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gbnVsbFxuICB9XG5cbiAgYXN5bmMgc2V0U25pcHBldHNBcGlCYXNlVXJsKGJhc2VVcmw6IHN0cmluZykge1xuICAgIHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnNuaXBwZXRzQXBpQmFzZVVybCA9IGJhc2VVcmxcbiAgfVxuXG4gIGFzeW5jIHNldFBsYXRmb3JtQ29uZmlnKHBsYXRmb3JtOiBQbGF0Zm9ybUNvbmZpZykge1xuICAgIHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnBsYXRmb3JtID0gcGxhdGZvcm1cbiAgfVxuXG4gIGFzeW5jIHNldFByb2plY3RDb25maWcocHJvamVjdDogUGFydGlhbDxQbGF0Zm9ybUNvbmZpZz4pIHtcbiAgICB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbi5wcm9qZWN0Q29uZmlnID0gcHJvamVjdFxuICB9XG5cbiAgYXN5bmMgZW5hYmxlRGVidWcobmFtZXNwYWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWJ1Z05hbWVzcGFjZSA9IG5hbWVzcGFjZVxuICAgIGlmICh0aGlzLl9leGVjdXRpb25Db250ZXh0KSB7XG4gICAgICBjb25zdCBjaXJjdWl0ID0gdGhpcy5fZXhlY3V0aW9uQ29udGV4dC5jaXJjdWl0IGFzIGFueVxuICAgICAgY2lyY3VpdC5lbmFibGVEZWJ1Zz8uKG5hbWVzcGFjZSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9iaW5kRXZlbnRMaXN0ZW5lcnMoY2lyY3VpdDogUm9vdENpcmN1aXQpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IGluIHRoaXMuX2V2ZW50TGlzdGVuZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICBjaXJjdWl0Lm9uKGV2ZW50IGFzIGFueSwgbGlzdGVuZXIgYXMgYW55KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogUmV0dXJucyB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgYSBwYXRoLCBzaW1pbGFyIHRvIE5vZGUuanMgcGF0aC5kaXJuYW1lXG4gKiBXb3JrcyBvbiBib3RoIFVuaXggYW5kIFdpbmRvd3MgcGF0aHNcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGV4dHJhY3QgdGhlIGRpcmVjdG9yeSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgZGlyZWN0b3J5IHBhcnQgb2YgdGhlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gXCIuXCJcblxuICAvLyBOb3JtYWxpemUgcGF0aCBzZXBhcmF0b3JzIHRvIGZvcndhcmQgc2xhc2hlc1xuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIilcblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlc1xuICBjb25zdCBjbGVhblBhdGggPSBub3JtYWxpemVkUGF0aC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIHNsYXNoZXMsIHJldHVybiBcIi5cIlxuICBpZiAoY2xlYW5QYXRoLmluZGV4T2YoXCIvXCIpID09PSAtMSkgcmV0dXJuIFwiLlwiXG5cbiAgLy8gUmV0dXJuIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3Qgc2xhc2hcbiAgcmV0dXJuIGNsZWFuUGF0aC5zdWJzdHJpbmcoMCwgY2xlYW5QYXRoLmxhc3RJbmRleE9mKFwiL1wiKSkgfHwgXCIvXCJcbn1cbiIsICJpbXBvcnQgeyBub3JtYWxpemVGaWxlUGF0aCB9IGZyb20gXCIuL25vcm1hbGl6ZUZzTWFwXCJcblxudHlwZSBSYXdUc0NvbmZpZyA9IHtcbiAgY29tcGlsZXJPcHRpb25zPzoge1xuICAgIGJhc2VVcmw/OiBzdHJpbmdcbiAgICBwYXRocz86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRzQ29uZmlnUGF0aHNJbmZvID0ge1xuICBiYXNlVXJsOiBzdHJpbmdcbiAgcGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHNDb25maWcoXG4gIGZzTWFwT3JBbGxGaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmdbXSxcbik6IFRzQ29uZmlnUGF0aHNJbmZvIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KGZzTWFwT3JBbGxGaWxlUGF0aHMpKSByZXR1cm4gbnVsbFxuICBjb25zdCB0c2NvbmZpZ0NvbnRlbnQgPSBmc01hcE9yQWxsRmlsZVBhdGhzW1widHNjb25maWcuanNvblwiXVxuICBpZiAoIXRzY29uZmlnQ29udGVudCkgcmV0dXJuIG51bGxcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRzY29uZmlnQ29udGVudCkgYXMgUmF3VHNDb25maWdcbiAgICByZXR1cm4gcGFyc2VkPy5jb21waWxlck9wdGlvbnM/LnBhdGhzXG4gICAgICA/IHtcbiAgICAgICAgICBiYXNlVXJsOiBwYXJzZWQuY29tcGlsZXJPcHRpb25zLmJhc2VVcmwgfHwgXCIuXCIsXG4gICAgICAgICAgcGF0aHM6IHBhcnNlZC5jb21waWxlck9wdGlvbnMucGF0aHMsXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV2l0aFRzY29uZmlnUGF0aHMob3B0czoge1xuICBpbXBvcnRQYXRoOiBzdHJpbmdcbiAgbm9ybWFsaXplZEZpbGVQYXRoTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIGV4dGVuc2lvbnM6IHN0cmluZ1tdXG4gIHRzQ29uZmlnOiBUc0NvbmZpZ1BhdGhzSW5mbyB8IG51bGxcbn0pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBpbXBvcnRQYXRoLCBub3JtYWxpemVkRmlsZVBhdGhNYXAsIGV4dGVuc2lvbnMsIHRzQ29uZmlnIH0gPSBvcHRzXG4gIGlmICghdHNDb25maWcpIHJldHVybiBudWxsXG4gIGNvbnN0IHsgYmFzZVVybCwgcGF0aHMgfSA9IHRzQ29uZmlnXG5cbiAgY29uc3QgdHJ5UmVzb2x2ZUNhbmRpZGF0ZSA9IChjYW5kaWRhdGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDYW5kaWRhdGUgPSBub3JtYWxpemVGaWxlUGF0aChjYW5kaWRhdGUpXG4gICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMobm9ybWFsaXplZENhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkRmlsZVBhdGhNYXAuZ2V0KG5vcm1hbGl6ZWRDYW5kaWRhdGUpIVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICBjb25zdCB3aXRoRXh0ID0gYCR7bm9ybWFsaXplZENhbmRpZGF0ZX0uJHtleHR9YFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMod2l0aEV4dCkpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5nZXQod2l0aEV4dCkhXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGNvbnN0IFthbGlhcywgdGFyZ2V0c10gb2YgT2JqZWN0LmVudHJpZXMocGF0aHMpKSB7XG4gICAgLy8gU3VwcG9ydCBwYXR0ZXJucyBsaWtlIFwiQHNyYy8qXCIgb3IgXCJ1dGlscy8qXCIgYW5kIGFsc28gZXhhY3QgbWF0Y2hlcyB3aXRob3V0IFwiKlwiXG4gICAgY29uc3QgaGFzV2lsZGNhcmQgPSBhbGlhcy5pbmNsdWRlcyhcIipcIilcbiAgICBpZiAoaGFzV2lsZGNhcmQpIHtcbiAgICAgIGNvbnN0IFtwcmVmaXgsIHN1ZmZpeF0gPSBhbGlhcy5zcGxpdChcIipcIilcbiAgICAgIGlmIChcbiAgICAgICAgIWltcG9ydFBhdGguc3RhcnRzV2l0aChwcmVmaXgpIHx8XG4gICAgICAgICFpbXBvcnRQYXRoLmVuZHNXaXRoKHN1ZmZpeCB8fCBcIlwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBzdGFyTWF0Y2ggPSBpbXBvcnRQYXRoLnNsaWNlKFxuICAgICAgICBwcmVmaXgubGVuZ3RoLFxuICAgICAgICBpbXBvcnRQYXRoLmxlbmd0aCAtIChzdWZmaXggPyBzdWZmaXgubGVuZ3RoIDogMCksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkID0gdGFyZ2V0LnJlcGxhY2UoXCIqXCIsIHN0YXJNYXRjaClcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID1cbiAgICAgICAgICBiYXNlVXJsICYmICFyZXBsYWNlZC5zdGFydHNXaXRoKFwiLi9cIikgJiYgIXJlcGxhY2VkLnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICAgICAgICA/IGAke2Jhc2VVcmx9LyR7cmVwbGFjZWR9YFxuICAgICAgICAgICAgOiByZXBsYWNlZFxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHRyeVJlc29sdmVDYW5kaWRhdGUoY2FuZGlkYXRlKVxuICAgICAgICBpZiAocmVzb2x2ZWQpIHJldHVybiByZXNvbHZlZFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW1wb3J0UGF0aCAhPT0gYWxpYXMpIGNvbnRpbnVlXG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9XG4gICAgICAgICAgYmFzZVVybCAmJiAhdGFyZ2V0LnN0YXJ0c1dpdGgoXCIuL1wiKSAmJiAhdGFyZ2V0LnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICAgICAgICA/IGAke2Jhc2VVcmx9LyR7dGFyZ2V0fWBcbiAgICAgICAgICAgIDogdGFyZ2V0XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gdHJ5UmVzb2x2ZUNhbmRpZGF0ZShjYW5kaWRhdGUpXG4gICAgICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuIHJlc29sdmVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiIsICJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIi4vZGlybmFtZVwiXG5cbi8qKlxuICogUmVzb2x2ZSBhbiBpbXBvcnRQYXRoIHJlbGF0aXZlIHRvIGEgY3dkLCBzdXBwb3J0aW5nIC4uLywgLi8gYW5kIGFic29sdXRlIHBhdGhzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlbGF0aXZlUGF0aChpbXBvcnRQYXRoOiBzdHJpbmcsIGN3ZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gSGFuZGxlIHBhcmVudCBkaXJlY3RvcnkgbmF2aWdhdGlvblxuICBpZiAoaW1wb3J0UGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSB7XG4gICAgY29uc3QgcGFyZW50RGlyID0gZGlybmFtZShjd2QpXG4gICAgcmV0dXJuIHJlc29sdmVSZWxhdGl2ZVBhdGgoaW1wb3J0UGF0aC5zbGljZSgzKSwgcGFyZW50RGlyKVxuICB9XG4gIC8vIEhhbmRsZSBjdXJyZW50IGRpcmVjdG9yeVxuICBpZiAoaW1wb3J0UGF0aC5zdGFydHNXaXRoKFwiLi9cIikpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVJlbGF0aXZlUGF0aChpbXBvcnRQYXRoLnNsaWNlKDIpLCBjd2QpXG4gIH1cbiAgLy8gSGFuZGxlIGFic29sdXRlIHBhdGhcbiAgaWYgKGltcG9ydFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICByZXR1cm4gaW1wb3J0UGF0aC5zbGljZSgxKVxuICB9XG4gIC8vIEhhbmRsZSByZWxhdGl2ZSBwYXRoXG4gIHJldHVybiBgJHtjd2R9LyR7aW1wb3J0UGF0aH1gXG59XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRmlsZVBhdGggfSBmcm9tIFwiLi9ub3JtYWxpemVGc01hcFwiXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcImxpYi91dGlscy9kaXJuYW1lXCJcbmltcG9ydCB7IGdldFRzQ29uZmlnLCByZXNvbHZlV2l0aFRzY29uZmlnUGF0aHMgfSBmcm9tIFwiLi90c2NvbmZpZ1BhdGhzXCJcbmltcG9ydCB7IHJlc29sdmVSZWxhdGl2ZVBhdGggfSBmcm9tIFwibGliL3V0aWxzL3Jlc29sdmVSZWxhdGl2ZVBhdGhcIlxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZpbGVQYXRoID0gKFxuICB1bmtub3duRmlsZVBhdGg6IHN0cmluZyxcbiAgZnNNYXBPckFsbEZpbGVQYXRoczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1tdLFxuICBjd2Q/OiBzdHJpbmcsXG4pID0+IHtcbiAgLy8gSGFuZGxlIHBhcmVudCBkaXJlY3RvcnkgbmF2aWdhdGlvbiBwcm9wZXJseVxuICBjb25zdCByZXNvbHZlZFBhdGggPSBjd2RcbiAgICA/IHJlc29sdmVSZWxhdGl2ZVBhdGgodW5rbm93bkZpbGVQYXRoLCBjd2QpXG4gICAgOiB1bmtub3duRmlsZVBhdGhcblxuICBjb25zdCBmaWxlUGF0aHMgPSBuZXcgU2V0KFxuICAgIEFycmF5LmlzQXJyYXkoZnNNYXBPckFsbEZpbGVQYXRocylcbiAgICAgID8gZnNNYXBPckFsbEZpbGVQYXRoc1xuICAgICAgOiBPYmplY3Qua2V5cyhmc01hcE9yQWxsRmlsZVBhdGhzKSxcbiAgKVxuXG4gIGlmIChmaWxlUGF0aHMuaGFzKHJlc29sdmVkUGF0aCkpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRQYXRoXG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkRmlsZVBhdGhNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpXG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgZmlsZVBhdGhzKSB7XG4gICAgbm9ybWFsaXplZEZpbGVQYXRoTWFwLnNldChub3JtYWxpemVGaWxlUGF0aChmaWxlUGF0aCksIGZpbGVQYXRoKVxuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUZpbGVQYXRoKHJlc29sdmVkUGF0aClcblxuICBpZiAobm9ybWFsaXplZEZpbGVQYXRoTWFwLmhhcyhub3JtYWxpemVkUmVzb2x2ZWRQYXRoKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkRmlsZVBhdGhNYXAuZ2V0KG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGgpIVxuICB9XG5cbiAgLy8gU2VhcmNoIGZvciBmaWxlIHdpdGggYSBzZXQgb2YgZGlmZmVyZW50IGV4dGVuc2lvbnNcbiAgY29uc3QgZXh0ZW5zaW9uID0gW1widHN4XCIsIFwidHNcIiwgXCJqc29uXCIsIFwianNcIiwgXCJqc3hcIiwgXCJvYmpcIiwgXCJnbHRmXCIsIFwiZ2xiXCJdXG4gIGZvciAoY29uc3QgZXh0IG9mIGV4dGVuc2lvbikge1xuICAgIGNvbnN0IHBvc3NpYmxlRmlsZVBhdGggPSBgJHtub3JtYWxpemVkUmVzb2x2ZWRQYXRofS4ke2V4dH1gXG4gICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMocG9zc2libGVGaWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkRmlsZVBhdGhNYXAuZ2V0KHBvc3NpYmxlRmlsZVBhdGgpIVxuICAgIH1cbiAgfVxuXG4gIC8vIFRyeSByZXNvbHZpbmcgdXNpbmcgdHNjb25maWcgXCJwYXRoc1wiIG1hcHBpbmcgd2hlbiB0aGUgaW1wb3J0IGlzIG5vbi1yZWxhdGl2ZVxuICBjb25zdCB0c0NvbmZpZyA9XG4gICAgIUFycmF5LmlzQXJyYXkoZnNNYXBPckFsbEZpbGVQYXRocykgJiZcbiAgICB0eXBlb2YgZnNNYXBPckFsbEZpbGVQYXRocyA9PT0gXCJvYmplY3RcIlxuICAgICAgPyBnZXRUc0NvbmZpZyhmc01hcE9yQWxsRmlsZVBhdGhzKVxuICAgICAgOiBudWxsXG5cbiAgaWYgKCF1bmtub3duRmlsZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpICYmICF1bmtub3duRmlsZVBhdGguc3RhcnRzV2l0aChcIi4uL1wiKSkge1xuICAgIGNvbnN0IHZpYVRzY29uZmlnID0gcmVzb2x2ZVdpdGhUc2NvbmZpZ1BhdGhzKHtcbiAgICAgIGltcG9ydFBhdGg6IHVua25vd25GaWxlUGF0aCxcbiAgICAgIG5vcm1hbGl6ZWRGaWxlUGF0aE1hcCxcbiAgICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbixcbiAgICAgIHRzQ29uZmlnLFxuICAgIH0pXG4gICAgaWYgKHZpYVRzY29uZmlnKSByZXR1cm4gdmlhVHNjb25maWdcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGl0J3MgYW4gYWJzb2x1dGUgaW1wb3J0XG4gIGlmICghdW5rbm93bkZpbGVQYXRoLnN0YXJ0c1dpdGgoXCIuL1wiKSAmJiAhdW5rbm93bkZpbGVQYXRoLnN0YXJ0c1dpdGgoXCIuLi9cIikpIHtcbiAgICBjb25zdCBub3JtYWxpemVkVW5rbm93bkZpbGVQYXRoID0gbm9ybWFsaXplRmlsZVBhdGgodW5rbm93bkZpbGVQYXRoKVxuICAgIGlmIChub3JtYWxpemVkRmlsZVBhdGhNYXAuaGFzKG5vcm1hbGl6ZWRVbmtub3duRmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZEZpbGVQYXRoTWFwLmdldChub3JtYWxpemVkVW5rbm93bkZpbGVQYXRoKSFcbiAgICB9XG4gICAgZm9yIChjb25zdCBleHQgb2YgZXh0ZW5zaW9uKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZUZpbGVQYXRoID0gYCR7bm9ybWFsaXplZFVua25vd25GaWxlUGF0aH0uJHtleHR9YFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMocG9zc2libGVGaWxlUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5nZXQocG9zc2libGVGaWxlUGF0aCkhXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVGaWxlUGF0aE9yVGhyb3cgPSAoXG4gIHVua25vd25GaWxlUGF0aDogc3RyaW5nLFxuICBmc01hcE9yQWxsRmlsZVBhdGhzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nW10sXG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZWRGaWxlUGF0aCA9IHJlc29sdmVGaWxlUGF0aCh1bmtub3duRmlsZVBhdGgsIGZzTWFwT3JBbGxGaWxlUGF0aHMpXG4gIGlmICghcmVzb2x2ZWRGaWxlUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGaWxlIG5vdCBmb3VuZCBcIiR7dW5rbm93bkZpbGVQYXRofVwiLCBhdmFpbGFibGUgcGF0aHM6XFxuXFxuJHtPYmplY3Qua2V5cyhmc01hcE9yQWxsRmlsZVBhdGhzKS5qb2luKFwiLCBcIil9YCxcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkRmlsZVBhdGhcbn1cbiIsICJleHBvcnQgY29uc3QgZ2V0SW1wb3J0c0Zyb21Db2RlID0gKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgLy8gTWF0Y2ggYmFzaWMgaW1wb3J0IHBhdHRlcm5zIGluY2x1ZGluZyBjb21iaW5lZCBkZWZhdWx0IGFuZCBuYW1lc3BhY2UgaW1wb3J0c1xuICBjb25zdCBpbXBvcnRSZWdleCA9XG4gICAgL15cXHMqaW1wb3J0XFxzKyg/Oig/OltcXHdcXHNdKyxcXHMqKT8oPzpcXCpcXHMrYXNcXHMrW1xcd1xcc10rfFxce1tcXHNcXHcsXStcXH18XFx3KylcXHMrZnJvbVxccyopP1snXCJdKC4rPylbJ1wiXS9nbVxuICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiA8ZXhwbGFuYXRpb24+XG4gIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgIGltcG9ydHMucHVzaChtYXRjaFsxXSlcbiAgfVxuXG4gIC8vIE1hdGNoIHJlLWV4cG9ydHNcbiAgY29uc3QgcmVFeHBvcnRSZWdleCA9XG4gICAgL15cXHMqZXhwb3J0XFxzKyg/OlxcKnwoPzpcXHtbXFxzXFx3LF0rXFx9KSlcXHMrZnJvbVxccypbJ1wiXSguKz8pWydcIl0vZ21cbiAgbGV0IHJlRXhwb3J0TWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGxcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0Fzc2lnbkluRXhwcmVzc2lvbnM6IDxleHBsYW5hdGlvbj5cbiAgd2hpbGUgKChyZUV4cG9ydE1hdGNoID0gcmVFeHBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgIGltcG9ydHMucHVzaChyZUV4cG9ydE1hdGNoWzFdKVxuICB9XG5cbiAgcmV0dXJuIGltcG9ydHNcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlRmlsZVBhdGggfSBmcm9tIFwibGliL3J1bm5lci9yZXNvbHZlRmlsZVBhdGhcIlxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbENvbXBpbGVkSnMoXG4gIGNvbXBpbGVkQ29kZTogc3RyaW5nLFxuICBwcmVTdXBwbGllZEltcG9ydHM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGN3ZD86IHN0cmluZyxcbikge1xuICA7KGdsb2JhbFRoaXMgYXMgYW55KS5fX3RzY2lyY3VpdF9yZXF1aXJlID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkRmlsZVBhdGggPSByZXNvbHZlRmlsZVBhdGgobmFtZSwgcHJlU3VwcGxpZWRJbXBvcnRzLCBjd2QpXG5cbiAgICBjb25zdCBoYXNSZXNvbHZlZEZpbGVQYXRoID1cbiAgICAgIHJlc29sdmVkRmlsZVBhdGggJiYgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkRmlsZVBhdGhdXG5cbiAgICBpZiAoIXByZVN1cHBsaWVkSW1wb3J0c1tuYW1lXSAmJiAhaGFzUmVzb2x2ZWRGaWxlUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgXCIke25hbWV9XCIgbm90IGZvdW5kICR7Y3dkID8gYGluIFwiJHtjd2R9XCJgIDogXCJcIn1gKVxuICAgIH1cblxuICAgIGNvbnN0IG1vZCA9XG4gICAgICBwcmVTdXBwbGllZEltcG9ydHNbbmFtZV0gfHwgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkRmlsZVBhdGghXVxuICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIGlmICghKHByb3AgaW4gdGFyZ2V0KSkge1xuICAgICAgICAgIGlmIChwcm9wID09PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5kZWZhdWx0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQuX19lc01vZHVsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHRhcmdldCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocHJvcCA9PT0gXCJfX2VzTW9kdWxlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvbXBvbmVudCBcIiR7U3RyaW5nKHByb3ApfVwiIGlzIG5vdCBleHBvcnRlZCBieSBcIiR7bmFtZX1cImAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wIGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmdW5jdGlvbkJvZHkgPSBgXG4gIHZhciBleHBvcnRzID0ge307XG4gIHZhciByZXF1aXJlID0gZ2xvYmFsVGhpcy5fX3RzY2lyY3VpdF9yZXF1aXJlO1xuICB2YXIgbW9kdWxlID0geyBleHBvcnRzIH07XG4gIHZhciBjaXJjdWl0ID0gZ2xvYmFsVGhpcy5fX3RzY2lyY3VpdF9jaXJjdWl0O1xuICAke2NvbXBpbGVkQ29kZX07XG4gIHJldHVybiBtb2R1bGU7YC50cmltKClcbiAgcmV0dXJuIEZ1bmN0aW9uKGZ1bmN0aW9uQm9keSkuY2FsbChnbG9iYWxUaGlzKVxufVxuIiwgImltcG9ydCB7XG4gIHJlc29sdmVGaWxlUGF0aCxcbiAgcmVzb2x2ZUZpbGVQYXRoT3JUaHJvdyxcbn0gZnJvbSBcImxpYi9ydW5uZXIvcmVzb2x2ZUZpbGVQYXRoXCJcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibGliL3V0aWxzL2Rpcm5hbWVcIlxuaW1wb3J0IHsgZ2V0SW1wb3J0c0Zyb21Db2RlIH0gZnJvbSBcImxpYi91dGlscy9nZXQtaW1wb3J0cy1mcm9tLWNvZGVcIlxuaW1wb3J0IHsgZXZhbENvbXBpbGVkSnMgfSBmcm9tIFwiLi9ldmFsLWNvbXBpbGVkLWpzXCJcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL2V4ZWN1dGlvbi1jb250ZXh0XCJcbmltcG9ydCB7IGltcG9ydEV2YWxQYXRoIH0gZnJvbSBcIi4vaW1wb3J0LWV2YWwtcGF0aFwiXG5pbXBvcnQgRGVidWcgZnJvbSBcImRlYnVnXCJcbmltcG9ydCB7IGlzU3RhdGljQXNzZXRQYXRoIH0gZnJvbSBcImxpYi9zaGFyZWQvc3RhdGljLWFzc2V0LWV4dGVuc2lvbnNcIlxuaW1wb3J0IHsgdHJhbnNmb3JtV2l0aFN1Y3Jhc2UgfSBmcm9tIFwiLi90cmFuc2Zvcm0td2l0aC1zdWNyYXNlXCJcblxuY29uc3QgZGVidWcgPSBEZWJ1ZyhcInRzY2k6ZXZhbDppbXBvcnQtbG9jYWwtZmlsZVwiKVxuXG5leHBvcnQgY29uc3QgaW1wb3J0TG9jYWxGaWxlID0gYXN5bmMgKFxuICBpbXBvcnROYW1lOiBzdHJpbmcsXG4gIGN0eDogRXhlY3V0aW9uQ29udGV4dCxcbiAgZGVwdGggPSAwLFxuKSA9PiB7XG4gIGRlYnVnKFwiaW1wb3J0TG9jYWxGaWxlIGNhbGxlZCB3aXRoOlwiLCB7XG4gICAgaW1wb3J0TmFtZSxcbiAgfSlcblxuICBjb25zdCB7IGZzTWFwLCBwcmVTdXBwbGllZEltcG9ydHMgfSA9IGN0eFxuXG4gIGNvbnN0IGZzUGF0aCA9IHJlc29sdmVGaWxlUGF0aE9yVGhyb3coaW1wb3J0TmFtZSwgZnNNYXApXG4gIGRlYnVnKFwiZnNQYXRoOlwiLCBmc1BhdGgpXG4gIGlmICghY3R4LmZzTWFwW2ZzUGF0aF0pIHtcbiAgICBkZWJ1ZyhcImZzUGF0aCBub3QgZm91bmQgaW4gZnNNYXA6XCIsIGZzUGF0aClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgXCIke2ZzUGF0aH1cIiBub3QgZm91bmRgKVxuICB9XG4gIGNvbnN0IGZpbGVDb250ZW50ID0gZnNNYXBbZnNQYXRoXVxuICBkZWJ1ZyhcImZpbGVDb250ZW50OlwiLCBmaWxlQ29udGVudD8uc2xpY2UoMCwgMTAwKSlcbiAgaWYgKGZzUGF0aC5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgY29uc3QganNvbkRhdGEgPSBKU09OLnBhcnNlKGZpbGVDb250ZW50KVxuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmc1BhdGhdID0ge1xuICAgICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6IGpzb25EYXRhLFxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0YXRpY0Fzc2V0UGF0aChmc1BhdGgpKSB7XG4gICAgY29uc3QgcGxhdGZvcm1Db25maWcgPSBjdHguY2lyY3VpdC5wbGF0Zm9ybVxuICAgIC8vIFVzZSBwcm9qZWN0QmFzZVVybCBmb3Igc3RhdGljIGZpbGUgaW1wb3J0c1xuICAgIGNvbnN0IHN0YXRpY1VybCA9IGAke3BsYXRmb3JtQ29uZmlnPy5wcm9qZWN0QmFzZVVybCA/PyBcIlwifS8ke2ZzUGF0aC5zdGFydHNXaXRoKFwiLi9cIikgPyBmc1BhdGguc2xpY2UoMikgOiBmc1BhdGh9YFxuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmc1BhdGhdID0ge1xuICAgICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6IHN0YXRpY1VybCxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZnNQYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSB8fCBmc1BhdGguZW5kc1dpdGgoXCIudHNcIikpIHtcbiAgICBjb25zdCBpbXBvcnROYW1lcyA9IGdldEltcG9ydHNGcm9tQ29kZShmaWxlQ29udGVudClcblxuICAgIGZvciAoY29uc3QgaW1wb3J0TmFtZSBvZiBpbXBvcnROYW1lcykge1xuICAgICAgaWYgKCFwcmVTdXBwbGllZEltcG9ydHNbaW1wb3J0TmFtZV0pIHtcbiAgICAgICAgYXdhaXQgaW1wb3J0RXZhbFBhdGgoaW1wb3J0TmFtZSwgY3R4LCBkZXB0aCArIDEsIHtcbiAgICAgICAgICBjd2Q6IGRpcm5hbWUoZnNQYXRoKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRDb2RlID0gdHJhbnNmb3JtV2l0aFN1Y3Jhc2UoZmlsZUNvbnRlbnQsIGZzUGF0aClcbiAgICAgIGRlYnVnKFwiZXZhbENvbXBpbGVkSnMgY2FsbGVkIHdpdGg6XCIsIHtcbiAgICAgICAgY29kZTogdHJhbnNmb3JtZWRDb2RlLnNsaWNlKDAsIDEwMCksXG4gICAgICAgIGRpcm5hbWU6IGRpcm5hbWUoZnNQYXRoKSxcbiAgICAgIH0pXG4gICAgICBjb25zdCBpbXBvcnRSdW5SZXN1bHQgPSBldmFsQ29tcGlsZWRKcyhcbiAgICAgICAgdHJhbnNmb3JtZWRDb2RlLFxuICAgICAgICBwcmVTdXBwbGllZEltcG9ydHMsXG4gICAgICAgIGRpcm5hbWUoZnNQYXRoKSxcbiAgICAgIClcbiAgICAgIGRlYnVnKFwiaW1wb3J0UnVuUmVzdWx0OlwiLCB7XG4gICAgICAgIGZzUGF0aCxcbiAgICAgICAgaW1wb3J0UnVuUmVzdWx0LFxuICAgICAgfSlcbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmc1BhdGhdID0gaW1wb3J0UnVuUmVzdWx0LmV4cG9ydHNcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFdmFsIGNvbXBpbGVkIGpzIGVycm9yIGZvciBcIiR7aW1wb3J0TmFtZX1cIjogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2UgaWYgKGZzUGF0aC5lbmRzV2l0aChcIi5qc1wiKSkge1xuICAgIC8vIEZvciAuanMgZmlsZXMsIGVzcGVjaWFsbHkgZnJvbSBub2RlX21vZHVsZXMsIHdlIG5lZWQgdG8gdHJhbnNmb3JtIHRoZW1cbiAgICBwcmVTdXBwbGllZEltcG9ydHNbZnNQYXRoXSA9IGV2YWxDb21waWxlZEpzKFxuICAgICAgdHJhbnNmb3JtV2l0aFN1Y3Jhc2UoZmlsZUNvbnRlbnQsIGZzUGF0aCksXG4gICAgICBwcmVTdXBwbGllZEltcG9ydHMsXG4gICAgICBkaXJuYW1lKGZzUGF0aCksXG4gICAgKS5leHBvcnRzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVuc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uIFwiJHtmc1BhdGguc3BsaXQoXCIuXCIpLnBvcCgpfVwiIGZvciBcIiR7ZnNQYXRofVwiYCxcbiAgICApXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgU1RBVElDX0FTU0VUX0VYVEVOU0lPTlMgPSBbXG4gIFwiLmdsYlwiLFxuICBcIi5raWNhZF9tb2RcIixcbiAgXCIuZ2x0ZlwiLFxuICBcIi5vYmpcIixcbiAgXCIuc3RsXCIsXG5dXG5cbmV4cG9ydCBjb25zdCBpc1N0YXRpY0Fzc2V0UGF0aCA9IChwYXRoOiBzdHJpbmcpID0+XG4gIFNUQVRJQ19BU1NFVF9FWFRFTlNJT05TLnNvbWUoKGV4dCkgPT4gcGF0aC5lbmRzV2l0aChleHQpKVxuIiwgImltcG9ydCB7IHRyYW5zZm9ybSwgdHlwZSBUcmFuc2Zvcm0gYXMgU3VjcmFzZVRyYW5zZm9ybSB9IGZyb20gXCJzdWNyYXNlXCJcblxuY29uc3QgVFNfRVhURU5TSU9OUyA9IG5ldyBTZXQoW1wiLnRzXCIsIFwiLnRzeFwiLCBcIi5tdHNcIiwgXCIuY3RzXCJdKVxuY29uc3QgSlNYX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFtcIi50c3hcIiwgXCIuanN4XCIsIFwiLnRzXCJdKVxuXG5jb25zdCBzdHJpcFF1ZXJ5QW5kSGFzaCA9IChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5SW5kZXggPSBmaWxlUGF0aC5pbmRleE9mKFwiP1wiKVxuICBjb25zdCBoYXNoSW5kZXggPSBmaWxlUGF0aC5pbmRleE9mKFwiI1wiKVxuXG4gIGxldCBlbmRJbmRleCA9IGZpbGVQYXRoLmxlbmd0aFxuXG4gIGlmIChxdWVyeUluZGV4ICE9PSAtMSAmJiBoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgZW5kSW5kZXggPSBNYXRoLm1pbihxdWVyeUluZGV4LCBoYXNoSW5kZXgpXG4gIH0gZWxzZSBpZiAocXVlcnlJbmRleCAhPT0gLTEpIHtcbiAgICBlbmRJbmRleCA9IHF1ZXJ5SW5kZXhcbiAgfSBlbHNlIGlmIChoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgZW5kSW5kZXggPSBoYXNoSW5kZXhcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5zbGljZSgwLCBlbmRJbmRleClcbn1cblxuY29uc3QgZ2V0RXh0ZW5zaW9uID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBzdHJpcFF1ZXJ5QW5kSGFzaChmaWxlUGF0aClcbiAgY29uc3QgbGFzdERvdEluZGV4ID0gbm9ybWFsaXplZFBhdGgubGFzdEluZGV4T2YoXCIuXCIpXG5cbiAgaWYgKGxhc3REb3RJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG5cbiAgY29uc3QgbGFzdFNsYXNoSW5kZXggPSBNYXRoLm1heChcbiAgICBub3JtYWxpemVkUGF0aC5sYXN0SW5kZXhPZihcIi9cIiksXG4gICAgbm9ybWFsaXplZFBhdGgubGFzdEluZGV4T2YoXCJcXFxcXCIpLFxuICApXG5cbiAgaWYgKGxhc3RTbGFzaEluZGV4ID4gbGFzdERvdEluZGV4KSB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkUGF0aC5zbGljZShsYXN0RG90SW5kZXgpLnRvTG93ZXJDYXNlKClcbn1cblxuY29uc3QgZ2V0VHJhbnNmb3Jtc0ZvckZpbGVQYXRoID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RXh0ZW5zaW9uKGZpbGVQYXRoKVxuXG4gIGNvbnN0IHRyYW5zZm9ybXM6IFN1Y3Jhc2VUcmFuc2Zvcm1bXSA9IFtcImltcG9ydHNcIl1cblxuICBpZiAoVFNfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgIHRyYW5zZm9ybXMudW5zaGlmdChcInR5cGVzY3JpcHRcIilcbiAgfVxuXG4gIGlmIChKU1hfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgIHRyYW5zZm9ybXMucHVzaChcImpzeFwiKVxuICB9XG5cbiAgcmV0dXJuIHRyYW5zZm9ybXNcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVdpdGhTdWNyYXNlID0gKGNvZGU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zdCB0cmFuc2Zvcm1zID0gZ2V0VHJhbnNmb3Jtc0ZvckZpbGVQYXRoKGZpbGVQYXRoKVxuICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkQ29kZSB9ID0gdHJhbnNmb3JtKGNvZGUsIHtcbiAgICBmaWxlUGF0aCxcbiAgICBwcm9kdWN0aW9uOiB0cnVlLFxuICAgIHRyYW5zZm9ybXMsXG4gIH0pXG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkQ29kZVxufVxuIiwgImltcG9ydCB7IGV2YWxDb21waWxlZEpzIH0gZnJvbSBcIi4vZXZhbC1jb21waWxlZC1qc1wiXG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi9leGVjdXRpb24tY29udGV4dFwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBvcnRTbmlwcGV0KFxuICBpbXBvcnROYW1lOiBzdHJpbmcsXG4gIGN0eDogRXhlY3V0aW9uQ29udGV4dCxcbiAgZGVwdGggPSAwLFxuKSB7XG4gIGNvbnN0IHsgcHJlU3VwcGxpZWRJbXBvcnRzIH0gPSBjdHhcbiAgY29uc3QgZnVsbFNuaXBwZXROYW1lID0gaW1wb3J0TmFtZS5yZXBsYWNlKFwiQHRzY2kvXCIsIFwiXCIpLnJlcGxhY2UoXCIuXCIsIFwiL1wiKVxuXG4gIGNvbnN0IHsgY2pzLCBlcnJvciB9ID0gYXdhaXQgZ2xvYmFsVGhpc1xuICAgIC5mZXRjaChgJHtjdHguY2pzUmVnaXN0cnlVcmx9LyR7ZnVsbFNuaXBwZXROYW1lfWApXG4gICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gKHsgY2pzOiBhd2FpdCByZXMudGV4dCgpLCBlcnJvcjogbnVsbCB9KSlcbiAgICAuY2F0Y2goKGUpID0+ICh7IGVycm9yOiBlLCBjanM6IG51bGwgfSkpXG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIGltcG9ydFwiLCBpbXBvcnROYW1lLCBlcnJvcilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdID0gZXZhbENvbXBpbGVkSnMoXG4gICAgICBjanMhLFxuICAgICAgcHJlU3VwcGxpZWRJbXBvcnRzLFxuICAgICkuZXhwb3J0c1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGltcG9ydGluZyBzbmlwcGV0XCIsIGUpXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIi4vZGlybmFtZVwiXG5cbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIG1haW4/OiBzdHJpbmdcbiAgbW9kdWxlPzogc3RyaW5nXG4gIGV4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PlxufVxuXG5pbnRlcmZhY2UgTm9kZVJlc29sdXRpb25Db250ZXh0IHtcbiAgZnNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgZXh0ZW5zaW9uczogc3RyaW5nW11cbiAgYmFzZVBhdGg6IHN0cmluZ1xuICBtb2R1bGVQYXRoOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGV4dChcbiAgbW9kdWxlUGF0aDogc3RyaW5nLFxuICBmc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgYmFzZVBhdGg6IHN0cmluZyxcbik6IE5vZGVSZXNvbHV0aW9uQ29udGV4dCB7XG4gIHJldHVybiB7XG4gICAgZnNNYXAsXG4gICAgZXh0ZW5zaW9uczogW1wiLmpzXCIsIFwiLmpzeFwiLCBcIi50c1wiLCBcIi50c3hcIiwgXCIuanNvblwiXSxcbiAgICBiYXNlUGF0aCxcbiAgICBtb2R1bGVQYXRoLFxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvbihub2RlTW9kdWxlc1BhdGg6IHN0cmluZywgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQpIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYCR7bm9kZU1vZHVsZXNQYXRofS9wYWNrYWdlLmpzb25gXG4gIGlmICghY3R4LmZzTWFwW3BhY2thZ2VKc29uUGF0aF0pIHJldHVybiBudWxsXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY3R4LmZzTWFwW3BhY2thZ2VKc29uUGF0aF0pIGFzIFBhY2thZ2VKc29uXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5UmVzb2x2ZVdpdGhFeHRlbnNpb25zKFxuICBwYXRoOiBzdHJpbmcsXG4gIGN0eDogTm9kZVJlc29sdXRpb25Db250ZXh0LFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChjdHguZnNNYXBbcGF0aF0pIHJldHVybiBwYXRoXG5cbiAgZm9yIChjb25zdCBleHQgb2YgY3R4LmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBwYXRoV2l0aEV4dCA9IHBhdGgucmVwbGFjZSgvXFwuanMkfFxcLmpzeCQvLCBcIlwiKSArIGV4dFxuICAgIGlmIChjdHguZnNNYXBbcGF0aFdpdGhFeHRdKSByZXR1cm4gcGF0aFdpdGhFeHRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiByZXNvbHZlRXhwb3J0UGF0aChcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIGV4cG9ydFBhdGg6IHN0cmluZyxcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZnVsbEV4cG9ydFBhdGggPSBgJHtub2RlTW9kdWxlc1BhdGh9LyR7ZXhwb3J0UGF0aC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIil9YFxuICByZXR1cm4gdHJ5UmVzb2x2ZVdpdGhFeHRlbnNpb25zKGZ1bGxFeHBvcnRQYXRoLCBjdHgpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYWNrYWdlRXhwb3J0cyhcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbixcbiAgcmVtYWluaW5nUGF0aDogc3RyaW5nLFxuICBjdHg6IE5vZGVSZXNvbHV0aW9uQ29udGV4dCxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXBhY2thZ2VKc29uLmV4cG9ydHMpIHJldHVybiBudWxsXG5cbiAgLy8gSGFuZGxlIGRlZmF1bHQgZXhwb3J0IGNvbmRpdGlvblxuICBjb25zdCBkZWZhdWx0RXhwb3J0ID0gcGFja2FnZUpzb24uZXhwb3J0c1tcIi5cIl1cbiAgaWYgKHJlbWFpbmluZ1BhdGggPT09IFwiXCIgJiYgZGVmYXVsdEV4cG9ydCkge1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdEV4cG9ydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlRXhwb3J0UGF0aChub2RlTW9kdWxlc1BhdGgsIGRlZmF1bHRFeHBvcnQsIGN0eClcbiAgICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuIHJlc29sdmVkXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHN1YnBhdGggZXhwb3J0c1xuICBjb25zdCBzdWJwYXRoRXhwb3J0ID0gcmVtYWluaW5nUGF0aFxuICAgID8gcGFja2FnZUpzb24uZXhwb3J0c1tgLi8ke3JlbWFpbmluZ1BhdGh9YF1cbiAgICA6IG51bGxcbiAgaWYgKHN1YnBhdGhFeHBvcnQgJiYgdHlwZW9mIHN1YnBhdGhFeHBvcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVFeHBvcnRQYXRoKG5vZGVNb2R1bGVzUGF0aCwgc3VicGF0aEV4cG9ydCwgY3R4KVxuICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuIHJlc29sdmVkXG4gIH1cblxuICAvLyBIYW5kbGUgY29uZGl0aW9uYWwgZXhwb3J0c1xuICBjb25zdCBpbXBvcnRFeHBvcnQgPSBwYWNrYWdlSnNvbi5leHBvcnRzW1wiaW1wb3J0XCJdXG4gIGlmIChcbiAgICByZW1haW5pbmdQYXRoID09PSBcIlwiICYmXG4gICAgaW1wb3J0RXhwb3J0ICYmXG4gICAgdHlwZW9mIGltcG9ydEV4cG9ydCA9PT0gXCJzdHJpbmdcIlxuICApIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVFeHBvcnRQYXRoKG5vZGVNb2R1bGVzUGF0aCwgaW1wb3J0RXhwb3J0LCBjdHgpXG4gICAgaWYgKHJlc29sdmVkKSByZXR1cm4gcmVzb2x2ZWRcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYWNrYWdlRW50cnlQb2ludChcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbixcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZW50cnlQb2ludCA9IHBhY2thZ2VKc29uLm1vZHVsZSB8fCBwYWNrYWdlSnNvbi5tYWluIHx8IFwiaW5kZXguanNcIlxuICBjb25zdCBmdWxsUGF0aCA9IGAke25vZGVNb2R1bGVzUGF0aH0vJHtlbnRyeVBvaW50fWBcbiAgcmV0dXJuIHRyeVJlc29sdmVXaXRoRXh0ZW5zaW9ucyhmdWxsUGF0aCwgY3R4KVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVtYWluaW5nUGF0aChcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIHJlbWFpbmluZ1BhdGg6IHN0cmluZyxcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFyZW1haW5pbmdQYXRoKSB7XG4gICAgLy8gVHJ5IGluZGV4IGZpbGVzIGluIHRoZSBtb2R1bGUgcm9vdFxuICAgIGZvciAoY29uc3QgZXh0IG9mIGN0eC5leHRlbnNpb25zKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGggPSBgJHtub2RlTW9kdWxlc1BhdGh9L2luZGV4JHtleHR9YFxuICAgICAgaWYgKGN0eC5mc01hcFtpbmRleFBhdGhdKSByZXR1cm4gaW5kZXhQYXRoXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBmdWxsUGF0aCA9IGAke25vZGVNb2R1bGVzUGF0aH0vJHtyZW1haW5pbmdQYXRofWBcbiAgY29uc3QgZGlyZWN0TWF0Y2ggPSB0cnlSZXNvbHZlV2l0aEV4dGVuc2lvbnMoZnVsbFBhdGgsIGN0eClcbiAgaWYgKGRpcmVjdE1hdGNoKSByZXR1cm4gZGlyZWN0TWF0Y2hcblxuICAvLyBUcnkgaW5kZXggZmlsZXNcbiAgZm9yIChjb25zdCBleHQgb2YgY3R4LmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBpbmRleFBhdGggPSBgJHtmdWxsUGF0aH0vaW5kZXgke2V4dH1gXG4gICAgaWYgKGN0eC5mc01hcFtpbmRleFBhdGhdKSByZXR1cm4gaW5kZXhQYXRoXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5vZGVNb2R1bGVJblBhdGgoXG4gIHNlYXJjaFBhdGg6IHN0cmluZyxcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbW9kdWxlUGFydHMgPSBjdHgubW9kdWxlUGF0aC5zcGxpdChcIi9cIilcbiAgY29uc3Qgc2NvcGUgPSBtb2R1bGVQYXJ0c1swXS5zdGFydHNXaXRoKFwiQFwiKVxuICAgID8gbW9kdWxlUGFydHMuc2xpY2UoMCwgMikuam9pbihcIi9cIilcbiAgICA6IG1vZHVsZVBhcnRzWzBdXG4gIGNvbnN0IHJlbWFpbmluZ1BhdGggPSBtb2R1bGVQYXJ0cy5zbGljZShzY29wZS5pbmNsdWRlcyhcIi9cIikgPyAyIDogMSkuam9pbihcIi9cIilcbiAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gYCR7c2VhcmNoUGF0aCA9PSBcIi5cIiA/IFwiXCIgOiBgJHtzZWFyY2hQYXRofS9gfW5vZGVfbW9kdWxlcy8ke3Njb3BlfWBcblxuICAvLyBUcnkgdG8gZmluZCBwYWNrYWdlLmpzb25cbiAgY29uc3QgcGFja2FnZUpzb24gPSBmaW5kUGFja2FnZUpzb24obm9kZU1vZHVsZXNQYXRoLCBjdHgpXG4gIGlmIChwYWNrYWdlSnNvbikge1xuICAgIC8vIFRyeSByZXNvbHZpbmcgdGhyb3VnaCBleHBvcnRzIGZpZWxkXG4gICAgY29uc3QgZXhwb3J0c1Jlc29sdXRpb24gPSByZXNvbHZlUGFja2FnZUV4cG9ydHMoXG4gICAgICBub2RlTW9kdWxlc1BhdGgsXG4gICAgICBwYWNrYWdlSnNvbixcbiAgICAgIHJlbWFpbmluZ1BhdGgsXG4gICAgICBjdHgsXG4gICAgKVxuICAgIGlmIChleHBvcnRzUmVzb2x1dGlvbikgcmV0dXJuIGV4cG9ydHNSZXNvbHV0aW9uXG5cbiAgICAvLyBUcnkgcmVzb2x2aW5nIHRocm91Z2ggbWFpbi9tb2R1bGUgZmllbGRzXG4gICAgY29uc3QgZW50cnlQb2ludFJlc29sdXRpb24gPSByZXNvbHZlUGFja2FnZUVudHJ5UG9pbnQoXG4gICAgICBub2RlTW9kdWxlc1BhdGgsXG4gICAgICBwYWNrYWdlSnNvbixcbiAgICAgIGN0eCxcbiAgICApXG4gICAgaWYgKGVudHJ5UG9pbnRSZXNvbHV0aW9uKSByZXR1cm4gZW50cnlQb2ludFJlc29sdXRpb25cbiAgfVxuXG4gIC8vIFRyeSByZXNvbHZpbmcgcmVtYWluaW5nIHBhdGhcbiAgY29uc3QgcmVtYWluaW5nUGF0aFJlc29sdXRpb24gPSByZXNvbHZlUmVtYWluaW5nUGF0aChcbiAgICBub2RlTW9kdWxlc1BhdGgsXG4gICAgcmVtYWluaW5nUGF0aCxcbiAgICBjdHgsXG4gIClcbiAgaWYgKHJlbWFpbmluZ1BhdGhSZXNvbHV0aW9uKSByZXR1cm4gcmVtYWluaW5nUGF0aFJlc29sdXRpb25cblxuICAvLyBJZiBub3QgZm91bmQgYW5kIHdlIGhhdmUgYSBwYXJlbnQgZGlyZWN0b3J5LCB0cnkgdGhlcmVcbiAgY29uc3QgcGFyZW50UGF0aCA9IGRpcm5hbWUoc2VhcmNoUGF0aClcbiAgaWYgKHBhcmVudFBhdGggJiYgcGFyZW50UGF0aCAhPT0gc2VhcmNoUGF0aCkge1xuICAgIHJldHVybiByZXNvbHZlTm9kZU1vZHVsZUluUGF0aChwYXJlbnRQYXRoLCBjdHgpXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU5vZGVNb2R1bGUoXG4gIG1vZHVsZVBhdGg6IHN0cmluZyxcbiAgZnNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGJhc2VQYXRoOiBzdHJpbmcsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dChtb2R1bGVQYXRoLCBmc01hcCwgYmFzZVBhdGgpXG4gIHJldHVybiByZXNvbHZlTm9kZU1vZHVsZUluUGF0aChjdHguYmFzZVBhdGgsIGN0eClcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlTm9kZU1vZHVsZSB9IGZyb20gXCJsaWIvdXRpbHMvcmVzb2x2ZS1ub2RlLW1vZHVsZVwiXG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi9leGVjdXRpb24tY29udGV4dFwiXG5pbXBvcnQgeyBpbXBvcnRMb2NhbEZpbGUgfSBmcm9tIFwiLi9pbXBvcnQtbG9jYWwtZmlsZVwiXG5cbmV4cG9ydCBjb25zdCBpbXBvcnROb2RlTW9kdWxlID0gYXN5bmMgKFxuICBpbXBvcnROYW1lOiBzdHJpbmcsXG4gIGN0eDogRXhlY3V0aW9uQ29udGV4dCxcbiAgZGVwdGggPSAwLFxuKSA9PiB7XG4gIGNvbnN0IHsgcHJlU3VwcGxpZWRJbXBvcnRzIH0gPSBjdHhcblxuICBpZiAocHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCByZXNvbHZlZE5vZGVNb2R1bGVQYXRoID0gcmVzb2x2ZU5vZGVNb2R1bGUoaW1wb3J0TmFtZSwgY3R4LmZzTWFwLCBcIlwiKVxuXG4gIGlmICghcmVzb2x2ZWROb2RlTW9kdWxlUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSBtb2R1bGUgXCIke2ltcG9ydE5hbWV9XCIgbm90IGZvdW5kYClcbiAgfVxuXG4gIC8vIFVzZSBpbXBvcnRMb2NhbEZpbGUgdG8gaGFuZGxlIHRoZSBub2RlIG1vZHVsZVxuICBhd2FpdCBpbXBvcnRMb2NhbEZpbGUocmVzb2x2ZWROb2RlTW9kdWxlUGF0aCwgY3R4LCBkZXB0aClcblxuICAvLyBNYXAgdGhlIG9yaWdpbmFsIGltcG9ydCBuYW1lIHRvIHRoZSByZXNvbHZlZCBtb2R1bGUncyBleHBvcnRzXG4gIHByZVN1cHBsaWVkSW1wb3J0c1tpbXBvcnROYW1lXSA9IHByZVN1cHBsaWVkSW1wb3J0c1tyZXNvbHZlZE5vZGVNb2R1bGVQYXRoXVxuXG4gIC8vIE1hcCB3aXRob3V0IG5vZGVfbW9kdWxlcyBwcmVmaXggZm9yIGRpcmVjdCBpbXBvcnRzXG4gIGNvbnN0IHVucHJlZml4ZWRQYXRoID0gcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5yZXBsYWNlKC9ebm9kZV9tb2R1bGVzXFwvLywgXCJcIilcbiAgcHJlU3VwcGxpZWRJbXBvcnRzW3VucHJlZml4ZWRQYXRoXSA9XG4gICAgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkTm9kZU1vZHVsZVBhdGhdXG5cbiAgLy8gSGFuZGxlIGluZGV4IGZpbGVzIHNwZWNpYWxseVxuICBpZiAoXG4gICAgcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5lbmRzV2l0aChcIi9pbmRleC50c3hcIikgfHxcbiAgICByZXNvbHZlZE5vZGVNb2R1bGVQYXRoLmVuZHNXaXRoKFwiL2luZGV4LnRzXCIpIHx8XG4gICAgcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5lbmRzV2l0aChcIi9pbmRleC5qc1wiKVxuICApIHtcbiAgICBjb25zdCBkaXJQYXRoID0gcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5yZXBsYWNlKC9cXC9pbmRleFxcLih0c3g/fGpzKSQvLCBcIlwiKVxuICAgIGNvbnN0IHVucHJlZml4ZWREaXJQYXRoID0gZGlyUGF0aC5yZXBsYWNlKC9ebm9kZV9tb2R1bGVzXFwvLywgXCJcIilcbiAgICBwcmVTdXBwbGllZEltcG9ydHNbdW5wcmVmaXhlZERpclBhdGhdID1cbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tyZXNvbHZlZE5vZGVNb2R1bGVQYXRoXVxuXG4gICAgLy8gSGFuZGxlIHNjb3BlZCBwYWNrYWdlc1xuICAgIGlmICh1bnByZWZpeGVkRGlyUGF0aC5zdGFydHNXaXRoKFwiQFwiKSkge1xuICAgICAgY29uc3Qgc2NvcGVQYXJ0cyA9IHVucHJlZml4ZWREaXJQYXRoLnNwbGl0KFwiL1wiKVxuICAgICAgaWYgKHNjb3BlUGFydHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVkTmFtZSA9IGAke3Njb3BlUGFydHNbMF19LyR7c2NvcGVQYXJ0c1sxXX1gXG4gICAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tzY29wZWROYW1lXSA9XG4gICAgICAgICAgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkTm9kZU1vZHVsZVBhdGhdXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZXZhbENvbXBpbGVkSnMgfSBmcm9tIFwiLi9ldmFsLWNvbXBpbGVkLWpzXCJcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL2V4ZWN1dGlvbi1jb250ZXh0XCJcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibGliL3V0aWxzL2Rpcm5hbWVcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5pbXBvcnQgeyBnZXRJbXBvcnRzRnJvbUNvZGUgfSBmcm9tIFwibGliL3V0aWxzL2dldC1pbXBvcnRzLWZyb20tY29kZVwiXG5pbXBvcnQgeyBpbXBvcnRFdmFsUGF0aCB9IGZyb20gXCIuL2ltcG9ydC1ldmFsLXBhdGhcIlxuaW1wb3J0IHsgdHJhbnNmb3JtV2l0aFN1Y3Jhc2UgfSBmcm9tIFwiLi90cmFuc2Zvcm0td2l0aC1zdWNyYXNlXCJcblxuY29uc3QgZGVidWcgPSBEZWJ1ZyhcInRzY2k6ZXZhbDppbXBvcnQtbnBtLXBhY2thZ2VcIilcblxuZnVuY3Rpb24gZXh0cmFjdFBhY2thZ2VQYXRoRnJvbUpTRGVsaXZyKHVybDogc3RyaW5nKSB7XG4gIGNvbnN0IHByZWZpeCA9IFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9cIlxuICBpZiAodXJsLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnJlcGxhY2UoL1xcL1xcK2VzbSQvLCBcIlwiKVxuICB9XG4gIHJldHVybiB1cmxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydE5wbVBhY2thZ2UoXG4gIGltcG9ydE5hbWU6IHN0cmluZyxcbiAgY3R4OiBFeGVjdXRpb25Db250ZXh0LFxuICBkZXB0aCA9IDAsXG4pIHtcbiAgZGVidWcoYGltcG9ydGluZyBucG0gcGFja2FnZTogJHtpbXBvcnROYW1lfWApXG4gIGNvbnN0IHsgcHJlU3VwcGxpZWRJbXBvcnRzIH0gPSBjdHhcblxuICBpZiAocHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdKSByZXR1cm5cblxuICBjb25zdCBucG1DZG5VcmwgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS8ke2ltcG9ydE5hbWV9Lytlc21gXG5cbiAgbGV0IGZpbmFsVXJsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgY29uc3QgeyBjb250ZW50LCBlcnJvciB9ID0gYXdhaXQgZ2xvYmFsVGhpc1xuICAgIC5mZXRjaChucG1DZG5VcmwpXG4gICAgLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xuICAgICAgZmluYWxVcmwgPSByZXMudXJsXG4gICAgICBpZiAoIXJlcy5vaylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmV0Y2ggXCIke2ltcG9ydE5hbWV9XCIgZnJvbSBqc2RlbGl2cjogJHtyZXMuc3RhdHVzVGV4dH1gLFxuICAgICAgICApXG4gICAgICByZXR1cm4geyBjb250ZW50OiBhd2FpdCByZXMudGV4dCgpLCBlcnJvcjogbnVsbCB9XG4gICAgfSlcbiAgICAuY2F0Y2goKGUpID0+ICh7IGVycm9yOiBlLCBjb250ZW50OiBudWxsIH0pKVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBucG0gaW1wb3J0XCIsIGltcG9ydE5hbWUsIGVycm9yKVxuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBjb25zdCBmaW5hbEltcG9ydE5hbWUgPSBleHRyYWN0UGFja2FnZVBhdGhGcm9tSlNEZWxpdnIoZmluYWxVcmwhKVxuICBjb25zdCBjd2QgPSBkaXJuYW1lKGZpbmFsSW1wb3J0TmFtZSlcblxuICBjb25zdCBpbXBvcnROYW1lcyA9IGdldEltcG9ydHNGcm9tQ29kZShjb250ZW50ISlcbiAgZm9yIChjb25zdCBzdWJJbXBvcnROYW1lIG9mIGltcG9ydE5hbWVzKSB7XG4gICAgaWYgKCFwcmVTdXBwbGllZEltcG9ydHNbc3ViSW1wb3J0TmFtZV0pIHtcbiAgICAgIGF3YWl0IGltcG9ydEV2YWxQYXRoKHN1YkltcG9ydE5hbWUsIGN0eCwgZGVwdGggKyAxLCB7XG4gICAgICAgIGN3ZCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdHJhbnNmb3JtZWRDb2RlID0gdHJhbnNmb3JtV2l0aFN1Y3Jhc2UoXG4gICAgY29udGVudCEsXG4gICAgZmluYWxJbXBvcnROYW1lIHx8IGltcG9ydE5hbWUsXG4gIClcbiAgdHJ5IHtcbiAgICBjb25zdCBleHBvcnRzID0gZXZhbENvbXBpbGVkSnMoXG4gICAgICB0cmFuc2Zvcm1lZENvZGUsXG4gICAgICBwcmVTdXBwbGllZEltcG9ydHMsXG4gICAgICBjd2QsXG4gICAgKS5leHBvcnRzXG4gICAgcHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdID0gZXhwb3J0c1xuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmaW5hbEltcG9ydE5hbWVdID0gZXhwb3J0c1xuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmaW5hbFVybCFdID0gZXhwb3J0c1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV2YWwgbnBtIHBhY2thZ2UgZXJyb3IgZm9yIFwiJHtpbXBvcnROYW1lfVwiOiAke2UubWVzc2FnZX1gKVxuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIi4vZXhlY3V0aW9uLWNvbnRleHRcIlxuaW1wb3J0IHsgaW1wb3J0TG9jYWxGaWxlIH0gZnJvbSBcIi4vaW1wb3J0LWxvY2FsLWZpbGVcIlxuaW1wb3J0IHsgaW1wb3J0U25pcHBldCB9IGZyb20gXCIuL2ltcG9ydC1zbmlwcGV0XCJcbmltcG9ydCB7IHJlc29sdmVGaWxlUGF0aCB9IGZyb20gXCJsaWIvcnVubmVyL3Jlc29sdmVGaWxlUGF0aFwiXG5pbXBvcnQgeyByZXNvbHZlTm9kZU1vZHVsZSB9IGZyb20gXCJsaWIvdXRpbHMvcmVzb2x2ZS1ub2RlLW1vZHVsZVwiXG5pbXBvcnQgeyBpbXBvcnROb2RlTW9kdWxlIH0gZnJvbSBcIi4vaW1wb3J0LW5vZGUtbW9kdWxlXCJcbmltcG9ydCB7IGltcG9ydE5wbVBhY2thZ2UgfSBmcm9tIFwiLi9pbXBvcnQtbnBtLXBhY2thZ2VcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJ0c2NpOmV2YWw6aW1wb3J0LWV2YWwtcGF0aFwiKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RXZhbFBhdGgoXG4gIGltcG9ydE5hbWU6IHN0cmluZyxcbiAgY3R4OiBFeGVjdXRpb25Db250ZXh0LFxuICBkZXB0aCA9IDAsXG4gIG9wdHM6IHtcbiAgICBjd2Q/OiBzdHJpbmdcbiAgfSA9IHt9LFxuKSB7XG4gIGRlYnVnKFwiaW1wb3J0RXZhbFBhdGggY2FsbGVkIHdpdGg6XCIsIHtcbiAgICBpbXBvcnROYW1lLFxuICAgIGRlcHRoLFxuICAgIG9wdHMsXG4gIH0pXG5cbiAgZGVidWcoYCR7XCIgIFwiLnJlcGVhdChkZXB0aCl9XHUyN0ExXHVGRTBGYCwgaW1wb3J0TmFtZSlcbiAgY29uc3QgeyBwcmVTdXBwbGllZEltcG9ydHMgfSA9IGN0eFxuXG4gIGlmIChwcmVTdXBwbGllZEltcG9ydHNbaW1wb3J0TmFtZV0pIHJldHVyblxuICBpZiAoaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiLi9cIikgJiYgcHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWUuc2xpY2UoMildKVxuICAgIHJldHVyblxuXG4gIGlmIChkZXB0aCA+IDUpIHtcbiAgICBjb25zb2xlLmxvZyhcIk1heCBkZXB0aCBmb3IgaW1wb3J0cyByZWFjaGVkXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiL25wbS9cIikpIHtcbiAgICBjb25zdCBwa2dOYW1lID0gaW1wb3J0TmFtZS5yZXBsYWNlKC9eXFwvbnBtXFwvLywgXCJcIikucmVwbGFjZSgvXFwvXFwrZXNtJC8sIFwiXCIpXG4gICAgYXdhaXQgaW1wb3J0TnBtUGFja2FnZShwa2dOYW1lLCBjdHgsIGRlcHRoKVxuICAgIGNvbnN0IHBrZyA9IHByZVN1cHBsaWVkSW1wb3J0c1twa2dOYW1lXVxuICAgIGlmIChwa2cpIHtcbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tpbXBvcnROYW1lXSA9IHBrZ1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkTG9jYWxJbXBvcnRQYXRoID0gcmVzb2x2ZUZpbGVQYXRoKFxuICAgIGltcG9ydE5hbWUsXG4gICAgY3R4LmZzTWFwLFxuICAgIG9wdHMuY3dkLFxuICApXG4gIGlmIChyZXNvbHZlZExvY2FsSW1wb3J0UGF0aCkge1xuICAgIGF3YWl0IGltcG9ydExvY2FsRmlsZShyZXNvbHZlZExvY2FsSW1wb3J0UGF0aCwgY3R4LCBkZXB0aClcbiAgICAvLyBNYXAgdGhlIG9yaWdpbmFsIGltcG9ydCBuYW1lICh3aGljaCBtaWdodCBiZSBhIHRzY29uZmlnIHBhdGggYWxpYXMpIHRvIHRoZSByZXNvbHZlZCBtb2R1bGVcbiAgICBpZiAoaW1wb3J0TmFtZSAhPT0gcmVzb2x2ZWRMb2NhbEltcG9ydFBhdGgpIHtcbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tpbXBvcnROYW1lXSA9XG4gICAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tyZXNvbHZlZExvY2FsSW1wb3J0UGF0aF1cbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBUcnkgdG8gcmVzb2x2ZSBmcm9tIG5vZGVfbW9kdWxlc1xuICBjb25zdCByZXNvbHZlZE5vZGVNb2R1bGVQYXRoID0gcmVzb2x2ZU5vZGVNb2R1bGUoXG4gICAgaW1wb3J0TmFtZSxcbiAgICBjdHguZnNNYXAsXG4gICAgb3B0cy5jd2QgfHwgXCJcIixcbiAgKVxuICBpZiAocmVzb2x2ZWROb2RlTW9kdWxlUGF0aCkge1xuICAgIHJldHVybiBpbXBvcnROb2RlTW9kdWxlKGltcG9ydE5hbWUsIGN0eCwgZGVwdGgpXG4gIH1cblxuICBpZiAoaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiQHRzY2kvXCIpKSB7XG4gICAgcmV0dXJuIGltcG9ydFNuaXBwZXQoaW1wb3J0TmFtZSwgY3R4LCBkZXB0aClcbiAgfVxuXG4gIGlmICghaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiLlwiKSAmJiAhaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgIHJldHVybiBpbXBvcnROcG1QYWNrYWdlKGltcG9ydE5hbWUsIGN0eCwgZGVwdGgpXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYFVucmVzb2x2ZWQgaW1wb3J0IFwiJHtpbXBvcnROYW1lfVwiICR7b3B0cy5jd2QgPyBgZnJvbSBkaXJlY3RvcnkgXCIke29wdHMuY3dkfVwiYCA6IFwiXCJ9YCxcbiAgKVxufVxuIiwgImltcG9ydCB7IHJlc29sdmVGaWxlUGF0aE9yVGhyb3cgfSBmcm9tIFwiLi9yZXNvbHZlRmlsZVBhdGhcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJ0c2NpOmV2YWw6c2V0dXBEZWZhdWx0RW50cnlwb2ludElmTmVlZGVkXCIpXG5cbmV4cG9ydCBjb25zdCBzZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWQgPSAob3B0czoge1xuICBlbnRyeXBvaW50Pzogc3RyaW5nXG4gIGZzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIG1haW5Db21wb25lbnRQYXRoPzogc3RyaW5nXG4gIG1haW5Db21wb25lbnROYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgbWFpbkNvbXBvbmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PlxufSkgPT4ge1xuICBpZiAoIW9wdHMuZW50cnlwb2ludCAmJiAhb3B0cy5tYWluQ29tcG9uZW50UGF0aCkge1xuICAgIGlmIChcImluZGV4LnRzeFwiIGluIG9wdHMuZnNNYXApIHtcbiAgICAgIG9wdHMubWFpbkNvbXBvbmVudFBhdGggPSBcImluZGV4LnRzeFwiXG4gICAgfSBlbHNlIGlmIChcImluZGV4LnRzXCIgaW4gb3B0cy5mc01hcCkge1xuICAgICAgb3B0cy5tYWluQ29tcG9uZW50UGF0aCA9IFwiaW5kZXgudHNcIlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhvcHRzLmZzTWFwKS5maWx0ZXIoKGspID0+IGsuZW5kc1dpdGgoXCIudHN4XCIpKS5sZW5ndGggPT09IDFcbiAgICApIHtcbiAgICAgIG9wdHMubWFpbkNvbXBvbmVudFBhdGggPSBPYmplY3Qua2V5cyhvcHRzLmZzTWFwKVswXVxuICAgIH0gZWxzZSBpZiAoXCJ0c2NpcmN1aXQuY29uZmlnLmpzb25cIiBpbiBvcHRzLmZzTWFwKSB7XG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gb3B0cy5mc01hcFtcInRzY2lyY3VpdC5jb25maWcuanNvblwiXVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KVxuICAgICAgICBpZiAoY29uZmlnLm1haW5FbnRyeXBvaW50KSB7XG4gICAgICAgICAgb3B0cy5lbnRyeXBvaW50ID0gY29uZmlnLm1haW5FbnRyeXBvaW50XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHBhcnNlIHRzY2lyY3VpdC5jb25maWcuanNvbjpcIiwgZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVpdGhlciBlbnRyeXBvaW50IG9yIG1haW5Db21wb25lbnRQYXRoIG11c3QgYmUgcHJvdmlkZWQgKG5vIGluZGV4IGZpbGUsIGNvdWxkIG5vdCBpbmZlciBlbnRyeXBvaW50KVwiLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGlmICghb3B0cy5lbnRyeXBvaW50ICYmIG9wdHMubWFpbkNvbXBvbmVudFBhdGgpIHtcbiAgICBvcHRzLmVudHJ5cG9pbnQgPSBcImVudHJ5cG9pbnQudHN4XCJcbiAgICBjb25zdCBtYWluQ29tcG9uZW50Q29kZSA9XG4gICAgICBvcHRzLmZzTWFwW3Jlc29sdmVGaWxlUGF0aE9yVGhyb3cob3B0cy5tYWluQ29tcG9uZW50UGF0aCwgb3B0cy5mc01hcCldXG4gICAgaWYgKCFtYWluQ29tcG9uZW50Q29kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWFpbiBjb21wb25lbnQgcGF0aCBcIiR7b3B0cy5tYWluQ29tcG9uZW50UGF0aH1cIiBub3QgZm91bmQgaW4gZnNNYXAuIEF2YWlsYWJsZSBwYXRoczogJHtPYmplY3Qua2V5cyhvcHRzLmZzTWFwKS5qb2luKFwiLCBcIil9YCxcbiAgICAgIClcbiAgICB9XG4gICAgb3B0cy5mc01hcFtvcHRzLmVudHJ5cG9pbnRdID0gYFxuICAgICBpbXBvcnQgKiBhcyBVc2VyQ29tcG9uZW50cyBmcm9tIFwiLi8ke29wdHMubWFpbkNvbXBvbmVudFBhdGh9XCI7XG4gICAgICAgICAgXG4gICAgICAke1xuICAgICAgICBvcHRzLm1haW5Db21wb25lbnROYW1lXG4gICAgICAgICAgPyBgXG4gICAgICAgIGNvbnN0IENvbXBvbmVudFRvUmVuZGVyID0gVXNlckNvbXBvbmVudHNbXCIke29wdHMubWFpbkNvbXBvbmVudE5hbWV9XCJdXG4gICAgICAgIGBcbiAgICAgICAgICA6IGBjb25zdCBDb21wb25lbnRUb1JlbmRlciA9IFVzZXJDb21wb25lbnRzLmRlZmF1bHQgfHwgXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoVXNlckNvbXBvbmVudHMpXG4gICAgICAgICAgLmZpbHRlcigoW25hbWVdKSA9PiAhbmFtZS5zdGFydHNXaXRoKFwidXNlXCIpKVxuICAgICAgICAgIC5tYXAoKFtfLCBjb21wb25lbnRdKSA9PiBjb21wb25lbnQpWzBdIHx8ICgoKSA9PiBudWxsKTtgXG4gICAgICB9XG5cbiAgICAgICAgICAgJHtcbiAgICAgICAgICAgICBkZWJ1Zy5lbmFibGVkXG4gICAgICAgICAgICAgICA/IGBcbiAgICAgY29uc29sZS5sb2coeyBVc2VyQ29tcG9uZW50cyB9KVxuICAgICBjb25zb2xlLmxvZyhcIkNvbXBvbmVudFRvUmVuZGVyIFwiICsgQ29tcG9uZW50VG9SZW5kZXIudG9TdHJpbmcoKSwgIHsgQ29tcG9uZW50VG9SZW5kZXIgfSlcbiAgICAgYFxuICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgIH1cblxuICAgICAgY2lyY3VpdC5hZGQoICAgICAgIFxuICAgICAgICAgIDxDb21wb25lbnRUb1JlbmRlciAke29wdHMubWFpbkNvbXBvbmVudFByb3BzID8gYHsuLi4ke0pTT04uc3RyaW5naWZ5KG9wdHMubWFpbkNvbXBvbmVudFByb3BzLCBudWxsLCAyKX19YCA6IFwiXCJ9IC8+IFxuICAgICAgKTtcbmBcbiAgfVxuXG4gIGlmICghb3B0cy5uYW1lICYmIG9wdHMubWFpbkNvbXBvbmVudE5hbWUpIHtcbiAgICBvcHRzLm5hbWUgPSBvcHRzLm1haW5Db21wb25lbnROYW1lXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBDaXJjdWl0UnVubmVyIH0gZnJvbSBcIi4vQ2lyY3VpdFJ1bm5lclwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Uc2NpcmN1aXRDb2RlKFxuICBmaWxlc3lzdGVtT3JDb2RlU3RyaW5nOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nLFxuICBvcHRzPzogT21pdDxQYXJhbWV0ZXJzPENpcmN1aXRSdW5uZXJbXCJleGVjdXRlV2l0aEZzTWFwXCJdPlswXSwgXCJmc01hcFwiPixcbikge1xuICBpZiAoXG4gICAgdHlwZW9mIGZpbGVzeXN0ZW1PckNvZGVTdHJpbmcgPT09IFwic3RyaW5nXCIgJiZcbiAgICAhZmlsZXN5c3RlbU9yQ29kZVN0cmluZy5pbmNsdWRlcyhcImV4cG9ydFwiKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIFwiZXhwb3J0XCIga2V5d29yZCB3YXNuJ3QgZm91bmQgaW4geW91ciBwcm92aWRlZCBjb2RlLiBZb3UgbmVlZCB0byBleHBvcnQgYSBjb21wb25lbnQgaW4geW91ciBjb2RlLCBlLmcuXFxuXFxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKFxcbiAgPHJlc2lzdG9yIG5hbWU9XCJSMVwiIHJlc2lzdGFuY2U9XCIxa1wiIC8+XFxuKWAsXG4gICAgKVxuICB9XG4gIGNvbnN0IGZpbGVzeXN0ZW0gPVxuICAgIHR5cGVvZiBmaWxlc3lzdGVtT3JDb2RlU3RyaW5nID09PSBcInN0cmluZ1wiXG4gICAgICA/IHsgXCJ1c2VyLWNvZGUudHN4XCI6IGZpbGVzeXN0ZW1PckNvZGVTdHJpbmcgfVxuICAgICAgOiBmaWxlc3lzdGVtT3JDb2RlU3RyaW5nXG5cbiAgY29uc3QgY2lyY3VpdFJ1bm5lciA9IG5ldyBDaXJjdWl0UnVubmVyKClcblxuICBhd2FpdCBjaXJjdWl0UnVubmVyLmV4ZWN1dGVXaXRoRnNNYXAoe1xuICAgIGZzTWFwOiBmaWxlc3lzdGVtLFxuICAgIC4uLm9wdHMsXG4gIH0pXG5cbiAgYXdhaXQgY2lyY3VpdFJ1bm5lci5yZW5kZXJVbnRpbFNldHRsZWQoKVxuXG4gIHJldHVybiBhd2FpdCBjaXJjdWl0UnVubmVyLmdldENpcmN1aXRKc29uKClcbn1cbiIsICJpbXBvcnQgeyBydW5Uc2NpcmN1aXRDb2RlIH0gZnJvbSBcIi4vcnVuVHNjaXJjdWl0Q29kZVwiXG5cbmV4cG9ydCBjb25zdCBydW5Uc2NpcmN1aXRNb2R1bGUgPSBhc3luYyAoXG4gIG1vZHVsZTogc3RyaW5nLFxuICBvcHRzOiB7IHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PjsgZXhwb3J0TmFtZT86IHN0cmluZyB9ID0ge30sXG4pID0+IHtcbiAgaWYgKCFtb2R1bGUuc3RhcnRzV2l0aChcIkBcIikpIHtcbiAgICBtb2R1bGUgPSBgQHRzY2kvJHttb2R1bGUucmVwbGFjZSgvXFwvLywgXCIuXCIpfWBcbiAgfVxuICBjb25zdCBjaXJjdWl0SnNvbiA9IGF3YWl0IHJ1blRzY2lyY3VpdENvZGUoXG4gICAge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgZXhwb3J0cyB0aGF0IGFyZSBub3QgdGhlIGRlZmF1bHQgZXhwb3J0IGJ5IHNjYW5uaW5nXG4gICAgICAvLyBvdGhlckV4cG9ydHMgZm9yIGNvbXBvbmVudHNcbiAgICAgIFwidXNlci1jb2RlLnRzeFwiOiBgXG4gICAgaW1wb3J0IE1vZHVsZSwgKiBhcyBvdGhlckV4cG9ydHMgZnJvbSBcIiR7bW9kdWxlfVwiO1xuXG4gICAgbGV0IGV4cG9ydE5hbWUgPSBcIiR7b3B0cy5leHBvcnROYW1lID8/IFwiXCJ9XCJcblxuICAgIGlmICgoIU1vZHVsZSB8fCB0eXBlb2YgTW9kdWxlICE9PSBcImZ1bmN0aW9uXCIpICYmICFCb29sZWFuKGV4cG9ydE5hbWUpKSB7XG4gICAgICBleHBvcnROYW1lID0gT2JqZWN0LmtleXMob3RoZXJFeHBvcnRzKS5maWx0ZXIoa2V5ID0+IGtleVswXSA9PT0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgJiYgdHlwZW9mIG90aGVyRXhwb3J0c1trZXldID09PSBcImZ1bmN0aW9uXCIpWzBdXG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9IGV4cG9ydE5hbWUgPyBvdGhlckV4cG9ydHNbZXhwb3J0TmFtZV0gOiBNb2R1bGVcblxuICAgIGlmICghZGVmYXVsdEV4cG9ydCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxcYE5vIGV4cG9ydCBmb3VuZCBmb3IgbW9kdWxlIFwiXFwke21vZHVsZX1cIiAodHJpZWQgXCJcXCR7ZXhwb3J0TmFtZSA/PyBcImRlZmF1bHRcIn1cIilcXGApXG4gICAgfVxuXG4gICAgZXhwb3J0IGRlZmF1bHQgZGVmYXVsdEV4cG9ydDtcbiAgICBgLFxuICAgIH0sXG4gICAge1xuICAgICAgbWFpbkNvbXBvbmVudFByb3BzOiBvcHRzLnByb3BzLFxuICAgIH0sXG4gIClcbiAgcmV0dXJuIGNpcmN1aXRKc29uXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxtQkFBbUI7QUFFNUIsWUFBWSxtQkFBbUI7QUFDL0IsWUFBWSxXQUFXO0FBQ3ZCLFlBQVksd0JBQXdCOzs7QUNDN0IsSUFBTSxnQ0FBZ0MsQ0FDM0MsbUJBQ3VCO0FBRXZCLE1BQUksUUFBUSxlQUFlLE1BQU0sZ0JBQWdCO0FBQ2pELE1BQUksTUFBTyxRQUFPLE1BQU0sQ0FBQztBQUl6QixVQUFRLGVBQWU7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLE1BQU8sUUFBTyxNQUFNLENBQUM7QUFFekIsU0FBTztBQUNUOzs7QUNoQk8sSUFB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QUNBLE1BQ0UsT0FBTywyQkFBMkIsWUFDbEMsQ0FBQyx1QkFBdUIsU0FBUyxRQUFRLEdBQ3pDO0FBQ0EsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLGFBQ0osT0FBTywyQkFBMkIsV0FDOUIsRUFBRSxpQkFBaUIsdUJBQXVCLElBQzFDO0FBRU4sUUFBTSxnQkFBZ0IsSUFBSSxjQUFjO0FBRXhDLFFBQU0sY0FBYyxpQkFBaUI7QUFBQSxJQUNuQyxPQUFPO0FBQUEsSUFDUCxHQUFHO0FBQUEsRUFDTCxDQUFDO0FBRUQsUUFBTSxjQUFjLG1CQUFtQjtBQUV2QyxTQUFPLE1BQU0sY0FBYyxlQUFlO0FBQzVDOzs7QUMzQk8sSUFBTSxxQkFBcUIsT0FDaEMsUUFDQSxPQUE2RCxDQUFDLE1BQzNEO0FBQ0gsTUFBSSxDQUFDLE9BQU8sV0FBVyxHQUFHLEdBQUc7QUFDM0IsYUFBUyxTQUFTLE9BQU8sUUFBUSxNQUFNLEdBQUcsQ0FBQztBQUFBLEVBQzdDO0FBQ0EsUUFBTSxjQUFjLE1BQU07QUFBQSxJQUN4QjtBQUFBO0FBQUE7QUFBQSxNQUdFLGlCQUFpQjtBQUFBLDZDQUNzQixNQUFNO0FBQUE7QUFBQSx3QkFFM0IsS0FBSyxjQUFjLEVBQUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBY3pDO0FBQUEsSUFDQTtBQUFBLE1BQ0Usb0JBQW9CLEtBQUs7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbIkRlYnVnIiwgImRlYnVnIiwgIkRlYnVnIiwgImltcG9ydE5hbWUiLCAiRGVidWciLCAiZGVidWciLCAiRGVidWciLCAiRGVidWciLCAiZGVidWciLCAiRGVidWciLCAiZGVidWciLCAiRGVidWciLCAiZGVidWciXQp9Cg==
|
|
1204
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vd2Vid29ya2VyL2V4ZWN1dGlvbi1jb250ZXh0LnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AdHNjaXJjdWl0L3BhcnRzLWVuZ2luZS9saWIvZm9vdHByaW50LXRyYW5zbGF0b3JzL2dldC1mb290cHJpbnRlci1zdHJpbmctZnJvbS1raWNhZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQHRzY2lyY3VpdC9wYXJ0cy1lbmdpbmUvbGliL2Zvb3RwcmludC10cmFuc2xhdG9ycy9nZXQtamxjLXBhY2thZ2UtZnJvbS1mb290cHJpbnRlci1zdHJpbmcudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0B0c2NpcmN1aXQvcGFydHMtZW5naW5lL2xpYi9mb290cHJpbnQtdHJhbnNsYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0B0c2NpcmN1aXQvcGFydHMtZW5naW5lL2xpYi9qbGMtcGFydHMtZW5naW5lLnRzIiwgIi4uLy4uL2xpYi9nZXRQbGF0Zm9ybUNvbmZpZy50cyIsICIuLi8uLi9saWIvcnVubmVyL25vcm1hbGl6ZUZzTWFwLnRzIiwgIi4uLy4uL2xpYi9ydW5uZXIvQ2lyY3VpdFJ1bm5lci50cyIsICIuLi8uLi9saWIvdXRpbHMvZGlybmFtZS50cyIsICIuLi8uLi9saWIvcnVubmVyL3RzY29uZmlnUGF0aHMudHMiLCAiLi4vLi4vbGliL3V0aWxzL3Jlc29sdmVSZWxhdGl2ZVBhdGgudHMiLCAiLi4vLi4vbGliL3J1bm5lci9yZXNvbHZlRmlsZVBhdGgudHMiLCAiLi4vLi4vbGliL3V0aWxzL2dldC1pbXBvcnRzLWZyb20tY29kZS50cyIsICIuLi8uLi93ZWJ3b3JrZXIvZXZhbC1jb21waWxlZC1qcy50cyIsICIuLi8uLi93ZWJ3b3JrZXIvaW1wb3J0LWxvY2FsLWZpbGUudHMiLCAiLi4vLi4vbGliL3NoYXJlZC9zdGF0aWMtYXNzZXQtZXh0ZW5zaW9ucy50cyIsICIuLi8uLi93ZWJ3b3JrZXIvdHJhbnNmb3JtLXdpdGgtc3VjcmFzZS50cyIsICIuLi8uLi93ZWJ3b3JrZXIvaW1wb3J0LXNuaXBwZXQudHMiLCAiLi4vLi4vbGliL3V0aWxzL3Jlc29sdmUtbm9kZS1tb2R1bGUudHMiLCAiLi4vLi4vd2Vid29ya2VyL2ltcG9ydC1ub2RlLW1vZHVsZS50cyIsICIuLi8uLi93ZWJ3b3JrZXIvaW1wb3J0LW5wbS1wYWNrYWdlLnRzIiwgIi4uLy4uL3dlYndvcmtlci9pbXBvcnQtZXZhbC1wYXRoLnRzIiwgIi4uLy4uL2xpYi9ydW5uZXIvc2V0dXBEZWZhdWx0RW50cnlwb2ludElmTmVlZGVkLnRzIiwgIi4uLy4uL2xpYi91dGlscy9lbmhhbmNlLXJvb3QtY2lyY3VpdC1lcnJvci50cyIsICIuLi8uLi9saWIvcnVubmVyL3J1blRzY2lyY3VpdENvZGUudHMiLCAiLi4vLi4vbGliL3J1bm5lci9ydW5Uc2NpcmN1aXRNb2R1bGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFJvb3RDaXJjdWl0IH0gZnJvbSBcIkB0c2NpcmN1aXQvY29yZVwiXG5pbXBvcnQgdHlwZSB7IFdlYldvcmtlckNvbmZpZ3VyYXRpb24gfSBmcm9tIFwibGliL3NoYXJlZC90eXBlc1wiXG5pbXBvcnQgKiBhcyB0c2NpcmN1aXRDb3JlIGZyb20gXCJAdHNjaXJjdWl0L2NvcmVcIlxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIHRzY2lyY3VpdE1hdGhVdGlscyBmcm9tIFwiQHRzY2lyY3VpdC9tYXRoLXV0aWxzXCJcbmltcG9ydCB0eXBlIHsgUGxhdGZvcm1Db25maWcgfSBmcm9tIFwiQHRzY2lyY3VpdC9wcm9wc1wiXG5pbXBvcnQgeyBnZXRQbGF0Zm9ybUNvbmZpZyB9IGZyb20gXCJsaWIvZ2V0UGxhdGZvcm1Db25maWdcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJ0c2NpOmV2YWw6ZXhlY3V0aW9uLWNvbnRleHRcIilcblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25Db250ZXh0IGV4dGVuZHMgV2ViV29ya2VyQ29uZmlndXJhdGlvbiB7XG4gIGZzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIGVudHJ5cG9pbnQ6IHN0cmluZ1xuICBwcmVTdXBwbGllZEltcG9ydHM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgY2lyY3VpdDogUm9vdENpcmN1aXRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gIHdlYldvcmtlckNvbmZpZ3VyYXRpb246IFdlYldvcmtlckNvbmZpZ3VyYXRpb24sXG4gIG9wdHM6IHtcbiAgICBuYW1lPzogc3RyaW5nXG4gICAgcGxhdGZvcm0/OiBQbGF0Zm9ybUNvbmZpZ1xuICAgIHByb2plY3RDb25maWc/OiBQYXJ0aWFsPFBsYXRmb3JtQ29uZmlnPlxuICAgIGRlYnVnTmFtZXNwYWNlPzogc3RyaW5nXG4gIH0gPSB7fSxcbik6IEV4ZWN1dGlvbkNvbnRleHQge1xuICBnbG9iYWxUaGlzLlJlYWN0ID0gUmVhY3RcblxuICBjb25zdCBiYXNlUGxhdGZvcm0gPSBvcHRzLnBsYXRmb3JtIHx8IGdldFBsYXRmb3JtQ29uZmlnKClcbiAgY29uc3QgcGxhdGZvcm0gPSBvcHRzLnByb2plY3RDb25maWdcbiAgICA/IHsgLi4uYmFzZVBsYXRmb3JtLCAuLi5vcHRzLnByb2plY3RDb25maWcgfVxuICAgIDogYmFzZVBsYXRmb3JtXG5cbiAgY29uc3QgY2lyY3VpdCA9IG5ldyBSb290Q2lyY3VpdCh7XG4gICAgcGxhdGZvcm0sXG4gIH0pXG5cbiAgaWYgKG9wdHMubmFtZSkge1xuICAgIGNpcmN1aXQubmFtZSA9IG9wdHMubmFtZVxuICB9XG5cbiAgaWYgKG9wdHMuZGVidWdOYW1lc3BhY2UpIHtcbiAgICBjaXJjdWl0LmVuYWJsZURlYnVnKG9wdHMuZGVidWdOYW1lc3BhY2UpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZzTWFwOiB7fSxcbiAgICBlbnRyeXBvaW50OiBcIlwiLFxuICAgIHByZVN1cHBsaWVkSW1wb3J0czoge1xuICAgICAgXCJAdHNjaXJjdWl0L2NvcmVcIjogdHNjaXJjdWl0Q29yZSxcbiAgICAgIHRzY2lyY3VpdDogdHNjaXJjdWl0Q29yZSxcbiAgICAgIFwiQHRzY2lyY3VpdC9tYXRoLXV0aWxzXCI6IHRzY2lyY3VpdE1hdGhVdGlscyxcbiAgICAgIHJlYWN0OiBSZWFjdCxcbiAgICAgIGRlYnVnOiBEZWJ1ZyxcblxuICAgICAgLy8gVGhpcyBpcyB1c3VhbGx5IHVzZWQgYXMgYSB0eXBlIGltcG9ydCwgd2UgY2FuIHJlbW92ZSB0aGUgc2hpbSB3aGVuIHdlXG4gICAgICAvLyBpZ25vcmUgdHlwZSBpbXBvcnRzIGluIGdldEltcG9ydHNGcm9tQ29kZVxuICAgICAgXCJAdHNjaXJjdWl0L3Byb3BzXCI6IHt9LFxuICAgIH0sXG4gICAgY2lyY3VpdCxcbiAgICAuLi53ZWJXb3JrZXJDb25maWd1cmF0aW9uLFxuICB9XG59XG4iLCAiLyoqXG4gKiBUcmFuc2Zvcm1zIGEgS2lDYWQgZm9vdHByaW50IHN0cmluZyBpbnRvIGEgZ2VuZXJpYyBcImZvb3RwcmludGVyIHN0cmluZ1wiLlxuICogRm9yIG5vdywgdGhpcyBpcyBhIHNpbXBsaWZpZWQgY29udmVyc2lvbiB0byBhIHN0YW5kYXJkIHBhY2thZ2UgbmFtZS5cbiAqIGUuZy4gXCJraWNhZDpSZXNpc3Rvcl9TTUQ6Ul8wNjAzXzE2MDhNZXRyaWNcIiAtPiBcIjA2MDNcIlxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdHByaW50ZXJTdHJpbmdGcm9tS2ljYWQgPSAoXG4gIGtpY2FkRm9vdHByaW50OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAvLyBraWNhZDpSZXNpc3Rvcl9TTUQ6Ul8wNjAzXzE2MDhNZXRyaWMgLT4gMDYwM1xuICBsZXQgbWF0Y2ggPSBraWNhZEZvb3RwcmludC5tYXRjaCgvOltSQ11fKFxcZHs0fSlfLylcbiAgaWYgKG1hdGNoKSByZXR1cm4gbWF0Y2hbMV1cblxuICAvLyBraWNhZDpQYWNrYWdlX1NPOlNPSUMtOF8zLjl4NC45bW1fUDEuMjdtbSAtPiBTT0lDLThcbiAgLy8ga2ljYWQ6UGFja2FnZV9UT19TT1RfU01EOlNPVC0yMyAtPiBTT1QtMjNcbiAgbWF0Y2ggPSBraWNhZEZvb3RwcmludC5tYXRjaChcbiAgICAvOihTT0lDLVxcZCt8U09ULVxcZCt8U09ELVxcZCt8U1NPUC1cXGQrfFRTU09QLVxcZCt8UUZQLVxcZCt8UUZOLVxcZCspLyxcbiAgKVxuICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFsxXVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiIsICIvKipcbiAqIFRyYW5zZm9ybXMgYSBnZW5lcmljIFwiZm9vdHByaW50ZXIgc3RyaW5nXCIgaW50byBhIEpMQy1jb21wYXRpYmxlIHBhY2thZ2UgbmFtZS5cbiAqIGUuZy4gXCJjYXAwNjAzXCIgLT4gXCIwNjAzXCJcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEpsY1BhY2thZ2VGcm9tRm9vdHByaW50ZXJTdHJpbmcgPSAoXG4gIGZvb3RwcmludGVyU3RyaW5nOiBzdHJpbmcsXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoZm9vdHByaW50ZXJTdHJpbmcuaW5jbHVkZXMoXCJjYXBcIikpIHtcbiAgICByZXR1cm4gZm9vdHByaW50ZXJTdHJpbmcucmVwbGFjZSgvY2FwL2csIFwiXCIpXG4gIH1cbiAgcmV0dXJuIGZvb3RwcmludGVyU3RyaW5nXG59XG4iLCAiaW1wb3J0IHsgZ2V0Rm9vdHByaW50ZXJTdHJpbmdGcm9tS2ljYWQgfSBmcm9tIFwiLi9nZXQtZm9vdHByaW50ZXItc3RyaW5nLWZyb20ta2ljYWRcIlxuaW1wb3J0IHsgZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyB9IGZyb20gXCIuL2dldC1qbGMtcGFja2FnZS1mcm9tLWZvb3RwcmludGVyLXN0cmluZ1wiXG5cbi8qKlxuICogR2V0IGEgSkxDLWNvbXBhdGlibGUgcGFja2FnZSBuYW1lIGZyb20gYSBmb290cHJpbnQgc3RyaW5nLCB3aGljaCBjb3VsZCBiZVxuICogYSBLaUNhZCBmb290cHJpbnQgb3IgYSBnZW5lcmljIFwiZm9vdHByaW50ZXIgc3RyaW5nXCIuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRKbGNwY2JQYWNrYWdlTmFtZSA9IChcbiAgZm9vdHByaW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWZvb3RwcmludCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGlmIChmb290cHJpbnQuc3RhcnRzV2l0aChcImtpY2FkOlwiKSkge1xuICAgIGNvbnN0IGZvb3RwcmludGVyU3RyaW5nID0gZ2V0Rm9vdHByaW50ZXJTdHJpbmdGcm9tS2ljYWQoZm9vdHByaW50KVxuICAgIGlmIChmb290cHJpbnRlclN0cmluZykge1xuICAgICAgcmV0dXJuIGdldEpsY1BhY2thZ2VGcm9tRm9vdHByaW50ZXJTdHJpbmcoZm9vdHByaW50ZXJTdHJpbmcpXG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIHVuLW1hdGNoZWQgS2lDYWQgc3RyaW5nc1xuICAgIHJldHVybiBmb290cHJpbnRcbiAgfVxuXG4gIC8vIE5vdCBhIEtpQ2FkIHN0cmluZywgYXNzdW1lIGl0J3MgYSBmb290cHJpbnRlciBzdHJpbmdcbiAgcmV0dXJuIGdldEpsY1BhY2thZ2VGcm9tRm9vdHByaW50ZXJTdHJpbmcoZm9vdHByaW50KVxufVxuIiwgImltcG9ydCB0eXBlIHsgUGFydHNFbmdpbmUsIFN1cHBsaWVyUGFydE51bWJlcnMgfSBmcm9tIFwiQHRzY2lyY3VpdC9wcm9wc1wiXG5pbXBvcnQgeyBnZXRKbGNwY2JQYWNrYWdlTmFtZSB9IGZyb20gXCIuL2Zvb3RwcmludC10cmFuc2xhdG9ycy9pbmRleFwiXG5cbmV4cG9ydCBjb25zdCBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KClcblxuY29uc3QgZ2V0SmxjUGFydHNDYWNoZWQgPSBhc3luYyAobmFtZTogYW55LCBwYXJhbXM6IGFueSkgPT4ge1xuICBjb25zdCBwYXJhbVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBqc29uOiBcInRydWVcIixcbiAgfSkudG9TdHJpbmcoKVxuICBpZiAoY2FjaGUuaGFzKHBhcmFtU3RyaW5nKSkge1xuICAgIHJldHVybiBjYWNoZS5nZXQocGFyYW1TdHJpbmcpXG4gIH1cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICBgaHR0cHM6Ly9qbGNzZWFyY2gudHNjaXJjdWl0LmNvbS8ke25hbWV9L2xpc3Q/JHtwYXJhbVN0cmluZ31gLFxuICApXG4gIGNvbnN0IHJlc3BvbnNlSnNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICBjYWNoZS5zZXQocGFyYW1TdHJpbmcsIHJlc3BvbnNlSnNvbilcbiAgcmV0dXJuIHJlc3BvbnNlSnNvblxufVxuXG5jb25zdCB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZSA9IChwYXJ0czogYW55W10gfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKCFwYXJ0cykgcmV0dXJuIFtdXG4gIHJldHVybiBbLi4ucGFydHNdLnNvcnQoXG4gICAgKGEsIGIpID0+IE51bWJlcihiLmlzX2Jhc2ljID8/IGZhbHNlKSAtIE51bWJlcihhLmlzX2Jhc2ljID8/IGZhbHNlKSxcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgamxjUGFydHNFbmdpbmU6IFBhcnRzRW5naW5lID0ge1xuICBmaW5kUGFydDogYXN5bmMgKHtcbiAgICBzb3VyY2VDb21wb25lbnQsXG4gICAgZm9vdHByaW50ZXJTdHJpbmcsXG4gIH0pOiBQcm9taXNlPFN1cHBsaWVyUGFydE51bWJlcnM+ID0+IHtcbiAgICBjb25zdCBqbGNwY2JQYWNrYWdlID0gZ2V0SmxjcGNiUGFja2FnZU5hbWUoZm9vdHByaW50ZXJTdHJpbmcpXG5cbiAgICBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcmVzaXN0b3JcIlxuICAgICkge1xuICAgICAgY29uc3QgeyByZXNpc3RvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwicmVzaXN0b3JzXCIsIHtcbiAgICAgICAgcmVzaXN0YW5jZTogc291cmNlQ29tcG9uZW50LnJlc2lzdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHJlc2lzdG9ycylcbiAgICAgICAgICAubWFwKChyOiBhbnkpID0+IGBDJHtyLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9jYXBhY2l0b3JcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBjYXBhY2l0b3JzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImNhcGFjaXRvcnNcIiwge1xuICAgICAgICBjYXBhY2l0YW5jZTogc291cmNlQ29tcG9uZW50LmNhcGFjaXRhbmNlLFxuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShjYXBhY2l0b3JzKVxuICAgICAgICAgIC5tYXAoKGM6IGFueSkgPT4gYEMke2MubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX3Bpbl9oZWFkZXJcIlxuICAgICkge1xuICAgICAgbGV0IHBpdGNoOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgICAgIGlmIChmb290cHJpbnRlclN0cmluZz8uaW5jbHVkZXMoXCJfcFwiKSkge1xuICAgICAgICBwaXRjaCA9IE51bWJlcihmb290cHJpbnRlclN0cmluZy5zcGxpdChcIl9wXCIpWzFdKVxuICAgICAgfVxuICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcbiAgICAgICAgXCJoZWFkZXJzXCIsXG4gICAgICAgIHBpdGNoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBpdGNoOiBwaXRjaCxcbiAgICAgICAgICAgICAgbnVtX3BpbnM6IHNvdXJjZUNvbXBvbmVudC5waW5fY291bnQsXG4gICAgICAgICAgICAgIGdlbmRlcjogc291cmNlQ29tcG9uZW50LmdlbmRlcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbnVtX3BpbnM6IHNvdXJjZUNvbXBvbmVudC5waW5fY291bnQsXG4gICAgICAgICAgICAgIGdlbmRlcjogc291cmNlQ29tcG9uZW50LmdlbmRlcixcbiAgICAgICAgICAgIH0sXG4gICAgICApXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKGhlYWRlcnMpXG4gICAgICAgICAgLm1hcCgoaDogYW55KSA9PiBgQyR7aC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcG90ZW50aW9tZXRlclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHBvdGVudGlvbWV0ZXJzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcInBvdGVudGlvbWV0ZXJzXCIsIHtcbiAgICAgICAgcmVzaXN0YW5jZTogc291cmNlQ29tcG9uZW50Lm1heF9yZXNpc3RhbmNlLFxuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UocG90ZW50aW9tZXRlcnMpXG4gICAgICAgICAgLm1hcCgocDogYW55KSA9PiBgQyR7cC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfZGlvZGVcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBkaW9kZXMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiZGlvZGVzXCIsIHtcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKGRpb2RlcylcbiAgICAgICAgICAubWFwKChkOiBhbnkpID0+IGBDJHtkLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9jaGlwXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgY2hpcHMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiY2hpcHNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoY2hpcHMpXG4gICAgICAgICAgLm1hcCgoYzogYW55KSA9PiBgQyR7Yy5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfdHJhbnNpc3RvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHRyYW5zaXN0b3JzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcInRyYW5zaXN0b3JzXCIsIHtcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgICAgdHJhbnNpc3Rvcl90eXBlOiBzb3VyY2VDb21wb25lbnQudHJhbnNpc3Rvcl90eXBlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UodHJhbnNpc3RvcnMpXG4gICAgICAgICAgLm1hcCgodDogYW55KSA9PiBgQyR7dC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcG93ZXJfc291cmNlXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcG93ZXJfc291cmNlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJwb3dlcl9zb3VyY2VzXCIsIHtcbiAgICAgICAgdm9sdGFnZTogc291cmNlQ29tcG9uZW50LnZvbHRhZ2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShwb3dlcl9zb3VyY2VzKVxuICAgICAgICAgIC5tYXAoKHA6IGFueSkgPT4gYEMke3AubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2luZHVjdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgaW5kdWN0b3JzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImluZHVjdG9yc1wiLCB7XG4gICAgICAgIGluZHVjdGFuY2U6IHNvdXJjZUNvbXBvbmVudC5pbmR1Y3RhbmNlLFxuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoaW5kdWN0b3JzKVxuICAgICAgICAgIC5tYXAoKGk6IGFueSkgPT4gYEMke2kubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2NyeXN0YWxcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBjcnlzdGFscyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJjcnlzdGFsc1wiLCB7XG4gICAgICAgIGZyZXF1ZW5jeTogc291cmNlQ29tcG9uZW50LmZyZXF1ZW5jeSxcbiAgICAgICAgbG9hZF9jYXBhY2l0YW5jZTogc291cmNlQ29tcG9uZW50LmxvYWRfY2FwYWNpdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShjcnlzdGFscylcbiAgICAgICAgICAubWFwKChjOiBhbnkpID0+IGBDJHtjLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9tb3NmZXRcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBtb3NmZXRzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcIm1vc2ZldHNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgICBtb3NmZXRfbW9kZTogc291cmNlQ29tcG9uZW50Lm1vc2ZldF9tb2RlLFxuICAgICAgICBjaGFubmVsX3R5cGU6IHNvdXJjZUNvbXBvbmVudC5jaGFubmVsX3R5cGUsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShtb3NmZXRzKVxuICAgICAgICAgIC5tYXAoKG06IGFueSkgPT4gYEMke20ubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX3Jlc29uYXRvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHJlc29uYXRvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwicmVzb25hdG9yc1wiLCB7XG4gICAgICAgIGZyZXF1ZW5jeTogc291cmNlQ29tcG9uZW50LmZyZXF1ZW5jeSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHJlc29uYXRvcnMpXG4gICAgICAgICAgLm1hcCgocjogYW55KSA9PiBgQyR7ci5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfc3dpdGNoXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgc3dpdGNoZXMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwic3dpdGNoZXNcIiwge1xuICAgICAgICBzd2l0Y2hfdHlwZTogc291cmNlQ29tcG9uZW50LnR5cGUsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShzd2l0Y2hlcylcbiAgICAgICAgICAubWFwKChzOiBhbnkpID0+IGBDJHtzLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9sZWRcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBsZWRzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImxlZHNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UobGVkcylcbiAgICAgICAgICAubWFwKChsOiBhbnkpID0+IGBDJHtsLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9mdXNlXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgZnVzZXMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiZnVzZXNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoZnVzZXMpXG4gICAgICAgICAgLm1hcCgobDogYW55KSA9PiBgQyR7bC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge31cbiAgfSxcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFBsYXRmb3JtQ29uZmlnIH0gZnJvbSBcIkB0c2NpcmN1aXQvcHJvcHNcIlxuaW1wb3J0IHsgamxjUGFydHNFbmdpbmUgfSBmcm9tIFwiQHRzY2lyY3VpdC9wYXJ0cy1lbmdpbmVcIlxuaW1wb3J0IHsgcGFyc2VLaWNhZE1vZFRvQ2lyY3VpdEpzb24gfSBmcm9tIFwia2ljYWQtY29tcG9uZW50LWNvbnZlcnRlclwiXG5jb25zdCBLSUNBRF9GT09UUFJJTlRfQ0FDSEVfVVJMID0gXCJodHRwczovL2tpY2FkLW1vZC1jYWNoZS50c2NpcmN1aXQuY29tXCJcblxuZXhwb3J0IGNvbnN0IGdldFBsYXRmb3JtQ29uZmlnID0gKCk6IFBsYXRmb3JtQ29uZmlnID0+ICh7XG4gIHBhcnRzRW5naW5lOiBqbGNQYXJ0c0VuZ2luZSxcbiAgZm9vdHByaW50TGlicmFyeU1hcDoge1xuICAgIGtpY2FkOiBhc3luYyAoZm9vdHByaW50TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gYCR7S0lDQURfRk9PVFBSSU5UX0NBQ0hFX1VSTH0vJHtmb290cHJpbnROYW1lfWBcbiAgICAgIGNvbnN0IGNpcmN1aXRKc29uVXJsID0gYCR7YmFzZVVybH0uY2lyY3VpdC5qc29uYFxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goY2lyY3VpdEpzb25VcmwpXG4gICAgICBjb25zdCByYXcgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAvLyBGaWx0ZXIgcGNiX3NpbGtzY3JlZW5fdGV4dCB0byBvbmx5IGtlZXAgZW50cmllcyB3aXRoIHRleHQgPT09IFwiUkVGKipcIlxuICAgICAgLy8gQXBwbHkgZmlsdGVyaW5nIG9ubHkgdG8gZWxlbWVudHMgY29taW5nIGZyb20gdGhlIGtpY2FkX21vZF9zZXJ2ZXIgcmVzcG9uc2VcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gQXJyYXkuaXNBcnJheShyYXcpXG4gICAgICAgID8gcmF3LmZpbHRlcigoZWwpID0+XG4gICAgICAgICAgICBlbD8udHlwZSA9PT0gXCJwY2Jfc2lsa3NjcmVlbl90ZXh0XCIgPyBlbD8udGV4dCA9PT0gXCJSRUYqKlwiIDogdHJ1ZSxcbiAgICAgICAgICApXG4gICAgICAgIDogcmF3XG4gICAgICBjb25zdCB3cmxVcmwgPSBgJHtiYXNlVXJsfS53cmxgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb290cHJpbnRDaXJjdWl0SnNvbjogZmlsdGVyZWQsXG4gICAgICAgIGNhZE1vZGVsOiB7IHdybFVybCwgbW9kZWxVbml0VG9NbVNjYWxlOiAyLjU0IH0sXG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgZm9vdHByaW50RmlsZVBhcnNlck1hcDoge1xuICAgIGtpY2FkX21vZDoge1xuICAgICAgbG9hZEZyb21Vcmw6IGFzeW5jICh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBraWNhZENvbnRlbnQgPSBhd2FpdCBmZXRjaCh1cmwpLnRoZW4oKHJlcykgPT4gcmVzLnRleHQoKSlcbiAgICAgICAgY29uc3Qga2ljYWRKc29uID0gYXdhaXQgcGFyc2VLaWNhZE1vZFRvQ2lyY3VpdEpzb24oa2ljYWRDb250ZW50KVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZvb3RwcmludENpcmN1aXRKc29uOiBBcnJheS5pc0FycmF5KGtpY2FkSnNvbilcbiAgICAgICAgICAgID8ga2ljYWRKc29uXG4gICAgICAgICAgICA6IFtraWNhZEpzb25dLFxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KVxuIiwgImV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGaWxlUGF0aChmaWxlUGF0aDogc3RyaW5nKSB7XG4gIGxldCBub3JtRmlsZVBhdGggPSBmaWxlUGF0aFxuICBub3JtRmlsZVBhdGggPSBub3JtRmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIilcbiAgbm9ybUZpbGVQYXRoID0gbm9ybUZpbGVQYXRoLnRyaW0oKVxuICBpZiAobm9ybUZpbGVQYXRoLnN0YXJ0c1dpdGgoXCIuL1wiKSkge1xuICAgIG5vcm1GaWxlUGF0aCA9IG5vcm1GaWxlUGF0aC5zbGljZSgyKVxuICB9XG4gIGlmIChub3JtRmlsZVBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICBub3JtRmlsZVBhdGggPSBub3JtRmlsZVBhdGguc2xpY2UoMSlcbiAgfVxuICByZXR1cm4gbm9ybUZpbGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGc01hcChmc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICBjb25zdCBub3JtYWxpemVkRnNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICBmb3IgKGNvbnN0IFtmc1BhdGgsIGZpbGVDb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhmc01hcCkpIHtcbiAgICBub3JtYWxpemVkRnNNYXBbbm9ybWFsaXplRmlsZVBhdGgoZnNQYXRoKV0gPSBmaWxlQ29udGVudFxuICB9XG4gIHJldHVybiBub3JtYWxpemVkRnNNYXBcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFueUNpcmN1aXRFbGVtZW50IH0gZnJvbSBcImNpcmN1aXQtanNvblwiXG5pbXBvcnQgdHlwZSB7XG4gIENpcmN1aXRSdW5uZXJBcGksXG4gIENpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLFxufSBmcm9tIFwibGliL3NoYXJlZC90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IFBsYXRmb3JtQ29uZmlnIH0gZnJvbSBcIkB0c2NpcmN1aXQvcHJvcHNcIlxuaW1wb3J0IHsgY3JlYXRlRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi93ZWJ3b3JrZXIvZXhlY3V0aW9uLWNvbnRleHRcIlxuaW1wb3J0IHsgbm9ybWFsaXplRnNNYXAgfSBmcm9tIFwiLi9ub3JtYWxpemVGc01hcFwiXG5pbXBvcnQgdHlwZSB7IFJvb3RDaXJjdWl0IH0gZnJvbSBcIkB0c2NpcmN1aXQvY29yZVwiXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgaW1wb3J0RXZhbFBhdGggfSBmcm9tIFwid2Vid29ya2VyL2ltcG9ydC1ldmFsLXBhdGhcIlxuaW1wb3J0IHsgc2V0dXBEZWZhdWx0RW50cnlwb2ludElmTmVlZGVkIH0gZnJvbSBcIi4vc2V0dXBEZWZhdWx0RW50cnlwb2ludElmTmVlZGVkXCJcbmltcG9ydCB7IGVuaGFuY2VSb290Q2lyY3VpdEhhc05vQ2hpbGRyZW5FcnJvciB9IGZyb20gXCJsaWIvdXRpbHMvZW5oYW5jZS1yb290LWNpcmN1aXQtZXJyb3JcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJ0c2NpOmV2YWw6Q2lyY3VpdFJ1bm5lclwiKVxuXG5leHBvcnQgY2xhc3MgQ2lyY3VpdFJ1bm5lciBpbXBsZW1lbnRzIENpcmN1aXRSdW5uZXJBcGkge1xuICBfZXhlY3V0aW9uQ29udGV4dDogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlRXhlY3V0aW9uQ29udGV4dD4gfCBudWxsID0gbnVsbFxuICBfY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb246IENpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uID0ge1xuICAgIHNuaXBwZXRzQXBpQmFzZVVybDogXCJodHRwczovL3JlZ2lzdHJ5LWFwaS50c2NpcmN1aXQuY29tXCIsXG4gICAgY2pzUmVnaXN0cnlVcmw6IFwiaHR0cHM6Ly9janMudHNjaXJjdWl0LmNvbVwiLFxuICAgIHZlcmJvc2U6IGZhbHNlLFxuICB9XG4gIF9ldmVudExpc3RlbmVyczogUmVjb3JkPHN0cmluZywgKCguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZClbXT4gPSB7fVxuICBfZGVidWdOYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb246IFBhcnRpYWw8Q2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24+ID0ge30pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uKVxuICB9XG5cbiAgYXN5bmMgdmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBcIjAuMC4wXCJcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVXaXRoRnNNYXAob2dPcHRzOiB7XG4gICAgZW50cnlwb2ludD86IHN0cmluZ1xuICAgIG1haW5Db21wb25lbnRQYXRoPzogc3RyaW5nXG4gICAgbWFpbkNvbXBvbmVudE5hbWU/OiBzdHJpbmdcbiAgICBmc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBtYWluQ29tcG9uZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcHRzID0geyAuLi5vZ09wdHMgfVxuXG4gICAgaWYgKHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnZlcmJvc2UpIHtcbiAgICAgIERlYnVnLmVuYWJsZShcInRzY2k6ZXZhbDoqXCIpXG4gICAgfVxuXG4gICAgZGVidWcoXCJleGVjdXRlV2l0aEZzTWFwIGNhbGxlZCB3aXRoOlwiLCB7XG4gICAgICBlbnRyeXBvaW50OiBvcHRzLmVudHJ5cG9pbnQsXG4gICAgICBmc01hcEtleXM6IE9iamVjdC5rZXlzKG9wdHMuZnNNYXApLFxuICAgICAgbmFtZTogb3B0cy5uYW1lLFxuICAgIH0pXG5cbiAgICBzZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWQob3B0cylcblxuICAgIGRlYnVnKFwiZW50cnlwb2ludCBhZnRlciBzZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWQ6XCIsIHtcbiAgICAgIGVudHJ5cG9pbnQ6IG9wdHMuZW50cnlwb2ludCxcbiAgICB9KVxuXG4gICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0cy5uYW1lLFxuICAgICAgICBwbGF0Zm9ybTogdGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24ucGxhdGZvcm0sXG4gICAgICAgIHByb2plY3RDb25maWc6IHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnByb2plY3RDb25maWcsXG4gICAgICAgIGRlYnVnTmFtZXNwYWNlOiB0aGlzLl9kZWJ1Z05hbWVzcGFjZSxcbiAgICAgIH0sXG4gICAgKVxuICAgIHRoaXMuX2JpbmRFdmVudExpc3RlbmVycyh0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQpXG5cbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0LmVudHJ5cG9pbnQgPSBvcHRzLmVudHJ5cG9pbnQhXG4gICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dC5mc01hcCA9IG5vcm1hbGl6ZUZzTWFwKG9wdHMuZnNNYXApXG4gICAgaWYgKCF0aGlzLl9leGVjdXRpb25Db250ZXh0LmZzTWFwW29wdHMuZW50cnlwb2ludCFdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudHJ5cG9pbnQgXCIke29wdHMuZW50cnlwb2ludH1cIiBub3QgZm91bmRgKVxuICAgIH1cbiAgICA7KGdsb2JhbFRoaXMgYXMgYW55KS5fX3RzY2lyY3VpdF9jaXJjdWl0ID0gdGhpcy5fZXhlY3V0aW9uQ29udGV4dC5jaXJjdWl0XG5cbiAgICBjb25zdCBlbnRyeXBvaW50ID0gb3B0cy5lbnRyeXBvaW50IS5zdGFydHNXaXRoKFwiLi9cIilcbiAgICAgID8gb3B0cy5lbnRyeXBvaW50XG4gICAgICA6IGAuLyR7b3B0cy5lbnRyeXBvaW50fWBcblxuICAgIGRlYnVnKFwiZmluYWwgZW50cnlwb2ludDpcIiwgZW50cnlwb2ludClcbiAgICBhd2FpdCBpbXBvcnRFdmFsUGF0aChlbnRyeXBvaW50ISwgdGhpcy5fZXhlY3V0aW9uQ29udGV4dClcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGUoY29kZTogc3RyaW5nLCBvcHRzOiB7IG5hbWU/OiBzdHJpbmcgfSA9IHt9KSB7XG4gICAgaWYgKHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIltDaXJjdWl0UnVubmVyXSBleGVjdXRlIGNhbGxlZCB3aXRoIGNvZGUgbGVuZ3RoOlwiLFxuICAgICAgICBjb2RlLmxlbmd0aCxcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gY3JlYXRlRXhlY3V0aW9uQ29udGV4dChcbiAgICAgIHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBwbGF0Zm9ybTogdGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24ucGxhdGZvcm0sXG4gICAgICAgIHByb2plY3RDb25maWc6IHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnByb2plY3RDb25maWcsXG4gICAgICAgIGRlYnVnTmFtZXNwYWNlOiB0aGlzLl9kZWJ1Z05hbWVzcGFjZSxcbiAgICAgIH0sXG4gICAgKVxuICAgIHRoaXMuX2JpbmRFdmVudExpc3RlbmVycyh0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQpXG4gICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dC5mc01hcFtcImVudHJ5cG9pbnQudHN4XCJdID0gY29kZVxuICAgIDsoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fdHNjaXJjdWl0X2NpcmN1aXQgPSB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXRcblxuICAgIGF3YWl0IGltcG9ydEV2YWxQYXRoKFwiLi9lbnRyeXBvaW50LnRzeFwiLCB0aGlzLl9leGVjdXRpb25Db250ZXh0KVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbXBvbmVudChjb21wb25lbnQ6IGFueSwgb3B0czogeyBuYW1lPzogc3RyaW5nIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbi52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltDaXJjdWl0UnVubmVyXSBleGVjdXRlQ29tcG9uZW50IGNhbGxlZFwiKVxuICAgIH1cblxuICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBjcmVhdGVFeGVjdXRpb25Db250ZXh0KFxuICAgICAgdGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24sXG4gICAgICB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHBsYXRmb3JtOiB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbi5wbGF0Zm9ybSxcbiAgICAgICAgcHJvamVjdENvbmZpZzogdGhpcy5fY2lyY3VpdFJ1bm5lckNvbmZpZ3VyYXRpb24ucHJvamVjdENvbmZpZyxcbiAgICAgICAgZGVidWdOYW1lc3BhY2U6IHRoaXMuX2RlYnVnTmFtZXNwYWNlLFxuICAgICAgfSxcbiAgICApXG4gICAgdGhpcy5fYmluZEV2ZW50TGlzdGVuZXJzKHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQuY2lyY3VpdClcbiAgICA7KGdsb2JhbFRoaXMgYXMgYW55KS5fX3RzY2lyY3VpdF9jaXJjdWl0ID0gdGhpcy5fZXhlY3V0aW9uQ29udGV4dC5jaXJjdWl0XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdHlwZW9mIGNvbXBvbmVudCA9PT0gXCJmdW5jdGlvblwiID8gY29tcG9uZW50KCkgOiBjb21wb25lbnRcbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQuYWRkKGVsZW1lbnQgYXMgYW55KVxuICB9XG5cbiAgb24oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XSA/Pz0gW11cbiAgICB0aGlzLl9ldmVudExpc3RlbmVyc1tldmVudF0ucHVzaChjYWxsYmFjaylcbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0Py5jaXJjdWl0Lm9uKGV2ZW50IGFzIGFueSwgY2FsbGJhY2spXG4gIH1cblxuICBhc3luYyByZW5kZXJVbnRpbFNldHRsZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9leGVjdXRpb25Db250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjaXJjdWl0IGhhcyBiZWVuIGNyZWF0ZWRcIilcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQuY2lyY3VpdC5yZW5kZXJVbnRpbFNldHRsZWQoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlbmhhbmNlUm9vdENpcmN1aXRIYXNOb0NoaWxkcmVuRXJyb3IoXG4gICAgICAgIGVycm9yLFxuICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0LmVudHJ5cG9pbnQsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q2lyY3VpdEpzb24oKTogUHJvbWlzZTxBbnlDaXJjdWl0RWxlbWVudFtdPiB7XG4gICAgaWYgKCF0aGlzLl9leGVjdXRpb25Db250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjaXJjdWl0IGhhcyBiZWVuIGNyZWF0ZWRcIilcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQuZ2V0Q2lyY3VpdEpzb24oKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlbmhhbmNlUm9vdENpcmN1aXRIYXNOb0NoaWxkcmVuRXJyb3IoXG4gICAgICAgIGVycm9yLFxuICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0LmVudHJ5cG9pbnQsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY2xlYXJFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fZXhlY3V0aW9uQ29udGV4dD8uY2lyY3VpdCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBpbiB0aGlzLl9ldmVudExpc3RlbmVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgIGNvbnN0IGNpcmN1aXQgPSB0aGlzLl9leGVjdXRpb25Db250ZXh0LmNpcmN1aXQgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IDxleHBsYW5hdGlvbj5cbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyPzogKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgIH1cbiAgICAgICAgICBjaXJjdWl0LnJlbW92ZUxpc3RlbmVyPy4oZXZlbnQsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBldmVudCBpbiB0aGlzLl9ldmVudExpc3RlbmVycykge1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGtpbGwoKSB7XG4gICAgLy8gQ2xlYW51cCByZXNvdXJjZXNcbiAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gbnVsbFxuICB9XG5cbiAgYXN5bmMgc2V0U25pcHBldHNBcGlCYXNlVXJsKGJhc2VVcmw6IHN0cmluZykge1xuICAgIHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnNuaXBwZXRzQXBpQmFzZVVybCA9IGJhc2VVcmxcbiAgfVxuXG4gIGFzeW5jIHNldFBsYXRmb3JtQ29uZmlnKHBsYXRmb3JtOiBQbGF0Zm9ybUNvbmZpZykge1xuICAgIHRoaXMuX2NpcmN1aXRSdW5uZXJDb25maWd1cmF0aW9uLnBsYXRmb3JtID0gcGxhdGZvcm1cbiAgfVxuXG4gIGFzeW5jIHNldFByb2plY3RDb25maWcocHJvamVjdDogUGFydGlhbDxQbGF0Zm9ybUNvbmZpZz4pIHtcbiAgICB0aGlzLl9jaXJjdWl0UnVubmVyQ29uZmlndXJhdGlvbi5wcm9qZWN0Q29uZmlnID0gcHJvamVjdFxuICB9XG5cbiAgYXN5bmMgZW5hYmxlRGVidWcobmFtZXNwYWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWJ1Z05hbWVzcGFjZSA9IG5hbWVzcGFjZVxuICAgIGlmICh0aGlzLl9leGVjdXRpb25Db250ZXh0KSB7XG4gICAgICBjb25zdCBjaXJjdWl0ID0gdGhpcy5fZXhlY3V0aW9uQ29udGV4dC5jaXJjdWl0IGFzIGFueVxuICAgICAgY2lyY3VpdC5lbmFibGVEZWJ1Zz8uKG5hbWVzcGFjZSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9iaW5kRXZlbnRMaXN0ZW5lcnMoY2lyY3VpdDogUm9vdENpcmN1aXQpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IGluIHRoaXMuX2V2ZW50TGlzdGVuZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICBjaXJjdWl0Lm9uKGV2ZW50IGFzIGFueSwgbGlzdGVuZXIgYXMgYW55KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogUmV0dXJucyB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgYSBwYXRoLCBzaW1pbGFyIHRvIE5vZGUuanMgcGF0aC5kaXJuYW1lXG4gKiBXb3JrcyBvbiBib3RoIFVuaXggYW5kIFdpbmRvd3MgcGF0aHNcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGV4dHJhY3QgdGhlIGRpcmVjdG9yeSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgZGlyZWN0b3J5IHBhcnQgb2YgdGhlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gXCIuXCJcblxuICAvLyBOb3JtYWxpemUgcGF0aCBzZXBhcmF0b3JzIHRvIGZvcndhcmQgc2xhc2hlc1xuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIilcblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlc1xuICBjb25zdCBjbGVhblBhdGggPSBub3JtYWxpemVkUGF0aC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIHNsYXNoZXMsIHJldHVybiBcIi5cIlxuICBpZiAoY2xlYW5QYXRoLmluZGV4T2YoXCIvXCIpID09PSAtMSkgcmV0dXJuIFwiLlwiXG5cbiAgLy8gUmV0dXJuIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3Qgc2xhc2hcbiAgcmV0dXJuIGNsZWFuUGF0aC5zdWJzdHJpbmcoMCwgY2xlYW5QYXRoLmxhc3RJbmRleE9mKFwiL1wiKSkgfHwgXCIvXCJcbn1cbiIsICJpbXBvcnQgeyBub3JtYWxpemVGaWxlUGF0aCB9IGZyb20gXCIuL25vcm1hbGl6ZUZzTWFwXCJcblxudHlwZSBSYXdUc0NvbmZpZyA9IHtcbiAgY29tcGlsZXJPcHRpb25zPzoge1xuICAgIGJhc2VVcmw/OiBzdHJpbmdcbiAgICBwYXRocz86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRzQ29uZmlnUGF0aHNJbmZvID0ge1xuICBiYXNlVXJsOiBzdHJpbmdcbiAgcGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHNDb25maWcoXG4gIGZzTWFwT3JBbGxGaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmdbXSxcbik6IFRzQ29uZmlnUGF0aHNJbmZvIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KGZzTWFwT3JBbGxGaWxlUGF0aHMpKSByZXR1cm4gbnVsbFxuICBjb25zdCB0c2NvbmZpZ0NvbnRlbnQgPSBmc01hcE9yQWxsRmlsZVBhdGhzW1widHNjb25maWcuanNvblwiXVxuICBpZiAoIXRzY29uZmlnQ29udGVudCkgcmV0dXJuIG51bGxcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRzY29uZmlnQ29udGVudCkgYXMgUmF3VHNDb25maWdcbiAgICByZXR1cm4gcGFyc2VkPy5jb21waWxlck9wdGlvbnM/LnBhdGhzXG4gICAgICA/IHtcbiAgICAgICAgICBiYXNlVXJsOiBwYXJzZWQuY29tcGlsZXJPcHRpb25zLmJhc2VVcmwgfHwgXCIuXCIsXG4gICAgICAgICAgcGF0aHM6IHBhcnNlZC5jb21waWxlck9wdGlvbnMucGF0aHMsXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV2l0aFRzY29uZmlnUGF0aHMob3B0czoge1xuICBpbXBvcnRQYXRoOiBzdHJpbmdcbiAgbm9ybWFsaXplZEZpbGVQYXRoTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIGV4dGVuc2lvbnM6IHN0cmluZ1tdXG4gIHRzQ29uZmlnOiBUc0NvbmZpZ1BhdGhzSW5mbyB8IG51bGxcbn0pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBpbXBvcnRQYXRoLCBub3JtYWxpemVkRmlsZVBhdGhNYXAsIGV4dGVuc2lvbnMsIHRzQ29uZmlnIH0gPSBvcHRzXG4gIGlmICghdHNDb25maWcpIHJldHVybiBudWxsXG4gIGNvbnN0IHsgYmFzZVVybCwgcGF0aHMgfSA9IHRzQ29uZmlnXG5cbiAgY29uc3QgdHJ5UmVzb2x2ZUNhbmRpZGF0ZSA9IChjYW5kaWRhdGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDYW5kaWRhdGUgPSBub3JtYWxpemVGaWxlUGF0aChjYW5kaWRhdGUpXG4gICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMobm9ybWFsaXplZENhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkRmlsZVBhdGhNYXAuZ2V0KG5vcm1hbGl6ZWRDYW5kaWRhdGUpIVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICBjb25zdCB3aXRoRXh0ID0gYCR7bm9ybWFsaXplZENhbmRpZGF0ZX0uJHtleHR9YFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMod2l0aEV4dCkpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5nZXQod2l0aEV4dCkhXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGNvbnN0IFthbGlhcywgdGFyZ2V0c10gb2YgT2JqZWN0LmVudHJpZXMocGF0aHMpKSB7XG4gICAgLy8gU3VwcG9ydCBwYXR0ZXJucyBsaWtlIFwiQHNyYy8qXCIgb3IgXCJ1dGlscy8qXCIgYW5kIGFsc28gZXhhY3QgbWF0Y2hlcyB3aXRob3V0IFwiKlwiXG4gICAgY29uc3QgaGFzV2lsZGNhcmQgPSBhbGlhcy5pbmNsdWRlcyhcIipcIilcbiAgICBpZiAoaGFzV2lsZGNhcmQpIHtcbiAgICAgIGNvbnN0IFtwcmVmaXgsIHN1ZmZpeF0gPSBhbGlhcy5zcGxpdChcIipcIilcbiAgICAgIGlmIChcbiAgICAgICAgIWltcG9ydFBhdGguc3RhcnRzV2l0aChwcmVmaXgpIHx8XG4gICAgICAgICFpbXBvcnRQYXRoLmVuZHNXaXRoKHN1ZmZpeCB8fCBcIlwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBzdGFyTWF0Y2ggPSBpbXBvcnRQYXRoLnNsaWNlKFxuICAgICAgICBwcmVmaXgubGVuZ3RoLFxuICAgICAgICBpbXBvcnRQYXRoLmxlbmd0aCAtIChzdWZmaXggPyBzdWZmaXgubGVuZ3RoIDogMCksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkID0gdGFyZ2V0LnJlcGxhY2UoXCIqXCIsIHN0YXJNYXRjaClcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID1cbiAgICAgICAgICBiYXNlVXJsICYmICFyZXBsYWNlZC5zdGFydHNXaXRoKFwiLi9cIikgJiYgIXJlcGxhY2VkLnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICAgICAgICA/IGAke2Jhc2VVcmx9LyR7cmVwbGFjZWR9YFxuICAgICAgICAgICAgOiByZXBsYWNlZFxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHRyeVJlc29sdmVDYW5kaWRhdGUoY2FuZGlkYXRlKVxuICAgICAgICBpZiAocmVzb2x2ZWQpIHJldHVybiByZXNvbHZlZFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW1wb3J0UGF0aCAhPT0gYWxpYXMpIGNvbnRpbnVlXG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9XG4gICAgICAgICAgYmFzZVVybCAmJiAhdGFyZ2V0LnN0YXJ0c1dpdGgoXCIuL1wiKSAmJiAhdGFyZ2V0LnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICAgICAgICA/IGAke2Jhc2VVcmx9LyR7dGFyZ2V0fWBcbiAgICAgICAgICAgIDogdGFyZ2V0XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gdHJ5UmVzb2x2ZUNhbmRpZGF0ZShjYW5kaWRhdGUpXG4gICAgICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuIHJlc29sdmVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiIsICJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIi4vZGlybmFtZVwiXG5cbi8qKlxuICogUmVzb2x2ZSBhbiBpbXBvcnRQYXRoIHJlbGF0aXZlIHRvIGEgY3dkLCBzdXBwb3J0aW5nIC4uLywgLi8gYW5kIGFic29sdXRlIHBhdGhzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlbGF0aXZlUGF0aChpbXBvcnRQYXRoOiBzdHJpbmcsIGN3ZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gSGFuZGxlIHBhcmVudCBkaXJlY3RvcnkgbmF2aWdhdGlvblxuICBpZiAoaW1wb3J0UGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSB7XG4gICAgY29uc3QgcGFyZW50RGlyID0gZGlybmFtZShjd2QpXG4gICAgcmV0dXJuIHJlc29sdmVSZWxhdGl2ZVBhdGgoaW1wb3J0UGF0aC5zbGljZSgzKSwgcGFyZW50RGlyKVxuICB9XG4gIC8vIEhhbmRsZSBjdXJyZW50IGRpcmVjdG9yeVxuICBpZiAoaW1wb3J0UGF0aC5zdGFydHNXaXRoKFwiLi9cIikpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVJlbGF0aXZlUGF0aChpbXBvcnRQYXRoLnNsaWNlKDIpLCBjd2QpXG4gIH1cbiAgLy8gSGFuZGxlIGFic29sdXRlIHBhdGhcbiAgaWYgKGltcG9ydFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICByZXR1cm4gaW1wb3J0UGF0aC5zbGljZSgxKVxuICB9XG4gIC8vIEhhbmRsZSByZWxhdGl2ZSBwYXRoXG4gIHJldHVybiBgJHtjd2R9LyR7aW1wb3J0UGF0aH1gXG59XG4iLCAiaW1wb3J0IHsgbm9ybWFsaXplRmlsZVBhdGggfSBmcm9tIFwiLi9ub3JtYWxpemVGc01hcFwiXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcImxpYi91dGlscy9kaXJuYW1lXCJcbmltcG9ydCB7IGdldFRzQ29uZmlnLCByZXNvbHZlV2l0aFRzY29uZmlnUGF0aHMgfSBmcm9tIFwiLi90c2NvbmZpZ1BhdGhzXCJcbmltcG9ydCB7IHJlc29sdmVSZWxhdGl2ZVBhdGggfSBmcm9tIFwibGliL3V0aWxzL3Jlc29sdmVSZWxhdGl2ZVBhdGhcIlxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZpbGVQYXRoID0gKFxuICB1bmtub3duRmlsZVBhdGg6IHN0cmluZyxcbiAgZnNNYXBPckFsbEZpbGVQYXRoczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1tdLFxuICBjd2Q/OiBzdHJpbmcsXG4pID0+IHtcbiAgLy8gSGFuZGxlIHBhcmVudCBkaXJlY3RvcnkgbmF2aWdhdGlvbiBwcm9wZXJseVxuICBjb25zdCByZXNvbHZlZFBhdGggPSBjd2RcbiAgICA/IHJlc29sdmVSZWxhdGl2ZVBhdGgodW5rbm93bkZpbGVQYXRoLCBjd2QpXG4gICAgOiB1bmtub3duRmlsZVBhdGhcblxuICBjb25zdCBmaWxlUGF0aHMgPSBuZXcgU2V0KFxuICAgIEFycmF5LmlzQXJyYXkoZnNNYXBPckFsbEZpbGVQYXRocylcbiAgICAgID8gZnNNYXBPckFsbEZpbGVQYXRoc1xuICAgICAgOiBPYmplY3Qua2V5cyhmc01hcE9yQWxsRmlsZVBhdGhzKSxcbiAgKVxuXG4gIGlmIChmaWxlUGF0aHMuaGFzKHJlc29sdmVkUGF0aCkpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRQYXRoXG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkRmlsZVBhdGhNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpXG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgZmlsZVBhdGhzKSB7XG4gICAgbm9ybWFsaXplZEZpbGVQYXRoTWFwLnNldChub3JtYWxpemVGaWxlUGF0aChmaWxlUGF0aCksIGZpbGVQYXRoKVxuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUZpbGVQYXRoKHJlc29sdmVkUGF0aClcblxuICBpZiAobm9ybWFsaXplZEZpbGVQYXRoTWFwLmhhcyhub3JtYWxpemVkUmVzb2x2ZWRQYXRoKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkRmlsZVBhdGhNYXAuZ2V0KG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGgpIVxuICB9XG5cbiAgLy8gU2VhcmNoIGZvciBmaWxlIHdpdGggYSBzZXQgb2YgZGlmZmVyZW50IGV4dGVuc2lvbnNcbiAgY29uc3QgZXh0ZW5zaW9uID0gW1widHN4XCIsIFwidHNcIiwgXCJqc29uXCIsIFwianNcIiwgXCJqc3hcIiwgXCJvYmpcIiwgXCJnbHRmXCIsIFwiZ2xiXCJdXG4gIGZvciAoY29uc3QgZXh0IG9mIGV4dGVuc2lvbikge1xuICAgIGNvbnN0IHBvc3NpYmxlRmlsZVBhdGggPSBgJHtub3JtYWxpemVkUmVzb2x2ZWRQYXRofS4ke2V4dH1gXG4gICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMocG9zc2libGVGaWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkRmlsZVBhdGhNYXAuZ2V0KHBvc3NpYmxlRmlsZVBhdGgpIVxuICAgIH1cbiAgfVxuXG4gIC8vIFRyeSByZXNvbHZpbmcgdXNpbmcgdHNjb25maWcgXCJwYXRoc1wiIG1hcHBpbmcgd2hlbiB0aGUgaW1wb3J0IGlzIG5vbi1yZWxhdGl2ZVxuICBjb25zdCB0c0NvbmZpZyA9XG4gICAgIUFycmF5LmlzQXJyYXkoZnNNYXBPckFsbEZpbGVQYXRocykgJiZcbiAgICB0eXBlb2YgZnNNYXBPckFsbEZpbGVQYXRocyA9PT0gXCJvYmplY3RcIlxuICAgICAgPyBnZXRUc0NvbmZpZyhmc01hcE9yQWxsRmlsZVBhdGhzKVxuICAgICAgOiBudWxsXG5cbiAgaWYgKCF1bmtub3duRmlsZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpICYmICF1bmtub3duRmlsZVBhdGguc3RhcnRzV2l0aChcIi4uL1wiKSkge1xuICAgIGNvbnN0IHZpYVRzY29uZmlnID0gcmVzb2x2ZVdpdGhUc2NvbmZpZ1BhdGhzKHtcbiAgICAgIGltcG9ydFBhdGg6IHVua25vd25GaWxlUGF0aCxcbiAgICAgIG5vcm1hbGl6ZWRGaWxlUGF0aE1hcCxcbiAgICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbixcbiAgICAgIHRzQ29uZmlnLFxuICAgIH0pXG4gICAgaWYgKHZpYVRzY29uZmlnKSByZXR1cm4gdmlhVHNjb25maWdcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGl0J3MgYW4gYWJzb2x1dGUgaW1wb3J0XG4gIGlmICghdW5rbm93bkZpbGVQYXRoLnN0YXJ0c1dpdGgoXCIuL1wiKSAmJiAhdW5rbm93bkZpbGVQYXRoLnN0YXJ0c1dpdGgoXCIuLi9cIikpIHtcbiAgICBjb25zdCBub3JtYWxpemVkVW5rbm93bkZpbGVQYXRoID0gbm9ybWFsaXplRmlsZVBhdGgodW5rbm93bkZpbGVQYXRoKVxuICAgIGlmIChub3JtYWxpemVkRmlsZVBhdGhNYXAuaGFzKG5vcm1hbGl6ZWRVbmtub3duRmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZEZpbGVQYXRoTWFwLmdldChub3JtYWxpemVkVW5rbm93bkZpbGVQYXRoKSFcbiAgICB9XG4gICAgZm9yIChjb25zdCBleHQgb2YgZXh0ZW5zaW9uKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZUZpbGVQYXRoID0gYCR7bm9ybWFsaXplZFVua25vd25GaWxlUGF0aH0uJHtleHR9YFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5oYXMocG9zc2libGVGaWxlUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRGaWxlUGF0aE1hcC5nZXQocG9zc2libGVGaWxlUGF0aCkhXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVGaWxlUGF0aE9yVGhyb3cgPSAoXG4gIHVua25vd25GaWxlUGF0aDogc3RyaW5nLFxuICBmc01hcE9yQWxsRmlsZVBhdGhzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nW10sXG4pID0+IHtcbiAgY29uc3QgcmVzb2x2ZWRGaWxlUGF0aCA9IHJlc29sdmVGaWxlUGF0aCh1bmtub3duRmlsZVBhdGgsIGZzTWFwT3JBbGxGaWxlUGF0aHMpXG4gIGlmICghcmVzb2x2ZWRGaWxlUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGaWxlIG5vdCBmb3VuZCBcIiR7dW5rbm93bkZpbGVQYXRofVwiLCBhdmFpbGFibGUgcGF0aHM6XFxuXFxuJHtPYmplY3Qua2V5cyhmc01hcE9yQWxsRmlsZVBhdGhzKS5qb2luKFwiLCBcIil9YCxcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkRmlsZVBhdGhcbn1cbiIsICJleHBvcnQgY29uc3QgZ2V0SW1wb3J0c0Zyb21Db2RlID0gKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgLy8gTWF0Y2ggYmFzaWMgaW1wb3J0IHBhdHRlcm5zIGluY2x1ZGluZyBjb21iaW5lZCBkZWZhdWx0IGFuZCBuYW1lc3BhY2UgaW1wb3J0c1xuICBjb25zdCBpbXBvcnRSZWdleCA9XG4gICAgL15cXHMqaW1wb3J0XFxzKyg/Oig/OltcXHdcXHNdKyxcXHMqKT8oPzpcXCpcXHMrYXNcXHMrW1xcd1xcc10rfFxce1tcXHNcXHcsXStcXH18XFx3KylcXHMrZnJvbVxccyopP1snXCJdKC4rPylbJ1wiXS9nbVxuICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiA8ZXhwbGFuYXRpb24+XG4gIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgIGltcG9ydHMucHVzaChtYXRjaFsxXSlcbiAgfVxuXG4gIC8vIE1hdGNoIHJlLWV4cG9ydHNcbiAgY29uc3QgcmVFeHBvcnRSZWdleCA9XG4gICAgL15cXHMqZXhwb3J0XFxzKyg/OlxcKnwoPzpcXHtbXFxzXFx3LF0rXFx9KSlcXHMrZnJvbVxccypbJ1wiXSguKz8pWydcIl0vZ21cbiAgbGV0IHJlRXhwb3J0TWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGxcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0Fzc2lnbkluRXhwcmVzc2lvbnM6IDxleHBsYW5hdGlvbj5cbiAgd2hpbGUgKChyZUV4cG9ydE1hdGNoID0gcmVFeHBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgIGltcG9ydHMucHVzaChyZUV4cG9ydE1hdGNoWzFdKVxuICB9XG5cbiAgcmV0dXJuIGltcG9ydHNcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlRmlsZVBhdGggfSBmcm9tIFwibGliL3J1bm5lci9yZXNvbHZlRmlsZVBhdGhcIlxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbENvbXBpbGVkSnMoXG4gIGNvbXBpbGVkQ29kZTogc3RyaW5nLFxuICBwcmVTdXBwbGllZEltcG9ydHM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGN3ZD86IHN0cmluZyxcbikge1xuICA7KGdsb2JhbFRoaXMgYXMgYW55KS5fX3RzY2lyY3VpdF9yZXF1aXJlID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkRmlsZVBhdGggPSByZXNvbHZlRmlsZVBhdGgobmFtZSwgcHJlU3VwcGxpZWRJbXBvcnRzLCBjd2QpXG5cbiAgICBjb25zdCBoYXNSZXNvbHZlZEZpbGVQYXRoID1cbiAgICAgIHJlc29sdmVkRmlsZVBhdGggJiYgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkRmlsZVBhdGhdXG5cbiAgICBpZiAoIXByZVN1cHBsaWVkSW1wb3J0c1tuYW1lXSAmJiAhaGFzUmVzb2x2ZWRGaWxlUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgXCIke25hbWV9XCIgbm90IGZvdW5kICR7Y3dkID8gYGluIFwiJHtjd2R9XCJgIDogXCJcIn1gKVxuICAgIH1cblxuICAgIGNvbnN0IG1vZCA9XG4gICAgICBwcmVTdXBwbGllZEltcG9ydHNbbmFtZV0gfHwgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkRmlsZVBhdGghXVxuICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIGlmICghKHByb3AgaW4gdGFyZ2V0KSkge1xuICAgICAgICAgIGlmIChwcm9wID09PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5kZWZhdWx0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQuX19lc01vZHVsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHRhcmdldCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocHJvcCA9PT0gXCJfX2VzTW9kdWxlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvbXBvbmVudCBcIiR7U3RyaW5nKHByb3ApfVwiIGlzIG5vdCBleHBvcnRlZCBieSBcIiR7bmFtZX1cImAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wIGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmdW5jdGlvbkJvZHkgPSBgXG4gIHZhciBleHBvcnRzID0ge307XG4gIHZhciByZXF1aXJlID0gZ2xvYmFsVGhpcy5fX3RzY2lyY3VpdF9yZXF1aXJlO1xuICB2YXIgbW9kdWxlID0geyBleHBvcnRzIH07XG4gIHZhciBjaXJjdWl0ID0gZ2xvYmFsVGhpcy5fX3RzY2lyY3VpdF9jaXJjdWl0O1xuICAke2NvbXBpbGVkQ29kZX07XG4gIHJldHVybiBtb2R1bGU7YC50cmltKClcbiAgcmV0dXJuIEZ1bmN0aW9uKGZ1bmN0aW9uQm9keSkuY2FsbChnbG9iYWxUaGlzKVxufVxuIiwgImltcG9ydCB7XG4gIHJlc29sdmVGaWxlUGF0aCxcbiAgcmVzb2x2ZUZpbGVQYXRoT3JUaHJvdyxcbn0gZnJvbSBcImxpYi9ydW5uZXIvcmVzb2x2ZUZpbGVQYXRoXCJcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibGliL3V0aWxzL2Rpcm5hbWVcIlxuaW1wb3J0IHsgZ2V0SW1wb3J0c0Zyb21Db2RlIH0gZnJvbSBcImxpYi91dGlscy9nZXQtaW1wb3J0cy1mcm9tLWNvZGVcIlxuaW1wb3J0IHsgZXZhbENvbXBpbGVkSnMgfSBmcm9tIFwiLi9ldmFsLWNvbXBpbGVkLWpzXCJcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL2V4ZWN1dGlvbi1jb250ZXh0XCJcbmltcG9ydCB7IGltcG9ydEV2YWxQYXRoIH0gZnJvbSBcIi4vaW1wb3J0LWV2YWwtcGF0aFwiXG5pbXBvcnQgRGVidWcgZnJvbSBcImRlYnVnXCJcbmltcG9ydCB7IGlzU3RhdGljQXNzZXRQYXRoIH0gZnJvbSBcImxpYi9zaGFyZWQvc3RhdGljLWFzc2V0LWV4dGVuc2lvbnNcIlxuaW1wb3J0IHsgdHJhbnNmb3JtV2l0aFN1Y3Jhc2UgfSBmcm9tIFwiLi90cmFuc2Zvcm0td2l0aC1zdWNyYXNlXCJcblxuY29uc3QgZGVidWcgPSBEZWJ1ZyhcInRzY2k6ZXZhbDppbXBvcnQtbG9jYWwtZmlsZVwiKVxuXG5leHBvcnQgY29uc3QgaW1wb3J0TG9jYWxGaWxlID0gYXN5bmMgKFxuICBpbXBvcnROYW1lOiBzdHJpbmcsXG4gIGN0eDogRXhlY3V0aW9uQ29udGV4dCxcbiAgZGVwdGggPSAwLFxuKSA9PiB7XG4gIGRlYnVnKFwiaW1wb3J0TG9jYWxGaWxlIGNhbGxlZCB3aXRoOlwiLCB7XG4gICAgaW1wb3J0TmFtZSxcbiAgfSlcblxuICBjb25zdCB7IGZzTWFwLCBwcmVTdXBwbGllZEltcG9ydHMgfSA9IGN0eFxuXG4gIGNvbnN0IGZzUGF0aCA9IHJlc29sdmVGaWxlUGF0aE9yVGhyb3coaW1wb3J0TmFtZSwgZnNNYXApXG4gIGRlYnVnKFwiZnNQYXRoOlwiLCBmc1BhdGgpXG4gIGlmICghY3R4LmZzTWFwW2ZzUGF0aF0pIHtcbiAgICBkZWJ1ZyhcImZzUGF0aCBub3QgZm91bmQgaW4gZnNNYXA6XCIsIGZzUGF0aClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgXCIke2ZzUGF0aH1cIiBub3QgZm91bmRgKVxuICB9XG4gIGNvbnN0IGZpbGVDb250ZW50ID0gZnNNYXBbZnNQYXRoXVxuICBkZWJ1ZyhcImZpbGVDb250ZW50OlwiLCBmaWxlQ29udGVudD8uc2xpY2UoMCwgMTAwKSlcbiAgaWYgKGZzUGF0aC5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgY29uc3QganNvbkRhdGEgPSBKU09OLnBhcnNlKGZpbGVDb250ZW50KVxuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmc1BhdGhdID0ge1xuICAgICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6IGpzb25EYXRhLFxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0YXRpY0Fzc2V0UGF0aChmc1BhdGgpKSB7XG4gICAgY29uc3QgcGxhdGZvcm1Db25maWcgPSBjdHguY2lyY3VpdC5wbGF0Zm9ybVxuICAgIC8vIFVzZSBwcm9qZWN0QmFzZVVybCBmb3Igc3RhdGljIGZpbGUgaW1wb3J0c1xuICAgIGNvbnN0IHN0YXRpY1VybCA9IGAke3BsYXRmb3JtQ29uZmlnPy5wcm9qZWN0QmFzZVVybCA/PyBcIlwifS8ke2ZzUGF0aC5zdGFydHNXaXRoKFwiLi9cIikgPyBmc1BhdGguc2xpY2UoMikgOiBmc1BhdGh9YFxuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmc1BhdGhdID0ge1xuICAgICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6IHN0YXRpY1VybCxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZnNQYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSB8fCBmc1BhdGguZW5kc1dpdGgoXCIudHNcIikpIHtcbiAgICBjb25zdCBpbXBvcnROYW1lcyA9IGdldEltcG9ydHNGcm9tQ29kZShmaWxlQ29udGVudClcblxuICAgIGZvciAoY29uc3QgaW1wb3J0TmFtZSBvZiBpbXBvcnROYW1lcykge1xuICAgICAgaWYgKCFwcmVTdXBwbGllZEltcG9ydHNbaW1wb3J0TmFtZV0pIHtcbiAgICAgICAgYXdhaXQgaW1wb3J0RXZhbFBhdGgoaW1wb3J0TmFtZSwgY3R4LCBkZXB0aCArIDEsIHtcbiAgICAgICAgICBjd2Q6IGRpcm5hbWUoZnNQYXRoKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRDb2RlID0gdHJhbnNmb3JtV2l0aFN1Y3Jhc2UoZmlsZUNvbnRlbnQsIGZzUGF0aClcbiAgICAgIGRlYnVnKFwiZXZhbENvbXBpbGVkSnMgY2FsbGVkIHdpdGg6XCIsIHtcbiAgICAgICAgY29kZTogdHJhbnNmb3JtZWRDb2RlLnNsaWNlKDAsIDEwMCksXG4gICAgICAgIGRpcm5hbWU6IGRpcm5hbWUoZnNQYXRoKSxcbiAgICAgIH0pXG4gICAgICBjb25zdCBpbXBvcnRSdW5SZXN1bHQgPSBldmFsQ29tcGlsZWRKcyhcbiAgICAgICAgdHJhbnNmb3JtZWRDb2RlLFxuICAgICAgICBwcmVTdXBwbGllZEltcG9ydHMsXG4gICAgICAgIGRpcm5hbWUoZnNQYXRoKSxcbiAgICAgIClcbiAgICAgIGRlYnVnKFwiaW1wb3J0UnVuUmVzdWx0OlwiLCB7XG4gICAgICAgIGZzUGF0aCxcbiAgICAgICAgaW1wb3J0UnVuUmVzdWx0LFxuICAgICAgfSlcbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmc1BhdGhdID0gaW1wb3J0UnVuUmVzdWx0LmV4cG9ydHNcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFdmFsIGNvbXBpbGVkIGpzIGVycm9yIGZvciBcIiR7aW1wb3J0TmFtZX1cIjogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2UgaWYgKGZzUGF0aC5lbmRzV2l0aChcIi5qc1wiKSkge1xuICAgIC8vIEZvciAuanMgZmlsZXMsIGVzcGVjaWFsbHkgZnJvbSBub2RlX21vZHVsZXMsIHdlIG5lZWQgdG8gdHJhbnNmb3JtIHRoZW1cbiAgICBwcmVTdXBwbGllZEltcG9ydHNbZnNQYXRoXSA9IGV2YWxDb21waWxlZEpzKFxuICAgICAgdHJhbnNmb3JtV2l0aFN1Y3Jhc2UoZmlsZUNvbnRlbnQsIGZzUGF0aCksXG4gICAgICBwcmVTdXBwbGllZEltcG9ydHMsXG4gICAgICBkaXJuYW1lKGZzUGF0aCksXG4gICAgKS5leHBvcnRzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVuc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uIFwiJHtmc1BhdGguc3BsaXQoXCIuXCIpLnBvcCgpfVwiIGZvciBcIiR7ZnNQYXRofVwiYCxcbiAgICApXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgU1RBVElDX0FTU0VUX0VYVEVOU0lPTlMgPSBbXG4gIFwiLmdsYlwiLFxuICBcIi5raWNhZF9tb2RcIixcbiAgXCIuZ2x0ZlwiLFxuICBcIi5vYmpcIixcbiAgXCIuc3RsXCIsXG5dXG5cbmV4cG9ydCBjb25zdCBpc1N0YXRpY0Fzc2V0UGF0aCA9IChwYXRoOiBzdHJpbmcpID0+XG4gIFNUQVRJQ19BU1NFVF9FWFRFTlNJT05TLnNvbWUoKGV4dCkgPT4gcGF0aC5lbmRzV2l0aChleHQpKVxuIiwgImltcG9ydCB7IHRyYW5zZm9ybSwgdHlwZSBUcmFuc2Zvcm0gYXMgU3VjcmFzZVRyYW5zZm9ybSB9IGZyb20gXCJzdWNyYXNlXCJcblxuY29uc3QgVFNfRVhURU5TSU9OUyA9IG5ldyBTZXQoW1wiLnRzXCIsIFwiLnRzeFwiLCBcIi5tdHNcIiwgXCIuY3RzXCJdKVxuY29uc3QgSlNYX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFtcIi50c3hcIiwgXCIuanN4XCIsIFwiLnRzXCJdKVxuXG5jb25zdCBzdHJpcFF1ZXJ5QW5kSGFzaCA9IChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5SW5kZXggPSBmaWxlUGF0aC5pbmRleE9mKFwiP1wiKVxuICBjb25zdCBoYXNoSW5kZXggPSBmaWxlUGF0aC5pbmRleE9mKFwiI1wiKVxuXG4gIGxldCBlbmRJbmRleCA9IGZpbGVQYXRoLmxlbmd0aFxuXG4gIGlmIChxdWVyeUluZGV4ICE9PSAtMSAmJiBoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgZW5kSW5kZXggPSBNYXRoLm1pbihxdWVyeUluZGV4LCBoYXNoSW5kZXgpXG4gIH0gZWxzZSBpZiAocXVlcnlJbmRleCAhPT0gLTEpIHtcbiAgICBlbmRJbmRleCA9IHF1ZXJ5SW5kZXhcbiAgfSBlbHNlIGlmIChoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgZW5kSW5kZXggPSBoYXNoSW5kZXhcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5zbGljZSgwLCBlbmRJbmRleClcbn1cblxuY29uc3QgZ2V0RXh0ZW5zaW9uID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBzdHJpcFF1ZXJ5QW5kSGFzaChmaWxlUGF0aClcbiAgY29uc3QgbGFzdERvdEluZGV4ID0gbm9ybWFsaXplZFBhdGgubGFzdEluZGV4T2YoXCIuXCIpXG5cbiAgaWYgKGxhc3REb3RJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG5cbiAgY29uc3QgbGFzdFNsYXNoSW5kZXggPSBNYXRoLm1heChcbiAgICBub3JtYWxpemVkUGF0aC5sYXN0SW5kZXhPZihcIi9cIiksXG4gICAgbm9ybWFsaXplZFBhdGgubGFzdEluZGV4T2YoXCJcXFxcXCIpLFxuICApXG5cbiAgaWYgKGxhc3RTbGFzaEluZGV4ID4gbGFzdERvdEluZGV4KSB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkUGF0aC5zbGljZShsYXN0RG90SW5kZXgpLnRvTG93ZXJDYXNlKClcbn1cblxuY29uc3QgZ2V0VHJhbnNmb3Jtc0ZvckZpbGVQYXRoID0gKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RXh0ZW5zaW9uKGZpbGVQYXRoKVxuXG4gIGNvbnN0IHRyYW5zZm9ybXM6IFN1Y3Jhc2VUcmFuc2Zvcm1bXSA9IFtcImltcG9ydHNcIl1cblxuICBpZiAoVFNfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgIHRyYW5zZm9ybXMudW5zaGlmdChcInR5cGVzY3JpcHRcIilcbiAgfVxuXG4gIGlmIChKU1hfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgIHRyYW5zZm9ybXMucHVzaChcImpzeFwiKVxuICB9XG5cbiAgcmV0dXJuIHRyYW5zZm9ybXNcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVdpdGhTdWNyYXNlID0gKGNvZGU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zdCB0cmFuc2Zvcm1zID0gZ2V0VHJhbnNmb3Jtc0ZvckZpbGVQYXRoKGZpbGVQYXRoKVxuICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkQ29kZSB9ID0gdHJhbnNmb3JtKGNvZGUsIHtcbiAgICBmaWxlUGF0aCxcbiAgICBwcm9kdWN0aW9uOiB0cnVlLFxuICAgIHRyYW5zZm9ybXMsXG4gIH0pXG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkQ29kZVxufVxuIiwgImltcG9ydCB7IGV2YWxDb21waWxlZEpzIH0gZnJvbSBcIi4vZXZhbC1jb21waWxlZC1qc1wiXG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi9leGVjdXRpb24tY29udGV4dFwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBvcnRTbmlwcGV0KFxuICBpbXBvcnROYW1lOiBzdHJpbmcsXG4gIGN0eDogRXhlY3V0aW9uQ29udGV4dCxcbiAgZGVwdGggPSAwLFxuKSB7XG4gIGNvbnN0IHsgcHJlU3VwcGxpZWRJbXBvcnRzIH0gPSBjdHhcbiAgY29uc3QgZnVsbFNuaXBwZXROYW1lID0gaW1wb3J0TmFtZS5yZXBsYWNlKFwiQHRzY2kvXCIsIFwiXCIpLnJlcGxhY2UoXCIuXCIsIFwiL1wiKVxuXG4gIGNvbnN0IHsgY2pzLCBlcnJvciB9ID0gYXdhaXQgZ2xvYmFsVGhpc1xuICAgIC5mZXRjaChgJHtjdHguY2pzUmVnaXN0cnlVcmx9LyR7ZnVsbFNuaXBwZXROYW1lfWApXG4gICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gKHsgY2pzOiBhd2FpdCByZXMudGV4dCgpLCBlcnJvcjogbnVsbCB9KSlcbiAgICAuY2F0Y2goKGUpID0+ICh7IGVycm9yOiBlLCBjanM6IG51bGwgfSkpXG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIGltcG9ydFwiLCBpbXBvcnROYW1lLCBlcnJvcilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdID0gZXZhbENvbXBpbGVkSnMoXG4gICAgICBjanMhLFxuICAgICAgcHJlU3VwcGxpZWRJbXBvcnRzLFxuICAgICkuZXhwb3J0c1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGltcG9ydGluZyBzbmlwcGV0XCIsIGUpXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIi4vZGlybmFtZVwiXG5cbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIG1haW4/OiBzdHJpbmdcbiAgbW9kdWxlPzogc3RyaW5nXG4gIGV4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PlxufVxuXG5pbnRlcmZhY2UgTm9kZVJlc29sdXRpb25Db250ZXh0IHtcbiAgZnNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgZXh0ZW5zaW9uczogc3RyaW5nW11cbiAgYmFzZVBhdGg6IHN0cmluZ1xuICBtb2R1bGVQYXRoOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGV4dChcbiAgbW9kdWxlUGF0aDogc3RyaW5nLFxuICBmc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgYmFzZVBhdGg6IHN0cmluZyxcbik6IE5vZGVSZXNvbHV0aW9uQ29udGV4dCB7XG4gIHJldHVybiB7XG4gICAgZnNNYXAsXG4gICAgZXh0ZW5zaW9uczogW1wiLmpzXCIsIFwiLmpzeFwiLCBcIi50c1wiLCBcIi50c3hcIiwgXCIuanNvblwiXSxcbiAgICBiYXNlUGF0aCxcbiAgICBtb2R1bGVQYXRoLFxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvbihub2RlTW9kdWxlc1BhdGg6IHN0cmluZywgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQpIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYCR7bm9kZU1vZHVsZXNQYXRofS9wYWNrYWdlLmpzb25gXG4gIGlmICghY3R4LmZzTWFwW3BhY2thZ2VKc29uUGF0aF0pIHJldHVybiBudWxsXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY3R4LmZzTWFwW3BhY2thZ2VKc29uUGF0aF0pIGFzIFBhY2thZ2VKc29uXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5UmVzb2x2ZVdpdGhFeHRlbnNpb25zKFxuICBwYXRoOiBzdHJpbmcsXG4gIGN0eDogTm9kZVJlc29sdXRpb25Db250ZXh0LFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChjdHguZnNNYXBbcGF0aF0pIHJldHVybiBwYXRoXG5cbiAgZm9yIChjb25zdCBleHQgb2YgY3R4LmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBwYXRoV2l0aEV4dCA9IHBhdGgucmVwbGFjZSgvXFwuanMkfFxcLmpzeCQvLCBcIlwiKSArIGV4dFxuICAgIGlmIChjdHguZnNNYXBbcGF0aFdpdGhFeHRdKSByZXR1cm4gcGF0aFdpdGhFeHRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiByZXNvbHZlRXhwb3J0UGF0aChcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIGV4cG9ydFBhdGg6IHN0cmluZyxcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZnVsbEV4cG9ydFBhdGggPSBgJHtub2RlTW9kdWxlc1BhdGh9LyR7ZXhwb3J0UGF0aC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIil9YFxuICByZXR1cm4gdHJ5UmVzb2x2ZVdpdGhFeHRlbnNpb25zKGZ1bGxFeHBvcnRQYXRoLCBjdHgpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYWNrYWdlRXhwb3J0cyhcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbixcbiAgcmVtYWluaW5nUGF0aDogc3RyaW5nLFxuICBjdHg6IE5vZGVSZXNvbHV0aW9uQ29udGV4dCxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXBhY2thZ2VKc29uLmV4cG9ydHMpIHJldHVybiBudWxsXG5cbiAgLy8gSGFuZGxlIGRlZmF1bHQgZXhwb3J0IGNvbmRpdGlvblxuICBjb25zdCBkZWZhdWx0RXhwb3J0ID0gcGFja2FnZUpzb24uZXhwb3J0c1tcIi5cIl1cbiAgaWYgKHJlbWFpbmluZ1BhdGggPT09IFwiXCIgJiYgZGVmYXVsdEV4cG9ydCkge1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdEV4cG9ydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlRXhwb3J0UGF0aChub2RlTW9kdWxlc1BhdGgsIGRlZmF1bHRFeHBvcnQsIGN0eClcbiAgICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuIHJlc29sdmVkXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHN1YnBhdGggZXhwb3J0c1xuICBjb25zdCBzdWJwYXRoRXhwb3J0ID0gcmVtYWluaW5nUGF0aFxuICAgID8gcGFja2FnZUpzb24uZXhwb3J0c1tgLi8ke3JlbWFpbmluZ1BhdGh9YF1cbiAgICA6IG51bGxcbiAgaWYgKHN1YnBhdGhFeHBvcnQgJiYgdHlwZW9mIHN1YnBhdGhFeHBvcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVFeHBvcnRQYXRoKG5vZGVNb2R1bGVzUGF0aCwgc3VicGF0aEV4cG9ydCwgY3R4KVxuICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuIHJlc29sdmVkXG4gIH1cblxuICAvLyBIYW5kbGUgY29uZGl0aW9uYWwgZXhwb3J0c1xuICBjb25zdCBpbXBvcnRFeHBvcnQgPSBwYWNrYWdlSnNvbi5leHBvcnRzW1wiaW1wb3J0XCJdXG4gIGlmIChcbiAgICByZW1haW5pbmdQYXRoID09PSBcIlwiICYmXG4gICAgaW1wb3J0RXhwb3J0ICYmXG4gICAgdHlwZW9mIGltcG9ydEV4cG9ydCA9PT0gXCJzdHJpbmdcIlxuICApIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVFeHBvcnRQYXRoKG5vZGVNb2R1bGVzUGF0aCwgaW1wb3J0RXhwb3J0LCBjdHgpXG4gICAgaWYgKHJlc29sdmVkKSByZXR1cm4gcmVzb2x2ZWRcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYWNrYWdlRW50cnlQb2ludChcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbixcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZW50cnlQb2ludCA9IHBhY2thZ2VKc29uLm1vZHVsZSB8fCBwYWNrYWdlSnNvbi5tYWluIHx8IFwiaW5kZXguanNcIlxuICBjb25zdCBmdWxsUGF0aCA9IGAke25vZGVNb2R1bGVzUGF0aH0vJHtlbnRyeVBvaW50fWBcbiAgcmV0dXJuIHRyeVJlc29sdmVXaXRoRXh0ZW5zaW9ucyhmdWxsUGF0aCwgY3R4KVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVtYWluaW5nUGF0aChcbiAgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcsXG4gIHJlbWFpbmluZ1BhdGg6IHN0cmluZyxcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFyZW1haW5pbmdQYXRoKSB7XG4gICAgLy8gVHJ5IGluZGV4IGZpbGVzIGluIHRoZSBtb2R1bGUgcm9vdFxuICAgIGZvciAoY29uc3QgZXh0IG9mIGN0eC5leHRlbnNpb25zKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGggPSBgJHtub2RlTW9kdWxlc1BhdGh9L2luZGV4JHtleHR9YFxuICAgICAgaWYgKGN0eC5mc01hcFtpbmRleFBhdGhdKSByZXR1cm4gaW5kZXhQYXRoXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBmdWxsUGF0aCA9IGAke25vZGVNb2R1bGVzUGF0aH0vJHtyZW1haW5pbmdQYXRofWBcbiAgY29uc3QgZGlyZWN0TWF0Y2ggPSB0cnlSZXNvbHZlV2l0aEV4dGVuc2lvbnMoZnVsbFBhdGgsIGN0eClcbiAgaWYgKGRpcmVjdE1hdGNoKSByZXR1cm4gZGlyZWN0TWF0Y2hcblxuICAvLyBUcnkgaW5kZXggZmlsZXNcbiAgZm9yIChjb25zdCBleHQgb2YgY3R4LmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBpbmRleFBhdGggPSBgJHtmdWxsUGF0aH0vaW5kZXgke2V4dH1gXG4gICAgaWYgKGN0eC5mc01hcFtpbmRleFBhdGhdKSByZXR1cm4gaW5kZXhQYXRoXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5vZGVNb2R1bGVJblBhdGgoXG4gIHNlYXJjaFBhdGg6IHN0cmluZyxcbiAgY3R4OiBOb2RlUmVzb2x1dGlvbkNvbnRleHQsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbW9kdWxlUGFydHMgPSBjdHgubW9kdWxlUGF0aC5zcGxpdChcIi9cIilcbiAgY29uc3Qgc2NvcGUgPSBtb2R1bGVQYXJ0c1swXS5zdGFydHNXaXRoKFwiQFwiKVxuICAgID8gbW9kdWxlUGFydHMuc2xpY2UoMCwgMikuam9pbihcIi9cIilcbiAgICA6IG1vZHVsZVBhcnRzWzBdXG4gIGNvbnN0IHJlbWFpbmluZ1BhdGggPSBtb2R1bGVQYXJ0cy5zbGljZShzY29wZS5pbmNsdWRlcyhcIi9cIikgPyAyIDogMSkuam9pbihcIi9cIilcbiAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gYCR7c2VhcmNoUGF0aCA9PSBcIi5cIiA/IFwiXCIgOiBgJHtzZWFyY2hQYXRofS9gfW5vZGVfbW9kdWxlcy8ke3Njb3BlfWBcblxuICAvLyBUcnkgdG8gZmluZCBwYWNrYWdlLmpzb25cbiAgY29uc3QgcGFja2FnZUpzb24gPSBmaW5kUGFja2FnZUpzb24obm9kZU1vZHVsZXNQYXRoLCBjdHgpXG4gIGlmIChwYWNrYWdlSnNvbikge1xuICAgIC8vIFRyeSByZXNvbHZpbmcgdGhyb3VnaCBleHBvcnRzIGZpZWxkXG4gICAgY29uc3QgZXhwb3J0c1Jlc29sdXRpb24gPSByZXNvbHZlUGFja2FnZUV4cG9ydHMoXG4gICAgICBub2RlTW9kdWxlc1BhdGgsXG4gICAgICBwYWNrYWdlSnNvbixcbiAgICAgIHJlbWFpbmluZ1BhdGgsXG4gICAgICBjdHgsXG4gICAgKVxuICAgIGlmIChleHBvcnRzUmVzb2x1dGlvbikgcmV0dXJuIGV4cG9ydHNSZXNvbHV0aW9uXG5cbiAgICAvLyBUcnkgcmVzb2x2aW5nIHRocm91Z2ggbWFpbi9tb2R1bGUgZmllbGRzXG4gICAgY29uc3QgZW50cnlQb2ludFJlc29sdXRpb24gPSByZXNvbHZlUGFja2FnZUVudHJ5UG9pbnQoXG4gICAgICBub2RlTW9kdWxlc1BhdGgsXG4gICAgICBwYWNrYWdlSnNvbixcbiAgICAgIGN0eCxcbiAgICApXG4gICAgaWYgKGVudHJ5UG9pbnRSZXNvbHV0aW9uKSByZXR1cm4gZW50cnlQb2ludFJlc29sdXRpb25cbiAgfVxuXG4gIC8vIFRyeSByZXNvbHZpbmcgcmVtYWluaW5nIHBhdGhcbiAgY29uc3QgcmVtYWluaW5nUGF0aFJlc29sdXRpb24gPSByZXNvbHZlUmVtYWluaW5nUGF0aChcbiAgICBub2RlTW9kdWxlc1BhdGgsXG4gICAgcmVtYWluaW5nUGF0aCxcbiAgICBjdHgsXG4gIClcbiAgaWYgKHJlbWFpbmluZ1BhdGhSZXNvbHV0aW9uKSByZXR1cm4gcmVtYWluaW5nUGF0aFJlc29sdXRpb25cblxuICAvLyBJZiBub3QgZm91bmQgYW5kIHdlIGhhdmUgYSBwYXJlbnQgZGlyZWN0b3J5LCB0cnkgdGhlcmVcbiAgY29uc3QgcGFyZW50UGF0aCA9IGRpcm5hbWUoc2VhcmNoUGF0aClcbiAgaWYgKHBhcmVudFBhdGggJiYgcGFyZW50UGF0aCAhPT0gc2VhcmNoUGF0aCkge1xuICAgIHJldHVybiByZXNvbHZlTm9kZU1vZHVsZUluUGF0aChwYXJlbnRQYXRoLCBjdHgpXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU5vZGVNb2R1bGUoXG4gIG1vZHVsZVBhdGg6IHN0cmluZyxcbiAgZnNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGJhc2VQYXRoOiBzdHJpbmcsXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dChtb2R1bGVQYXRoLCBmc01hcCwgYmFzZVBhdGgpXG4gIHJldHVybiByZXNvbHZlTm9kZU1vZHVsZUluUGF0aChjdHguYmFzZVBhdGgsIGN0eClcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlTm9kZU1vZHVsZSB9IGZyb20gXCJsaWIvdXRpbHMvcmVzb2x2ZS1ub2RlLW1vZHVsZVwiXG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi9leGVjdXRpb24tY29udGV4dFwiXG5pbXBvcnQgeyBpbXBvcnRMb2NhbEZpbGUgfSBmcm9tIFwiLi9pbXBvcnQtbG9jYWwtZmlsZVwiXG5cbmV4cG9ydCBjb25zdCBpbXBvcnROb2RlTW9kdWxlID0gYXN5bmMgKFxuICBpbXBvcnROYW1lOiBzdHJpbmcsXG4gIGN0eDogRXhlY3V0aW9uQ29udGV4dCxcbiAgZGVwdGggPSAwLFxuKSA9PiB7XG4gIGNvbnN0IHsgcHJlU3VwcGxpZWRJbXBvcnRzIH0gPSBjdHhcblxuICBpZiAocHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCByZXNvbHZlZE5vZGVNb2R1bGVQYXRoID0gcmVzb2x2ZU5vZGVNb2R1bGUoaW1wb3J0TmFtZSwgY3R4LmZzTWFwLCBcIlwiKVxuXG4gIGlmICghcmVzb2x2ZWROb2RlTW9kdWxlUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSBtb2R1bGUgXCIke2ltcG9ydE5hbWV9XCIgbm90IGZvdW5kYClcbiAgfVxuXG4gIC8vIFVzZSBpbXBvcnRMb2NhbEZpbGUgdG8gaGFuZGxlIHRoZSBub2RlIG1vZHVsZVxuICBhd2FpdCBpbXBvcnRMb2NhbEZpbGUocmVzb2x2ZWROb2RlTW9kdWxlUGF0aCwgY3R4LCBkZXB0aClcblxuICAvLyBNYXAgdGhlIG9yaWdpbmFsIGltcG9ydCBuYW1lIHRvIHRoZSByZXNvbHZlZCBtb2R1bGUncyBleHBvcnRzXG4gIHByZVN1cHBsaWVkSW1wb3J0c1tpbXBvcnROYW1lXSA9IHByZVN1cHBsaWVkSW1wb3J0c1tyZXNvbHZlZE5vZGVNb2R1bGVQYXRoXVxuXG4gIC8vIE1hcCB3aXRob3V0IG5vZGVfbW9kdWxlcyBwcmVmaXggZm9yIGRpcmVjdCBpbXBvcnRzXG4gIGNvbnN0IHVucHJlZml4ZWRQYXRoID0gcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5yZXBsYWNlKC9ebm9kZV9tb2R1bGVzXFwvLywgXCJcIilcbiAgcHJlU3VwcGxpZWRJbXBvcnRzW3VucHJlZml4ZWRQYXRoXSA9XG4gICAgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkTm9kZU1vZHVsZVBhdGhdXG5cbiAgLy8gSGFuZGxlIGluZGV4IGZpbGVzIHNwZWNpYWxseVxuICBpZiAoXG4gICAgcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5lbmRzV2l0aChcIi9pbmRleC50c3hcIikgfHxcbiAgICByZXNvbHZlZE5vZGVNb2R1bGVQYXRoLmVuZHNXaXRoKFwiL2luZGV4LnRzXCIpIHx8XG4gICAgcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5lbmRzV2l0aChcIi9pbmRleC5qc1wiKVxuICApIHtcbiAgICBjb25zdCBkaXJQYXRoID0gcmVzb2x2ZWROb2RlTW9kdWxlUGF0aC5yZXBsYWNlKC9cXC9pbmRleFxcLih0c3g/fGpzKSQvLCBcIlwiKVxuICAgIGNvbnN0IHVucHJlZml4ZWREaXJQYXRoID0gZGlyUGF0aC5yZXBsYWNlKC9ebm9kZV9tb2R1bGVzXFwvLywgXCJcIilcbiAgICBwcmVTdXBwbGllZEltcG9ydHNbdW5wcmVmaXhlZERpclBhdGhdID1cbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tyZXNvbHZlZE5vZGVNb2R1bGVQYXRoXVxuXG4gICAgLy8gSGFuZGxlIHNjb3BlZCBwYWNrYWdlc1xuICAgIGlmICh1bnByZWZpeGVkRGlyUGF0aC5zdGFydHNXaXRoKFwiQFwiKSkge1xuICAgICAgY29uc3Qgc2NvcGVQYXJ0cyA9IHVucHJlZml4ZWREaXJQYXRoLnNwbGl0KFwiL1wiKVxuICAgICAgaWYgKHNjb3BlUGFydHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVkTmFtZSA9IGAke3Njb3BlUGFydHNbMF19LyR7c2NvcGVQYXJ0c1sxXX1gXG4gICAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tzY29wZWROYW1lXSA9XG4gICAgICAgICAgcHJlU3VwcGxpZWRJbXBvcnRzW3Jlc29sdmVkTm9kZU1vZHVsZVBhdGhdXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZXZhbENvbXBpbGVkSnMgfSBmcm9tIFwiLi9ldmFsLWNvbXBpbGVkLWpzXCJcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL2V4ZWN1dGlvbi1jb250ZXh0XCJcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibGliL3V0aWxzL2Rpcm5hbWVcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5pbXBvcnQgeyBnZXRJbXBvcnRzRnJvbUNvZGUgfSBmcm9tIFwibGliL3V0aWxzL2dldC1pbXBvcnRzLWZyb20tY29kZVwiXG5pbXBvcnQgeyBpbXBvcnRFdmFsUGF0aCB9IGZyb20gXCIuL2ltcG9ydC1ldmFsLXBhdGhcIlxuaW1wb3J0IHsgdHJhbnNmb3JtV2l0aFN1Y3Jhc2UgfSBmcm9tIFwiLi90cmFuc2Zvcm0td2l0aC1zdWNyYXNlXCJcblxuY29uc3QgZGVidWcgPSBEZWJ1ZyhcInRzY2k6ZXZhbDppbXBvcnQtbnBtLXBhY2thZ2VcIilcblxuZnVuY3Rpb24gZXh0cmFjdFBhY2thZ2VQYXRoRnJvbUpTRGVsaXZyKHVybDogc3RyaW5nKSB7XG4gIGNvbnN0IHByZWZpeCA9IFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9cIlxuICBpZiAodXJsLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnJlcGxhY2UoL1xcL1xcK2VzbSQvLCBcIlwiKVxuICB9XG4gIHJldHVybiB1cmxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydE5wbVBhY2thZ2UoXG4gIGltcG9ydE5hbWU6IHN0cmluZyxcbiAgY3R4OiBFeGVjdXRpb25Db250ZXh0LFxuICBkZXB0aCA9IDAsXG4pIHtcbiAgZGVidWcoYGltcG9ydGluZyBucG0gcGFja2FnZTogJHtpbXBvcnROYW1lfWApXG4gIGNvbnN0IHsgcHJlU3VwcGxpZWRJbXBvcnRzIH0gPSBjdHhcblxuICBpZiAocHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdKSByZXR1cm5cblxuICBjb25zdCBucG1DZG5VcmwgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS8ke2ltcG9ydE5hbWV9Lytlc21gXG5cbiAgbGV0IGZpbmFsVXJsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgY29uc3QgeyBjb250ZW50LCBlcnJvciB9ID0gYXdhaXQgZ2xvYmFsVGhpc1xuICAgIC5mZXRjaChucG1DZG5VcmwpXG4gICAgLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xuICAgICAgZmluYWxVcmwgPSByZXMudXJsXG4gICAgICBpZiAoIXJlcy5vaylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmV0Y2ggXCIke2ltcG9ydE5hbWV9XCIgZnJvbSBqc2RlbGl2cjogJHtyZXMuc3RhdHVzVGV4dH1gLFxuICAgICAgICApXG4gICAgICByZXR1cm4geyBjb250ZW50OiBhd2FpdCByZXMudGV4dCgpLCBlcnJvcjogbnVsbCB9XG4gICAgfSlcbiAgICAuY2F0Y2goKGUpID0+ICh7IGVycm9yOiBlLCBjb250ZW50OiBudWxsIH0pKVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBucG0gaW1wb3J0XCIsIGltcG9ydE5hbWUsIGVycm9yKVxuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBjb25zdCBmaW5hbEltcG9ydE5hbWUgPSBleHRyYWN0UGFja2FnZVBhdGhGcm9tSlNEZWxpdnIoZmluYWxVcmwhKVxuICBjb25zdCBjd2QgPSBkaXJuYW1lKGZpbmFsSW1wb3J0TmFtZSlcblxuICBjb25zdCBpbXBvcnROYW1lcyA9IGdldEltcG9ydHNGcm9tQ29kZShjb250ZW50ISlcbiAgZm9yIChjb25zdCBzdWJJbXBvcnROYW1lIG9mIGltcG9ydE5hbWVzKSB7XG4gICAgaWYgKCFwcmVTdXBwbGllZEltcG9ydHNbc3ViSW1wb3J0TmFtZV0pIHtcbiAgICAgIGF3YWl0IGltcG9ydEV2YWxQYXRoKHN1YkltcG9ydE5hbWUsIGN0eCwgZGVwdGggKyAxLCB7XG4gICAgICAgIGN3ZCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdHJhbnNmb3JtZWRDb2RlID0gdHJhbnNmb3JtV2l0aFN1Y3Jhc2UoXG4gICAgY29udGVudCEsXG4gICAgZmluYWxJbXBvcnROYW1lIHx8IGltcG9ydE5hbWUsXG4gIClcbiAgdHJ5IHtcbiAgICBjb25zdCBleHBvcnRzID0gZXZhbENvbXBpbGVkSnMoXG4gICAgICB0cmFuc2Zvcm1lZENvZGUsXG4gICAgICBwcmVTdXBwbGllZEltcG9ydHMsXG4gICAgICBjd2QsXG4gICAgKS5leHBvcnRzXG4gICAgcHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWVdID0gZXhwb3J0c1xuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmaW5hbEltcG9ydE5hbWVdID0gZXhwb3J0c1xuICAgIHByZVN1cHBsaWVkSW1wb3J0c1tmaW5hbFVybCFdID0gZXhwb3J0c1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV2YWwgbnBtIHBhY2thZ2UgZXJyb3IgZm9yIFwiJHtpbXBvcnROYW1lfVwiOiAke2UubWVzc2FnZX1gKVxuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIi4vZXhlY3V0aW9uLWNvbnRleHRcIlxuaW1wb3J0IHsgaW1wb3J0TG9jYWxGaWxlIH0gZnJvbSBcIi4vaW1wb3J0LWxvY2FsLWZpbGVcIlxuaW1wb3J0IHsgaW1wb3J0U25pcHBldCB9IGZyb20gXCIuL2ltcG9ydC1zbmlwcGV0XCJcbmltcG9ydCB7IHJlc29sdmVGaWxlUGF0aCB9IGZyb20gXCJsaWIvcnVubmVyL3Jlc29sdmVGaWxlUGF0aFwiXG5pbXBvcnQgeyByZXNvbHZlTm9kZU1vZHVsZSB9IGZyb20gXCJsaWIvdXRpbHMvcmVzb2x2ZS1ub2RlLW1vZHVsZVwiXG5pbXBvcnQgeyBpbXBvcnROb2RlTW9kdWxlIH0gZnJvbSBcIi4vaW1wb3J0LW5vZGUtbW9kdWxlXCJcbmltcG9ydCB7IGltcG9ydE5wbVBhY2thZ2UgfSBmcm9tIFwiLi9pbXBvcnQtbnBtLXBhY2thZ2VcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJ0c2NpOmV2YWw6aW1wb3J0LWV2YWwtcGF0aFwiKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RXZhbFBhdGgoXG4gIGltcG9ydE5hbWU6IHN0cmluZyxcbiAgY3R4OiBFeGVjdXRpb25Db250ZXh0LFxuICBkZXB0aCA9IDAsXG4gIG9wdHM6IHtcbiAgICBjd2Q/OiBzdHJpbmdcbiAgfSA9IHt9LFxuKSB7XG4gIGRlYnVnKFwiaW1wb3J0RXZhbFBhdGggY2FsbGVkIHdpdGg6XCIsIHtcbiAgICBpbXBvcnROYW1lLFxuICAgIGRlcHRoLFxuICAgIG9wdHMsXG4gIH0pXG5cbiAgZGVidWcoYCR7XCIgIFwiLnJlcGVhdChkZXB0aCl9XHUyN0ExXHVGRTBGYCwgaW1wb3J0TmFtZSlcbiAgY29uc3QgeyBwcmVTdXBwbGllZEltcG9ydHMgfSA9IGN0eFxuXG4gIGlmIChwcmVTdXBwbGllZEltcG9ydHNbaW1wb3J0TmFtZV0pIHJldHVyblxuICBpZiAoaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiLi9cIikgJiYgcHJlU3VwcGxpZWRJbXBvcnRzW2ltcG9ydE5hbWUuc2xpY2UoMildKVxuICAgIHJldHVyblxuXG4gIGlmIChkZXB0aCA+IDUpIHtcbiAgICBjb25zb2xlLmxvZyhcIk1heCBkZXB0aCBmb3IgaW1wb3J0cyByZWFjaGVkXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiL25wbS9cIikpIHtcbiAgICBjb25zdCBwa2dOYW1lID0gaW1wb3J0TmFtZS5yZXBsYWNlKC9eXFwvbnBtXFwvLywgXCJcIikucmVwbGFjZSgvXFwvXFwrZXNtJC8sIFwiXCIpXG4gICAgYXdhaXQgaW1wb3J0TnBtUGFja2FnZShwa2dOYW1lLCBjdHgsIGRlcHRoKVxuICAgIGNvbnN0IHBrZyA9IHByZVN1cHBsaWVkSW1wb3J0c1twa2dOYW1lXVxuICAgIGlmIChwa2cpIHtcbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tpbXBvcnROYW1lXSA9IHBrZ1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkTG9jYWxJbXBvcnRQYXRoID0gcmVzb2x2ZUZpbGVQYXRoKFxuICAgIGltcG9ydE5hbWUsXG4gICAgY3R4LmZzTWFwLFxuICAgIG9wdHMuY3dkLFxuICApXG4gIGlmIChyZXNvbHZlZExvY2FsSW1wb3J0UGF0aCkge1xuICAgIGF3YWl0IGltcG9ydExvY2FsRmlsZShyZXNvbHZlZExvY2FsSW1wb3J0UGF0aCwgY3R4LCBkZXB0aClcbiAgICAvLyBNYXAgdGhlIG9yaWdpbmFsIGltcG9ydCBuYW1lICh3aGljaCBtaWdodCBiZSBhIHRzY29uZmlnIHBhdGggYWxpYXMpIHRvIHRoZSByZXNvbHZlZCBtb2R1bGVcbiAgICBpZiAoaW1wb3J0TmFtZSAhPT0gcmVzb2x2ZWRMb2NhbEltcG9ydFBhdGgpIHtcbiAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tpbXBvcnROYW1lXSA9XG4gICAgICAgIHByZVN1cHBsaWVkSW1wb3J0c1tyZXNvbHZlZExvY2FsSW1wb3J0UGF0aF1cbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBUcnkgdG8gcmVzb2x2ZSBmcm9tIG5vZGVfbW9kdWxlc1xuICBjb25zdCByZXNvbHZlZE5vZGVNb2R1bGVQYXRoID0gcmVzb2x2ZU5vZGVNb2R1bGUoXG4gICAgaW1wb3J0TmFtZSxcbiAgICBjdHguZnNNYXAsXG4gICAgb3B0cy5jd2QgfHwgXCJcIixcbiAgKVxuICBpZiAocmVzb2x2ZWROb2RlTW9kdWxlUGF0aCkge1xuICAgIHJldHVybiBpbXBvcnROb2RlTW9kdWxlKGltcG9ydE5hbWUsIGN0eCwgZGVwdGgpXG4gIH1cblxuICBpZiAoaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiQHRzY2kvXCIpKSB7XG4gICAgcmV0dXJuIGltcG9ydFNuaXBwZXQoaW1wb3J0TmFtZSwgY3R4LCBkZXB0aClcbiAgfVxuXG4gIGlmICghaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiLlwiKSAmJiAhaW1wb3J0TmFtZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgIHJldHVybiBpbXBvcnROcG1QYWNrYWdlKGltcG9ydE5hbWUsIGN0eCwgZGVwdGgpXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYFVucmVzb2x2ZWQgaW1wb3J0IFwiJHtpbXBvcnROYW1lfVwiICR7b3B0cy5jd2QgPyBgZnJvbSBkaXJlY3RvcnkgXCIke29wdHMuY3dkfVwiYCA6IFwiXCJ9YCxcbiAgKVxufVxuIiwgImltcG9ydCB7IHJlc29sdmVGaWxlUGF0aE9yVGhyb3cgfSBmcm9tIFwiLi9yZXNvbHZlRmlsZVBhdGhcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJ0c2NpOmV2YWw6c2V0dXBEZWZhdWx0RW50cnlwb2ludElmTmVlZGVkXCIpXG5cbmV4cG9ydCBjb25zdCBzZXR1cERlZmF1bHRFbnRyeXBvaW50SWZOZWVkZWQgPSAob3B0czoge1xuICBlbnRyeXBvaW50Pzogc3RyaW5nXG4gIGZzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIG1haW5Db21wb25lbnRQYXRoPzogc3RyaW5nXG4gIG1haW5Db21wb25lbnROYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgbWFpbkNvbXBvbmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PlxufSkgPT4ge1xuICBpZiAoIW9wdHMuZW50cnlwb2ludCAmJiAhb3B0cy5tYWluQ29tcG9uZW50UGF0aCkge1xuICAgIGlmIChcImluZGV4LnRzeFwiIGluIG9wdHMuZnNNYXApIHtcbiAgICAgIG9wdHMubWFpbkNvbXBvbmVudFBhdGggPSBcImluZGV4LnRzeFwiXG4gICAgfSBlbHNlIGlmIChcImluZGV4LnRzXCIgaW4gb3B0cy5mc01hcCkge1xuICAgICAgb3B0cy5tYWluQ29tcG9uZW50UGF0aCA9IFwiaW5kZXgudHNcIlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhvcHRzLmZzTWFwKS5maWx0ZXIoKGspID0+IGsuZW5kc1dpdGgoXCIudHN4XCIpKS5sZW5ndGggPT09IDFcbiAgICApIHtcbiAgICAgIG9wdHMubWFpbkNvbXBvbmVudFBhdGggPSBPYmplY3Qua2V5cyhvcHRzLmZzTWFwKVswXVxuICAgIH0gZWxzZSBpZiAoXCJ0c2NpcmN1aXQuY29uZmlnLmpzb25cIiBpbiBvcHRzLmZzTWFwKSB7XG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gb3B0cy5mc01hcFtcInRzY2lyY3VpdC5jb25maWcuanNvblwiXVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KVxuICAgICAgICBpZiAoY29uZmlnLm1haW5FbnRyeXBvaW50KSB7XG4gICAgICAgICAgb3B0cy5lbnRyeXBvaW50ID0gY29uZmlnLm1haW5FbnRyeXBvaW50XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHBhcnNlIHRzY2lyY3VpdC5jb25maWcuanNvbjpcIiwgZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVpdGhlciBlbnRyeXBvaW50IG9yIG1haW5Db21wb25lbnRQYXRoIG11c3QgYmUgcHJvdmlkZWQgKG5vIGluZGV4IGZpbGUsIGNvdWxkIG5vdCBpbmZlciBlbnRyeXBvaW50KVwiLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGlmICghb3B0cy5lbnRyeXBvaW50ICYmIG9wdHMubWFpbkNvbXBvbmVudFBhdGgpIHtcbiAgICBvcHRzLmVudHJ5cG9pbnQgPSBcImVudHJ5cG9pbnQudHN4XCJcbiAgICBjb25zdCBtYWluQ29tcG9uZW50Q29kZSA9XG4gICAgICBvcHRzLmZzTWFwW3Jlc29sdmVGaWxlUGF0aE9yVGhyb3cob3B0cy5tYWluQ29tcG9uZW50UGF0aCwgb3B0cy5mc01hcCldXG4gICAgaWYgKCFtYWluQ29tcG9uZW50Q29kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWFpbiBjb21wb25lbnQgcGF0aCBcIiR7b3B0cy5tYWluQ29tcG9uZW50UGF0aH1cIiBub3QgZm91bmQgaW4gZnNNYXAuIEF2YWlsYWJsZSBwYXRoczogJHtPYmplY3Qua2V5cyhvcHRzLmZzTWFwKS5qb2luKFwiLCBcIil9YCxcbiAgICAgIClcbiAgICB9XG4gICAgb3B0cy5mc01hcFtvcHRzLmVudHJ5cG9pbnRdID0gYFxuICAgICBpbXBvcnQgKiBhcyBVc2VyQ29tcG9uZW50cyBmcm9tIFwiLi8ke29wdHMubWFpbkNvbXBvbmVudFBhdGh9XCI7XG4gICAgICAgICAgXG4gICAgICAke1xuICAgICAgICBvcHRzLm1haW5Db21wb25lbnROYW1lXG4gICAgICAgICAgPyBgXG4gICAgICAgIGNvbnN0IENvbXBvbmVudFRvUmVuZGVyID0gVXNlckNvbXBvbmVudHNbXCIke29wdHMubWFpbkNvbXBvbmVudE5hbWV9XCJdXG4gICAgICAgIGBcbiAgICAgICAgICA6IGBjb25zdCBDb21wb25lbnRUb1JlbmRlciA9IFVzZXJDb21wb25lbnRzLmRlZmF1bHQgfHwgXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoVXNlckNvbXBvbmVudHMpXG4gICAgICAgICAgLmZpbHRlcigoW25hbWVdKSA9PiAhbmFtZS5zdGFydHNXaXRoKFwidXNlXCIpKVxuICAgICAgICAgIC5tYXAoKFtfLCBjb21wb25lbnRdKSA9PiBjb21wb25lbnQpWzBdIHx8ICgoKSA9PiBudWxsKTtgXG4gICAgICB9XG5cbiAgICAgICAgICAgJHtcbiAgICAgICAgICAgICBkZWJ1Zy5lbmFibGVkXG4gICAgICAgICAgICAgICA/IGBcbiAgICAgY29uc29sZS5sb2coeyBVc2VyQ29tcG9uZW50cyB9KVxuICAgICBjb25zb2xlLmxvZyhcIkNvbXBvbmVudFRvUmVuZGVyIFwiICsgQ29tcG9uZW50VG9SZW5kZXIudG9TdHJpbmcoKSwgIHsgQ29tcG9uZW50VG9SZW5kZXIgfSlcbiAgICAgYFxuICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgIH1cblxuICAgICAgY2lyY3VpdC5hZGQoICAgICAgIFxuICAgICAgICAgIDxDb21wb25lbnRUb1JlbmRlciAke29wdHMubWFpbkNvbXBvbmVudFByb3BzID8gYHsuLi4ke0pTT04uc3RyaW5naWZ5KG9wdHMubWFpbkNvbXBvbmVudFByb3BzLCBudWxsLCAyKX19YCA6IFwiXCJ9IC8+IFxuICAgICAgKTtcbmBcbiAgfVxuXG4gIGlmICghb3B0cy5uYW1lICYmIG9wdHMubWFpbkNvbXBvbmVudE5hbWUpIHtcbiAgICBvcHRzLm5hbWUgPSBvcHRzLm1haW5Db21wb25lbnROYW1lXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgZW5oYW5jZVJvb3RDaXJjdWl0SGFzTm9DaGlsZHJlbkVycm9yID0gKFxuICBlcnJvcjogdW5rbm93bixcbiAgZW50cnlwb2ludD86IHN0cmluZyxcbikgPT4ge1xuICBpZiAoXG4gICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgIGVudHJ5cG9pbnQgJiZcbiAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiUm9vdENpcmN1aXQgaGFzIG5vIGNoaWxkcmVuXCIpICYmXG4gICAgIWVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ1wiZW50cnlwb2ludFwiOicpXG4gICkge1xuICAgIGNvbnN0IGVudHJ5cG9pbnRNZXNzYWdlID0gZW50cnlwb2ludC5zdGFydHNXaXRoKFwiLi9cIilcbiAgICAgID8gZW50cnlwb2ludC5zbGljZSgyKVxuICAgICAgOiBlbnRyeXBvaW50XG4gICAgZXJyb3IubWVzc2FnZSA9IGAke2Vycm9yLm1lc3NhZ2V9LiBcImVudHJ5cG9pbnRcIjogXCIke2VudHJ5cG9pbnRNZXNzYWdlfVwiIGlzIHNldCBpbiB0aGUgcnVubmVyIGNvbmZpZ3VyYXRpb24sIGVudHJ5cG9pbnRzIG11c3QgY29udGFpbiBcImNpcmN1aXQuYWRkKC4uLilcIiwgeW91IG1pZ2h0IGJlIGxvb2tpbmcgdG8gdXNlIG1haW5Db21wb25lbnRQYXRoIGluc3RlYWQgaWYgeW91ciBmaWxlIGV4cG9ydHMgYSBjb21wb25lbnQuYFxuICB9XG5cbiAgcmV0dXJuIGVycm9yXG59XG4iLCAiaW1wb3J0IHsgQ2lyY3VpdFJ1bm5lciB9IGZyb20gXCIuL0NpcmN1aXRSdW5uZXJcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVHNjaXJjdWl0Q29kZShcbiAgZmlsZXN5c3RlbU9yQ29kZVN0cmluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZyxcbiAgb3B0cz86IE9taXQ8UGFyYW1ldGVyczxDaXJjdWl0UnVubmVyW1wiZXhlY3V0ZVdpdGhGc01hcFwiXT5bMF0sIFwiZnNNYXBcIj4sXG4pIHtcbiAgaWYgKFxuICAgIHR5cGVvZiBmaWxlc3lzdGVtT3JDb2RlU3RyaW5nID09PSBcInN0cmluZ1wiICYmXG4gICAgIWZpbGVzeXN0ZW1PckNvZGVTdHJpbmcuaW5jbHVkZXMoXCJleHBvcnRcIilcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBcImV4cG9ydFwiIGtleXdvcmQgd2Fzbid0IGZvdW5kIGluIHlvdXIgcHJvdmlkZWQgY29kZS4gWW91IG5lZWQgdG8gZXhwb3J0IGEgY29tcG9uZW50IGluIHlvdXIgY29kZSwgZS5nLlxcblxcbmV4cG9ydCBkZWZhdWx0ICgpID0+IChcXG4gIDxyZXNpc3RvciBuYW1lPVwiUjFcIiByZXNpc3RhbmNlPVwiMWtcIiAvPlxcbilgLFxuICAgIClcbiAgfVxuICBjb25zdCBmaWxlc3lzdGVtID1cbiAgICB0eXBlb2YgZmlsZXN5c3RlbU9yQ29kZVN0cmluZyA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyB7IFwidXNlci1jb2RlLnRzeFwiOiBmaWxlc3lzdGVtT3JDb2RlU3RyaW5nIH1cbiAgICAgIDogZmlsZXN5c3RlbU9yQ29kZVN0cmluZ1xuXG4gIGNvbnN0IGNpcmN1aXRSdW5uZXIgPSBuZXcgQ2lyY3VpdFJ1bm5lcigpXG5cbiAgYXdhaXQgY2lyY3VpdFJ1bm5lci5leGVjdXRlV2l0aEZzTWFwKHtcbiAgICBmc01hcDogZmlsZXN5c3RlbSxcbiAgICAuLi5vcHRzLFxuICB9KVxuXG4gIGF3YWl0IGNpcmN1aXRSdW5uZXIucmVuZGVyVW50aWxTZXR0bGVkKClcblxuICByZXR1cm4gYXdhaXQgY2lyY3VpdFJ1bm5lci5nZXRDaXJjdWl0SnNvbigpXG59XG4iLCAiaW1wb3J0IHsgcnVuVHNjaXJjdWl0Q29kZSB9IGZyb20gXCIuL3J1blRzY2lyY3VpdENvZGVcIlxuXG5leHBvcnQgY29uc3QgcnVuVHNjaXJjdWl0TW9kdWxlID0gYXN5bmMgKFxuICBtb2R1bGU6IHN0cmluZyxcbiAgb3B0czogeyBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT47IGV4cG9ydE5hbWU/OiBzdHJpbmcgfSA9IHt9LFxuKSA9PiB7XG4gIGlmICghbW9kdWxlLnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG4gICAgbW9kdWxlID0gYEB0c2NpLyR7bW9kdWxlLnJlcGxhY2UoL1xcLy8sIFwiLlwiKX1gXG4gIH1cbiAgY29uc3QgY2lyY3VpdEpzb24gPSBhd2FpdCBydW5Uc2NpcmN1aXRDb2RlKFxuICAgIHtcbiAgICAgIC8vIFRPRE8gaGFuZGxlIGV4cG9ydHMgdGhhdCBhcmUgbm90IHRoZSBkZWZhdWx0IGV4cG9ydCBieSBzY2FubmluZ1xuICAgICAgLy8gb3RoZXJFeHBvcnRzIGZvciBjb21wb25lbnRzXG4gICAgICBcInVzZXItY29kZS50c3hcIjogYFxuICAgIGltcG9ydCBNb2R1bGUsICogYXMgb3RoZXJFeHBvcnRzIGZyb20gXCIke21vZHVsZX1cIjtcblxuICAgIGxldCBleHBvcnROYW1lID0gXCIke29wdHMuZXhwb3J0TmFtZSA/PyBcIlwifVwiXG5cbiAgICBpZiAoKCFNb2R1bGUgfHwgdHlwZW9mIE1vZHVsZSAhPT0gXCJmdW5jdGlvblwiKSAmJiAhQm9vbGVhbihleHBvcnROYW1lKSkge1xuICAgICAgZXhwb3J0TmFtZSA9IE9iamVjdC5rZXlzKG90aGVyRXhwb3J0cykuZmlsdGVyKGtleSA9PiBrZXlbMF0gPT09IGtleVswXS50b1VwcGVyQ2FzZSgpICYmIHR5cGVvZiBvdGhlckV4cG9ydHNba2V5XSA9PT0gXCJmdW5jdGlvblwiKVswXVxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRFeHBvcnQgPSBleHBvcnROYW1lID8gb3RoZXJFeHBvcnRzW2V4cG9ydE5hbWVdIDogTW9kdWxlXG5cbiAgICBpZiAoIWRlZmF1bHRFeHBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcXGBObyBleHBvcnQgZm91bmQgZm9yIG1vZHVsZSBcIlxcJHttb2R1bGV9XCIgKHRyaWVkIFwiXFwke2V4cG9ydE5hbWUgPz8gXCJkZWZhdWx0XCJ9XCIpXFxgKVxuICAgIH1cblxuICAgIGV4cG9ydCBkZWZhdWx0IGRlZmF1bHRFeHBvcnQ7XG4gICAgYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1haW5Db21wb25lbnRQcm9wczogb3B0cy5wcm9wcyxcbiAgICB9LFxuICApXG4g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YUFDSixPQUFPLDJCQUEyQixXQUM5QixFQUFFLGlCQUFpQix1QkFBdUIsSUFDMUM7QUFFTixRQUFNLGdCQUFnQixJQUFJLGNBQWM7QUFFeEMsUUFBTSxjQUFjLGlCQUFpQjtBQUFBLElBQ25DLE9BQU87QUFBQSxJQUNQLEdBQUc7QUFBQSxFQUNMLENBQUM7QUFFRCxRQUFNLGNBQWMsbUJBQW1CO0FBRXZDLFNBQU8sTUFBTSxjQUFjLGVBQWU7QUFDNUM7OztBQzNCTyxJQUFNLHFCQUFxQixPQUNoQyxRQUNBLE9BQTZELENBQUMsTUFDM0Q7QUFDSCxNQUFJLENBQUMsT0FBTyxXQUFXLEdBQUcsR0FBRztBQUMzQixhQUFTLFNBQVMsT0FBTyxRQUFRLE1BQU0sR0FBRyxDQUFDO0FBQUEsRUFDN0M7QUFDQSxRQUFNLGNBQWMsTUFBTTtBQUFBLElBQ3hCO0FBQUE7QUFBQTtBQUFBLE1BR0UsaUJBQWlCO0FBQUEsNkNBQ3NCLE1BQU07QUFBQTtBQUFBLHdCQUUzQixLQUFLLGNBQWMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFjekM7QUFBQSxJQUNBO0FBQUEsTUFDRSxvQkFBb0IsS0FBSztBQUFBLElBQzNCO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiRGVidWciLCAiZGVidWciLCAiRGVidWciLCAiaW1wb3J0TmFtZSIsICJEZWJ1ZyIsICJkZWJ1ZyIsICJEZWJ1ZyIsICJEZWJ1ZyIsICJkZWJ1ZyIsICJEZWJ1ZyIsICJkZWJ1ZyIsICJEZWJ1ZyIsICJkZWJ1ZyJdCn0K
|