wxt 0.3.1 → 0.3.2
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/cli.cjs +56 -17
- package/dist/index.cjs +50 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +420 -0
- package/dist/index.d.ts +23 -26
- package/dist/index.js +50 -13
- package/dist/index.js.map +1 -1
- package/package.json +14 -13
package/dist/cli.cjs
CHANGED
|
@@ -5578,7 +5578,7 @@ var require_bl = __commonJS({
|
|
|
5578
5578
|
var import_cac = __toESM(require("cac"), 1);
|
|
5579
5579
|
|
|
5580
5580
|
// package.json
|
|
5581
|
-
var version = "0.3.
|
|
5581
|
+
var version = "0.3.2";
|
|
5582
5582
|
|
|
5583
5583
|
// src/core/utils/getInternalConfig.ts
|
|
5584
5584
|
var import_node_path4 = __toESM(require("path"), 1);
|
|
@@ -5818,7 +5818,7 @@ function getUnimportOptions(config) {
|
|
|
5818
5818
|
imports: [{ name: "defineConfig", from: "wxt" }],
|
|
5819
5819
|
presets: [{ package: "wxt/client" }, { package: "wxt/browser" }],
|
|
5820
5820
|
warn: config.logger.warn,
|
|
5821
|
-
dirs: ["
|
|
5821
|
+
dirs: ["components", "composables", "hooks", "utils"]
|
|
5822
5822
|
};
|
|
5823
5823
|
return (0, import_vite.mergeConfig)(
|
|
5824
5824
|
defaultOptions,
|
|
@@ -6894,7 +6894,8 @@ async function generateMainfest(entrypoints, buildOutput, config) {
|
|
|
6894
6894
|
version: pkg?.version && simplifyVersion(pkg.version),
|
|
6895
6895
|
// Only add the version name to chromium and if the user hasn't specified a custom version.
|
|
6896
6896
|
version_name: config.browser !== "firefox" && !config.manifest.version ? pkg?.version : void 0,
|
|
6897
|
-
short_name: pkg?.shortName
|
|
6897
|
+
short_name: pkg?.shortName,
|
|
6898
|
+
icons: discoverIcons(buildOutput)
|
|
6898
6899
|
},
|
|
6899
6900
|
config.manifest
|
|
6900
6901
|
);
|
|
@@ -7098,6 +7099,39 @@ function addEntrypoints(manifest, entrypoints, buildOutput, config) {
|
|
|
7098
7099
|
}
|
|
7099
7100
|
}
|
|
7100
7101
|
}
|
|
7102
|
+
function discoverIcons(buildOutput) {
|
|
7103
|
+
const icons = [];
|
|
7104
|
+
const iconRegex = [
|
|
7105
|
+
/^icon-([0-9]+)\.(png|bmp|jpeg|jpg|ico|gif)$/,
|
|
7106
|
+
// icon-16.png
|
|
7107
|
+
/^icon-([0-9]+)x[0-9]+\.(png|bmp|jpeg|jpg|ico|gif)$/,
|
|
7108
|
+
// icon-16x16.png
|
|
7109
|
+
/^icon@([0-9]+)w\.(png|bmp|jpeg|jpg|ico|gif)$/,
|
|
7110
|
+
// icon@16w.png
|
|
7111
|
+
/^icon@([0-9]+)h\.(png|bmp|jpeg|jpg|ico|gif)$/,
|
|
7112
|
+
// icon@16h.png
|
|
7113
|
+
/^icon@([0-9]+)\.(png|bmp|jpeg|jpg|ico|gif)$/,
|
|
7114
|
+
// icon@16.png
|
|
7115
|
+
/^icon[\/\\]([0-9]+)\.(png|bmp|jpeg|jpg|ico|gif)$/,
|
|
7116
|
+
// icon/16.png
|
|
7117
|
+
/^icon[\/\\]([0-9]+)x[0-9]+\.(png|bmp|jpeg|jpg|ico|gif)$/
|
|
7118
|
+
// icon/16x16.png
|
|
7119
|
+
];
|
|
7120
|
+
buildOutput.publicAssets.forEach((asset) => {
|
|
7121
|
+
let size;
|
|
7122
|
+
for (const regex2 of iconRegex) {
|
|
7123
|
+
const match = asset.fileName.match(regex2);
|
|
7124
|
+
if (match?.[1] != null) {
|
|
7125
|
+
size = match[1];
|
|
7126
|
+
break;
|
|
7127
|
+
}
|
|
7128
|
+
}
|
|
7129
|
+
if (size == null)
|
|
7130
|
+
return;
|
|
7131
|
+
icons.push([size, normalizePath2(asset.fileName)]);
|
|
7132
|
+
});
|
|
7133
|
+
return icons.length > 0 ? Object.fromEntries(icons) : void 0;
|
|
7134
|
+
}
|
|
7101
7135
|
function addDevModeCsp(manifest, config) {
|
|
7102
7136
|
const permission = `http://${config.server?.hostname ?? ""}/*`;
|
|
7103
7137
|
const allowedCsp = config.server?.origin ?? "http://localhost:*";
|
|
@@ -7216,7 +7250,7 @@ var import_fs_extra12 = __toESM(require("fs-extra"), 1);
|
|
|
7216
7250
|
var import_filesize = require("filesize");
|
|
7217
7251
|
|
|
7218
7252
|
// src/core/log/printTable.ts
|
|
7219
|
-
function printTable(log, rows, gap = 2) {
|
|
7253
|
+
function printTable(log, header, rows, gap = 2) {
|
|
7220
7254
|
if (rows.length === 0)
|
|
7221
7255
|
return;
|
|
7222
7256
|
const columnWidths = rows.reduce(
|
|
@@ -7238,11 +7272,12 @@ function printTable(log, rows, gap = 2) {
|
|
|
7238
7272
|
if (i !== rows.length - 1)
|
|
7239
7273
|
str += "\n";
|
|
7240
7274
|
});
|
|
7241
|
-
log(
|
|
7275
|
+
log(`${header}
|
|
7276
|
+
${str}`);
|
|
7242
7277
|
}
|
|
7243
7278
|
|
|
7244
7279
|
// src/core/log/printFileList.ts
|
|
7245
|
-
async function printFileList(log, baseDir, files) {
|
|
7280
|
+
async function printFileList(log, header, baseDir, files) {
|
|
7246
7281
|
let totalSize = 0;
|
|
7247
7282
|
const fileRows = await Promise.all(
|
|
7248
7283
|
files.map(async (file, i) => {
|
|
@@ -7261,8 +7296,8 @@ async function printFileList(log, baseDir, files) {
|
|
|
7261
7296
|
];
|
|
7262
7297
|
})
|
|
7263
7298
|
);
|
|
7264
|
-
|
|
7265
|
-
log
|
|
7299
|
+
fileRows.push([`${import_picocolors.default.cyan("\u03A3 Total size:")} ${String((0, import_filesize.filesize)(totalSize))}`]);
|
|
7300
|
+
printTable(log, header, fileRows);
|
|
7266
7301
|
}
|
|
7267
7302
|
var DEFAULT_COLOR = import_picocolors.default.blue;
|
|
7268
7303
|
var CHUNK_COLORS = {
|
|
@@ -7277,7 +7312,7 @@ function getChunkColor(filename) {
|
|
|
7277
7312
|
}
|
|
7278
7313
|
|
|
7279
7314
|
// src/core/log/printBuildSummary.ts
|
|
7280
|
-
async function printBuildSummary(output, config) {
|
|
7315
|
+
async function printBuildSummary(log, header, output, config) {
|
|
7281
7316
|
const chunks = [
|
|
7282
7317
|
...output.steps.flatMap((step) => step.chunks),
|
|
7283
7318
|
...output.publicAssets
|
|
@@ -7290,7 +7325,7 @@ async function printBuildSummary(output, config) {
|
|
|
7290
7325
|
return l.fileName.localeCompare(r.fileName);
|
|
7291
7326
|
});
|
|
7292
7327
|
const files = chunks.map((chunk) => (0, import_path11.resolve)(config.outDir, chunk.fileName));
|
|
7293
|
-
await printFileList(
|
|
7328
|
+
await printFileList(log, header, config.outDir, files);
|
|
7294
7329
|
}
|
|
7295
7330
|
var DEFAULT_SORT_WEIGHT = 100;
|
|
7296
7331
|
var CHUNK_SORT_WEIGHTS = {
|
|
@@ -7321,10 +7356,12 @@ async function buildInternal(config) {
|
|
|
7321
7356
|
const entrypoints = await findEntrypoints(config);
|
|
7322
7357
|
const groups = groupEntrypoints(entrypoints);
|
|
7323
7358
|
const { output } = await rebuild(config, groups, void 0);
|
|
7324
|
-
|
|
7325
|
-
|
|
7359
|
+
await printBuildSummary(
|
|
7360
|
+
config.logger.success,
|
|
7361
|
+
`Built extension in ${formatDuration(Date.now() - startTime)}`,
|
|
7362
|
+
output,
|
|
7363
|
+
config
|
|
7326
7364
|
);
|
|
7327
|
-
await printBuildSummary(output, config);
|
|
7328
7365
|
return output;
|
|
7329
7366
|
}
|
|
7330
7367
|
async function rebuild(config, entrypointGroups, existingOutput = {
|
|
@@ -8782,10 +8819,12 @@ async function zipExtension(config, buildOutput) {
|
|
|
8782
8819
|
});
|
|
8783
8820
|
zipFiles.push(sourcesZipPath);
|
|
8784
8821
|
}
|
|
8785
|
-
|
|
8786
|
-
|
|
8822
|
+
await printFileList(
|
|
8823
|
+
config.logger.success,
|
|
8824
|
+
`Zipped extension in ${formatDuration(Date.now() - start)}`,
|
|
8825
|
+
config.outBaseDir,
|
|
8826
|
+
zipFiles
|
|
8787
8827
|
);
|
|
8788
|
-
await printFileList(config.logger.log, config.outBaseDir, zipFiles);
|
|
8789
8828
|
return zipFiles;
|
|
8790
8829
|
}
|
|
8791
8830
|
|
|
@@ -8815,4 +8854,4 @@ cli.command("prepare [root]", "prepare").option("-c, --config <file>", "use spec
|
|
|
8815
8854
|
cli.command("publish [root]", "publish to stores").action(publish);
|
|
8816
8855
|
cli.command("init [directory]", "initialize a new project").option("-t, --template <template>", "template to use").option("--pm <packageManager>", "which package manager to use").action(init);
|
|
8817
8856
|
cli.parse();
|
|
8818
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbWljLWZuQDIuMS4wL25vZGVfbW9kdWxlcy9taW1pYy1mbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vb25ldGltZUA1LjEuMi9ub2RlX21vZHVsZXMvb25ldGltZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2lnbmFsLWV4aXRAMy4wLjcvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L3NpZ25hbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NpZ25hbC1leGl0QDMuMC43L25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvc3Bpbm5lcnMuanNvbiIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nsb25lQDEuMC40L25vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGVmYXVsdHNAMS4wLjQvbm9kZV9tb2R1bGVzL2RlZmF1bHRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS93Y3dpZHRoQDEuMC4xL25vZGVfbW9kdWxlcy93Y3dpZHRoL2NvbWJpbmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vd2N3aWR0aEAxLjAuMS9ub2RlX21vZHVsZXMvd2N3aWR0aC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW5oZXJpdHNAMi4wLjQvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2luaGVyaXRzQDIuMC40L25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdXRpbC1kZXByZWNhdGVAMS4wLjIvbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NhZmUtYnVmZmVyQDUuMS4yL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nX2RlY29kZXJAMS4xLjEvbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JsQDUuMS4wL25vZGVfbW9kdWxlcy9ibC9CdWZmZXJMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9ibEA1LjEuMC9ub2RlX21vZHVsZXMvYmwvYmwuanMiLCAiLi4vc3JjL2NsaS9pbmRleC50cyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2Rldkh0bWxQcmVyZW5kZXIudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2RldlNlcnZlckdsb2JhbHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvbmV0d29yay50cyIsICIuLi9zcmMvY29yZS91dGlscy9wcm9taXNlcy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZG93bmxvYWQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL211bHRpcGFnZU1vdmUudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3VuaW1wb3J0LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2F1dG8taW1wb3J0cy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdmlydHVhbEVudHJ5cG9pbnQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3RzY29uZmlnUGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9jc3NFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9jcmVhdGVGc0NhY2hlLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dsb2JhbHMudHMiLCAiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2FycmF5cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9kZXRlY3REZXZDaGFuZ2VzLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2J1aWxkRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcmVtb3ZlRW1wdHlEaXJzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3B1YmxpYy50cyIsICIuLi9zcmMvY29yZS9idWlsZC9maW5kRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvaW1wb3J0VHNGaWxlLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3N0cmluZ3MudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQvZ2VuZXJhdGVUeXBlc0Rpci50cyIsICIuLi9zcmMvY29yZS91dGlscy9tYW5pZmVzdC50cyIsICIuLi9zcmMvY29yZS91dGlscy9Db250ZW50U2VjdXJpdHlQb2xpY3kudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvY29udGVudC1zY3JpcHRzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3BhY2thZ2UudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ3JvdXBFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9mb3JtYXREdXJhdGlvbi50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRCdWlsZFN1bW1hcnkudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50RmlsZUxpc3QudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50VGFibGUudHMiLCAiLi4vc3JjL2NvcmUvc2VydmVyLnRzIiwgIi4uL3NyYy9jb3JlL3J1bm5lcnMvY3JlYXRlV2ViRXh0UnVubmVyLnRzIiwgIi4uL3NyYy9jbGkvdXRpbHMvZGVmaW5lQ29tbWFuZC50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRIZWFkZXIudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9idWlsZC50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2Rldi50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2luaXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL29yYUA2LjMuMS9ub2RlX21vZHVsZXMvb3JhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFsa0A1LjIuMC9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhbGtANS4yLjAvbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS92ZW5kb3Ivc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWxrQDUuMi4wL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdXRpbGl0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFsa0A1LjIuMC9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jbGktY3Vyc29yQDQuMC4wL25vZGVfbW9kdWxlcy9jbGktY3Vyc29yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZXN0b3JlLWN1cnNvckA0LjAuMC9ub2RlX21vZHVsZXMvcmVzdG9yZS1jdXJzb3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzLXVuaWNvZGUtc3VwcG9ydGVkQDEuMy4wL25vZGVfbW9kdWxlcy9pcy11bmljb2RlLXN1cHBvcnRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9nLXN5bWJvbHNANS4xLjAvbm9kZV9tb2R1bGVzL2xvZy1zeW1ib2xzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9hbnNpLXJlZ2V4QDYuMC4xL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpcC1hbnNpQDcuMS4wL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pcy1pbnRlcmFjdGl2ZUAyLjAuMC9ub2RlX21vZHVsZXMvaXMtaW50ZXJhY3RpdmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0ZGluLWRpc2NhcmRlckAwLjEuMC9ub2RlX21vZHVsZXMvc3RkaW4tZGlzY2FyZGVyL2luZGV4LmpzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvcHJlcGFyZS50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL3B1Ymxpc2gudHMiLCAiLi4vc3JjL2NvcmUvemlwLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvemlwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1pbWljRm4gPSAodG8sIGZyb20pID0+IHtcblx0Zm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhmcm9tKSkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0bywgcHJvcCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmcm9tLCBwcm9wKSk7XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1pbWljRm47XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IG1pbWljRm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgbWltaWNGbiA9IHJlcXVpcmUoJ21pbWljLWZuJyk7XG5cbmNvbnN0IGNhbGxlZEZ1bmN0aW9ucyA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IG9uZXRpbWUgPSAoZnVuY3Rpb25fLCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKHR5cGVvZiBmdW5jdGlvbl8gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWU7XG5cdGxldCBjYWxsQ291bnQgPSAwO1xuXHRjb25zdCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbl8uZGlzcGxheU5hbWUgfHwgZnVuY3Rpb25fLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcblxuXHRjb25zdCBvbmV0aW1lID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsICsrY2FsbENvdW50KTtcblxuXHRcdGlmIChjYWxsQ291bnQgPT09IDEpIHtcblx0XHRcdHJldHVyblZhbHVlID0gZnVuY3Rpb25fLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdFx0ZnVuY3Rpb25fID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMudGhyb3cgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gXFxgJHtmdW5jdGlvbk5hbWV9XFxgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlYCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHR9O1xuXG5cdG1pbWljRm4ob25ldGltZSwgZnVuY3Rpb25fKTtcblx0Y2FsbGVkRnVuY3Rpb25zLnNldChvbmV0aW1lLCBjYWxsQ291bnQpO1xuXG5cdHJldHVybiBvbmV0aW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbmV0aW1lO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBvbmV0aW1lO1xuXG5tb2R1bGUuZXhwb3J0cy5jYWxsQ291bnQgPSBmdW5jdGlvbl8gPT4ge1xuXHRpZiAoIWNhbGxlZEZ1bmN0aW9ucy5oYXMoZnVuY3Rpb25fKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgVGhlIGdpdmVuIGZ1bmN0aW9uIFxcYCR7ZnVuY3Rpb25fLm5hbWV9XFxgIGlzIG5vdCB3cmFwcGVkIGJ5IHRoZSBcXGBvbmV0aW1lXFxgIHBhY2thZ2VgKTtcblx0fVxuXG5cdHJldHVybiBjYWxsZWRGdW5jdGlvbnMuZ2V0KGZ1bmN0aW9uXyk7XG59O1xuIiwgIi8vIFRoaXMgaXMgbm90IHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHNpZ25hbHMuXG4vL1xuLy8gSXQgSVMsIGhvd2V2ZXIsIHRoZSBzZXQgb2YgYWxsIHNpZ25hbHMgdGhhdCB0cmlnZ2VyXG4vLyBhbiBleGl0IG9uIGVpdGhlciBMaW51eCBvciBCU0Qgc3lzdGVtcy4gIExpbnV4IGlzIGFcbi8vIHN1cGVyc2V0IG9mIHRoZSBzaWduYWwgbmFtZXMgc3VwcG9ydGVkIG9uIEJTRCwgYW5kXG4vLyB0aGUgdW5rbm93biBzaWduYWxzIGp1c3QgZmFpbCB0byByZWdpc3Rlciwgc28gd2UgY2FuXG4vLyBjYXRjaCB0aGF0IGVhc2lseSBlbm91Z2guXG4vL1xuLy8gRG9uJ3QgYm90aGVyIHdpdGggU0lHS0lMTC4gIEl0J3MgdW5jYXRjaGFibGUsIHdoaWNoXG4vLyBtZWFucyB0aGF0IHdlIGNhbid0IGZpcmUgYW55IGNhbGxiYWNrcyBhbnl3YXkuXG4vL1xuLy8gSWYgYSB1c2VyIGRvZXMgaGFwcGVuIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBvbiBhIG5vbi1cbi8vIGZhdGFsIHNpZ25hbCBsaWtlIFNJR1dJTkNIIG9yIHNvbWV0aGluZywgYW5kIHRoZW5cbi8vIGV4aXQsIGl0J2xsIGVuZCB1cCBmaXJpbmcgYHByb2Nlc3MuZW1pdCgnZXhpdCcpYCwgc29cbi8vIHRoZSBoYW5kbGVyIHdpbGwgYmUgZmlyZWQgYW55d2F5LlxuLy9cbi8vIFNJR0JVUywgU0lHRlBFLCBTSUdTRUdWIGFuZCBTSUdJTEwsIHdoZW4gbm90IHJhaXNlZFxuLy8gYXJ0aWZpY2lhbGx5LCBpbmhlcmVudGx5IGxlYXZlIHRoZSBwcm9jZXNzIGluIGFcbi8vIHN0YXRlIGZyb20gd2hpY2ggaXQgaXMgbm90IHNhZmUgdG8gdHJ5IGFuZCBlbnRlciBKU1xuLy8gbGlzdGVuZXJzLlxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdTSUdBQlJUJyxcbiAgJ1NJR0FMUk0nLFxuICAnU0lHSFVQJyxcbiAgJ1NJR0lOVCcsXG4gICdTSUdURVJNJ1xuXVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdWVEFMUk0nLFxuICAgICdTSUdYQ1BVJyxcbiAgICAnU0lHWEZTWicsXG4gICAgJ1NJR1VTUjInLFxuICAgICdTSUdUUkFQJyxcbiAgICAnU0lHU1lTJyxcbiAgICAnU0lHUVVJVCcsXG4gICAgJ1NJR0lPVCdcbiAgICAvLyBzaG91bGQgZGV0ZWN0IHByb2ZpbGVyIGFuZCBlbmFibGUvZGlzYWJsZSBhY2NvcmRpbmdseS5cbiAgICAvLyBzZWUgIzIxXG4gICAgLy8gJ1NJR1BST0YnXG4gIClcbn1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHSU8nLFxuICAgICdTSUdQT0xMJyxcbiAgICAnU0lHUFdSJyxcbiAgICAnU0lHU1RLRkxUJyxcbiAgICAnU0lHVU5VU0VEJ1xuICApXG59XG4iLCAiLy8gTm90ZTogc2luY2UgbnljIHVzZXMgdGhpcyBtb2R1bGUgdG8gb3V0cHV0IGNvdmVyYWdlLCBhbnkgbGluZXNcbi8vIHRoYXQgYXJlIGluIHRoZSBkaXJlY3Qgc3luYyBmbG93IG9mIG55YydzIG91dHB1dENvdmVyYWdlIGFyZVxuLy8gaWdub3JlZCwgc2luY2Ugd2UgY2FuIG5ldmVyIGdldCBjb3ZlcmFnZSBmb3IgdGhlbS5cbi8vIGdyYWIgYSByZWZlcmVuY2UgdG8gbm9kZSdzIHJlYWwgcHJvY2VzcyBvYmplY3QgcmlnaHQgYXdheVxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2Vzc1xuXG5jb25zdCBwcm9jZXNzT2sgPSBmdW5jdGlvbiAocHJvY2Vzcykge1xuICByZXR1cm4gcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MuZW1pdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnJlYWxseUV4aXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5saXN0ZW5lcnMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5raWxsID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucGlkID09PSAnbnVtYmVyJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLm9uID09PSAnZnVuY3Rpb24nXG59XG5cbi8vIHNvbWUga2luZCBvZiBub24tbm9kZSBlbnZpcm9ubWVudCwganVzdCBuby1vcFxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoIXByb2Nlc3NPayhwcm9jZXNzKSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgfVxufSBlbHNlIHtcbiAgdmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG4gIHZhciBzaWduYWxzID0gcmVxdWlyZSgnLi9zaWduYWxzLmpzJylcbiAgdmFyIGlzV2luID0gL153aW4vaS50ZXN0KHByb2Nlc3MucGxhdGZvcm0pXG5cbiAgdmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgRUUgIT09ICdmdW5jdGlvbicpIHtcbiAgICBFRSA9IEVFLkV2ZW50RW1pdHRlclxuICB9XG5cbiAgdmFyIGVtaXR0ZXJcbiAgaWYgKHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX18pIHtcbiAgICBlbWl0dGVyID0gcHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfX1xuICB9IGVsc2Uge1xuICAgIGVtaXR0ZXIgPSBwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fID0gbmV3IEVFKClcbiAgICBlbWl0dGVyLmNvdW50ID0gMFxuICAgIGVtaXR0ZXIuZW1pdHRlZCA9IHt9XG4gIH1cblxuICAvLyBCZWNhdXNlIHRoaXMgZW1pdHRlciBpcyBhIGdsb2JhbCwgd2UgaGF2ZSB0byBjaGVjayB0byBzZWUgaWYgYVxuICAvLyBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgbGlicmFyeSBmYWlsZWQgdG8gZW5hYmxlIGluZmluaXRlIGxpc3RlbmVycy5cbiAgLy8gSSBrbm93IHdoYXQgeW91J3JlIGFib3V0IHRvIHNheS4gIEJ1dCBsaXRlcmFsbHkgZXZlcnl0aGluZyBhYm91dFxuICAvLyBzaWduYWwtZXhpdCBpcyBhIGNvbXByb21pc2Ugd2l0aCBldmlsLiAgR2V0IHVzZWQgdG8gaXQuXG4gIGlmICghZW1pdHRlci5pbmZpbml0ZSkge1xuICAgIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKEluZmluaXR5KVxuICAgIGVtaXR0ZXIuaW5maW5pdGUgPSB0cnVlXG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjYiwgb3B0cykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9XG4gICAgfVxuICAgIGFzc2VydC5lcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICdhIGNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQgZm9yIGV4aXQgaGFuZGxlcicpXG5cbiAgICBpZiAobG9hZGVkID09PSBmYWxzZSkge1xuICAgICAgbG9hZCgpXG4gICAgfVxuXG4gICAgdmFyIGV2ID0gJ2V4aXQnXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5hbHdheXNMYXN0KSB7XG4gICAgICBldiA9ICdhZnRlcmV4aXQnXG4gICAgfVxuXG4gICAgdmFyIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoZXYsIGNiKVxuICAgICAgaWYgKGVtaXR0ZXIubGlzdGVuZXJzKCdleGl0JykubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgZW1pdHRlci5saXN0ZW5lcnMoJ2FmdGVyZXhpdCcpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1bmxvYWQoKVxuICAgICAgfVxuICAgIH1cbiAgICBlbWl0dGVyLm9uKGV2LCBjYilcblxuICAgIHJldHVybiByZW1vdmVcbiAgfVxuXG4gIHZhciB1bmxvYWQgPSBmdW5jdGlvbiB1bmxvYWQgKCkge1xuICAgIGlmICghbG9hZGVkIHx8ICFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbG9hZGVkID0gZmFsc2VcblxuICAgIHNpZ25hbHMuZm9yRWFjaChmdW5jdGlvbiAoc2lnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKHNpZywgc2lnTGlzdGVuZXJzW3NpZ10pXG4gICAgICB9IGNhdGNoIChlcikge31cbiAgICB9KVxuICAgIHByb2Nlc3MuZW1pdCA9IG9yaWdpbmFsUHJvY2Vzc0VtaXRcbiAgICBwcm9jZXNzLnJlYWxseUV4aXQgPSBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0XG4gICAgZW1pdHRlci5jb3VudCAtPSAxXG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMudW5sb2FkID0gdW5sb2FkXG5cbiAgdmFyIGVtaXQgPSBmdW5jdGlvbiBlbWl0IChldmVudCwgY29kZSwgc2lnbmFsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVtaXR0ZXIuZW1pdHRlZFtldmVudF0pIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0dGVyLmVtaXR0ZWRbZXZlbnRdID0gdHJ1ZVxuICAgIGVtaXR0ZXIuZW1pdChldmVudCwgY29kZSwgc2lnbmFsKVxuICB9XG5cbiAgLy8geyA8c2lnbmFsPjogPGxpc3RlbmVyIGZuPiwgLi4uIH1cbiAgdmFyIHNpZ0xpc3RlbmVycyA9IHt9XG4gIHNpZ25hbHMuZm9yRWFjaChmdW5jdGlvbiAoc2lnKSB7XG4gICAgc2lnTGlzdGVuZXJzW3NpZ10gPSBmdW5jdGlvbiBsaXN0ZW5lciAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvdGhlciBsaXN0ZW5lcnMsIGFuIGV4aXQgaXMgY29taW5nIVxuICAgICAgLy8gU2ltcGxlc3Qgd2F5OiByZW1vdmUgdXMgYW5kIHRoZW4gcmUtc2VuZCB0aGUgc2lnbmFsLlxuICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgd2lsbCBraWxsIHRoZSBwcm9jZXNzLCBzbyB3ZSBjYW5cbiAgICAgIC8vIHNhZmVseSBlbWl0IG5vdy5cbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBwcm9jZXNzLmxpc3RlbmVycyhzaWcpXG4gICAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gZW1pdHRlci5jb3VudCkge1xuICAgICAgICB1bmxvYWQoKVxuICAgICAgICBlbWl0KCdleGl0JywgbnVsbCwgc2lnKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBlbWl0KCdhZnRlcmV4aXQnLCBudWxsLCBzaWcpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChpc1dpbiAmJiBzaWcgPT09ICdTSUdIVVAnKSB7XG4gICAgICAgICAgLy8gXCJTSUdIVVBcIiB0aHJvd3MgYW4gYEVOT1NZU2AgZXJyb3Igb24gV2luZG93cyxcbiAgICAgICAgICAvLyBzbyB1c2UgYSBzdXBwb3J0ZWQgc2lnbmFsIGluc3RlYWRcbiAgICAgICAgICBzaWcgPSAnU0lHSU5UJ1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHByb2Nlc3Mua2lsbChwcm9jZXNzLnBpZCwgc2lnKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBtb2R1bGUuZXhwb3J0cy5zaWduYWxzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzaWduYWxzXG4gIH1cblxuICB2YXIgbG9hZGVkID0gZmFsc2VcblxuICB2YXIgbG9hZCA9IGZ1bmN0aW9uIGxvYWQgKCkge1xuICAgIGlmIChsb2FkZWQgfHwgIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsb2FkZWQgPSB0cnVlXG5cbiAgICAvLyBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygb25TaWduYWxFeGl0J3MgdGhhdCBhcmUgaW4gcGxheS5cbiAgICAvLyBJdCdzIGltcG9ydGFudCBzbyB0aGF0IHdlIGNhbiBjb3VudCB0aGUgY29ycmVjdCBudW1iZXIgb2ZcbiAgICAvLyBsaXN0ZW5lcnMgb24gc2lnbmFscywgYW5kIGRvbid0IHdhaXQgZm9yIHRoZSBvdGhlciBvbmUgdG9cbiAgICAvLyBoYW5kbGUgaXQgaW5zdGVhZCBvZiB1cy5cbiAgICBlbWl0dGVyLmNvdW50ICs9IDFcblxuICAgIHNpZ25hbHMgPSBzaWduYWxzLmZpbHRlcihmdW5jdGlvbiAoc2lnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm9jZXNzLm9uKHNpZywgc2lnTGlzdGVuZXJzW3NpZ10pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcHJvY2Vzcy5lbWl0ID0gcHJvY2Vzc0VtaXRcbiAgICBwcm9jZXNzLnJlYWxseUV4aXQgPSBwcm9jZXNzUmVhbGx5RXhpdFxuICB9XG4gIG1vZHVsZS5leHBvcnRzLmxvYWQgPSBsb2FkXG5cbiAgdmFyIG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXQgPSBwcm9jZXNzLnJlYWxseUV4aXRcbiAgdmFyIHByb2Nlc3NSZWFsbHlFeGl0ID0gZnVuY3Rpb24gcHJvY2Vzc1JlYWxseUV4aXQgKGNvZGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gY29kZSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyAwXG4gICAgZW1pdCgnZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBlbWl0KCdhZnRlcmV4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdC5jYWxsKHByb2Nlc3MsIHByb2Nlc3MuZXhpdENvZGUpXG4gIH1cblxuICB2YXIgb3JpZ2luYWxQcm9jZXNzRW1pdCA9IHByb2Nlc3MuZW1pdFxuICB2YXIgcHJvY2Vzc0VtaXQgPSBmdW5jdGlvbiBwcm9jZXNzRW1pdCAoZXYsIGFyZykge1xuICAgIGlmIChldiA9PT0gJ2V4aXQnICYmIHByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoYXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IGFyZ1xuICAgICAgfVxuICAgICAgdmFyIHJldCA9IG9yaWdpbmFsUHJvY2Vzc0VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGVtaXQoJ2V4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGVtaXQoJ2FmdGVyZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIHJldFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxQcm9jZXNzRW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG59XG4iLCAie1xuXHRcImRvdHNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgzOVwiLFxuXHRcdFx0XCJcdTI4MzhcIixcblx0XHRcdFwiXHUyODNDXCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODI3XCIsXG5cdFx0XHRcIlx1MjgwN1wiLFxuXHRcdFx0XCJcdTI4MEZcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjhGRVwiLFxuXHRcdFx0XCJcdTI4RkRcIixcblx0XHRcdFwiXHUyOEZCXCIsXG5cdFx0XHRcIlx1MjhCRlwiLFxuXHRcdFx0XCJcdTI4N0ZcIixcblx0XHRcdFwiXHUyOERGXCIsXG5cdFx0XHRcIlx1MjhFRlwiLFxuXHRcdFx0XCJcdTI4RjdcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzM1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODFBXCIsXG5cdFx0XHRcIlx1MjgxRVwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODMzXCIsXG5cdFx0XHRcIlx1MjgxM1wiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM0XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgwNlwiLFxuXHRcdFx0XCJcdTI4MDdcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MzhcIixcblx0XHRcdFwiXHUyODMwXCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MzBcIixcblx0XHRcdFwiXHUyODM4XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODA3XCIsXG5cdFx0XHRcIlx1MjgwNlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM1XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEzXCIsXG5cdFx0XHRcIlx1MjgwQlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM2XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODFBXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODMyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDFcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzN1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwOFwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxM1wiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MjRcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MjRcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEzXCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODA4XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czhcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODFBXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDhcIixcblx0XHRcdFwiXHUyODA4XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4QjlcIixcblx0XHRcdFwiXHUyOEJBXCIsXG5cdFx0XHRcIlx1MjhCQ1wiLFxuXHRcdFx0XCJcdTI4RjhcIixcblx0XHRcdFwiXHUyOEM3XCIsXG5cdFx0XHRcIlx1Mjg2N1wiLFxuXHRcdFx0XCJcdTI4NTdcIixcblx0XHRcdFwiXHUyODRGXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czEwXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODg0XCIsXG5cdFx0XHRcIlx1Mjg4MlwiLFxuXHRcdFx0XCJcdTI4ODFcIixcblx0XHRcdFwiXHUyODQxXCIsXG5cdFx0XHRcIlx1Mjg0OFwiLFxuXHRcdFx0XCJcdTI4NTBcIixcblx0XHRcdFwiXHUyODYwXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czExXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1Mjg0MFwiLFxuXHRcdFx0XCJcdTI4ODBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MDhcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4ODBcdTI4MDBcIixcblx0XHRcdFwiXHUyODQwXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwNFx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4ODJcdTI4MDBcIixcblx0XHRcdFwiXHUyODQyXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwNVx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4ODNcdTI4MDBcIixcblx0XHRcdFwiXHUyODQzXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MDBcIixcblx0XHRcdFwiXHUyODRCXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MDFcIixcblx0XHRcdFwiXHUyODRCXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwOFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDhcdTI4NTlcIixcblx0XHRcdFwiXHUyODg4XHUyODI5XCIsXG5cdFx0XHRcIlx1Mjg0MFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDRcdTI4NTlcIixcblx0XHRcdFwiXHUyODgyXHUyODI5XCIsXG5cdFx0XHRcIlx1Mjg0Mlx1Mjg5OFwiLFxuXHRcdFx0XCJcdTI4MDVcdTI4NThcIixcblx0XHRcdFwiXHUyODgzXHUyODI4XCIsXG5cdFx0XHRcIlx1Mjg0M1x1Mjg5MFwiLFxuXHRcdFx0XCJcdTI4MERcdTI4NTBcIixcblx0XHRcdFwiXHUyODhCXHUyODIwXCIsXG5cdFx0XHRcIlx1Mjg0Qlx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4MERcdTI4NDFcIixcblx0XHRcdFwiXHUyODhCXHUyODAxXCIsXG5cdFx0XHRcIlx1Mjg0Qlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MERcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwQlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgyOVwiLFxuXHRcdFx0XCJcdTI4MDhcdTI4OTlcIixcblx0XHRcdFwiXHUyODA4XHUyODU5XCIsXG5cdFx0XHRcIlx1MjgwOFx1MjgyOVwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4OTlcIixcblx0XHRcdFwiXHUyODAwXHUyODU5XCIsXG5cdFx0XHRcIlx1MjgwMFx1MjgyOVwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4OThcIixcblx0XHRcdFwiXHUyODAwXHUyODU4XCIsXG5cdFx0XHRcIlx1MjgwMFx1MjgyOFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4OTBcIixcblx0XHRcdFwiXHUyODAwXHUyODUwXCIsXG5cdFx0XHRcIlx1MjgwMFx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4ODBcIixcblx0XHRcdFwiXHUyODAwXHUyODQwXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czEzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOEZDXCIsXG5cdFx0XHRcIlx1MjhGOVwiLFxuXHRcdFx0XCJcdTI4QkJcIixcblx0XHRcdFwiXHUyODNGXCIsXG5cdFx0XHRcIlx1Mjg1RlwiLFxuXHRcdFx0XCJcdTI4Q0ZcIixcblx0XHRcdFwiXHUyOEU3XCIsXG5cdFx0XHRcIlx1MjhGNlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM4Qml0XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAzXCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDVcIixcblx0XHRcdFwiXHUyODA2XCIsXG5cdFx0XHRcIlx1MjgwN1wiLFxuXHRcdFx0XCJcdTI4NDBcIixcblx0XHRcdFwiXHUyODQxXCIsXG5cdFx0XHRcIlx1Mjg0MlwiLFxuXHRcdFx0XCJcdTI4NDNcIixcblx0XHRcdFwiXHUyODQ0XCIsXG5cdFx0XHRcIlx1Mjg0NVwiLFxuXHRcdFx0XCJcdTI4NDZcIixcblx0XHRcdFwiXHUyODQ3XCIsXG5cdFx0XHRcIlx1MjgwOFwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBBXCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MENcIixcblx0XHRcdFwiXHUyODBEXCIsXG5cdFx0XHRcIlx1MjgwRVwiLFxuXHRcdFx0XCJcdTI4MEZcIixcblx0XHRcdFwiXHUyODQ4XCIsXG5cdFx0XHRcIlx1Mjg0OVwiLFxuXHRcdFx0XCJcdTI4NEFcIixcblx0XHRcdFwiXHUyODRCXCIsXG5cdFx0XHRcIlx1Mjg0Q1wiLFxuXHRcdFx0XCJcdTI4NERcIixcblx0XHRcdFwiXHUyODRFXCIsXG5cdFx0XHRcIlx1Mjg0RlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODExXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODE0XCIsXG5cdFx0XHRcIlx1MjgxNVwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODE3XCIsXG5cdFx0XHRcIlx1Mjg1MFwiLFxuXHRcdFx0XCJcdTI4NTFcIixcblx0XHRcdFwiXHUyODUyXCIsXG5cdFx0XHRcIlx1Mjg1M1wiLFxuXHRcdFx0XCJcdTI4NTRcIixcblx0XHRcdFwiXHUyODU1XCIsXG5cdFx0XHRcIlx1Mjg1NlwiLFxuXHRcdFx0XCJcdTI4NTdcIixcblx0XHRcdFwiXHUyODE4XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODFCXCIsXG5cdFx0XHRcIlx1MjgxQ1wiLFxuXHRcdFx0XCJcdTI4MURcIixcblx0XHRcdFwiXHUyODFFXCIsXG5cdFx0XHRcIlx1MjgxRlwiLFxuXHRcdFx0XCJcdTI4NThcIixcblx0XHRcdFwiXHUyODU5XCIsXG5cdFx0XHRcIlx1Mjg1QVwiLFxuXHRcdFx0XCJcdTI4NUJcIixcblx0XHRcdFwiXHUyODVDXCIsXG5cdFx0XHRcIlx1Mjg1RFwiLFxuXHRcdFx0XCJcdTI4NUVcIixcblx0XHRcdFwiXHUyODVGXCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MjFcIixcblx0XHRcdFwiXHUyODIyXCIsXG5cdFx0XHRcIlx1MjgyM1wiLFxuXHRcdFx0XCJcdTI4MjRcIixcblx0XHRcdFwiXHUyODI1XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MjdcIixcblx0XHRcdFwiXHUyODYwXCIsXG5cdFx0XHRcIlx1Mjg2MVwiLFxuXHRcdFx0XCJcdTI4NjJcIixcblx0XHRcdFwiXHUyODYzXCIsXG5cdFx0XHRcIlx1Mjg2NFwiLFxuXHRcdFx0XCJcdTI4NjVcIixcblx0XHRcdFwiXHUyODY2XCIsXG5cdFx0XHRcIlx1Mjg2N1wiLFxuXHRcdFx0XCJcdTI4MjhcIixcblx0XHRcdFwiXHUyODI5XCIsXG5cdFx0XHRcIlx1MjgyQVwiLFxuXHRcdFx0XCJcdTI4MkJcIixcblx0XHRcdFwiXHUyODJDXCIsXG5cdFx0XHRcIlx1MjgyRFwiLFxuXHRcdFx0XCJcdTI4MkVcIixcblx0XHRcdFwiXHUyODJGXCIsXG5cdFx0XHRcIlx1Mjg2OFwiLFxuXHRcdFx0XCJcdTI4NjlcIixcblx0XHRcdFwiXHUyODZBXCIsXG5cdFx0XHRcIlx1Mjg2QlwiLFxuXHRcdFx0XCJcdTI4NkNcIixcblx0XHRcdFwiXHUyODZEXCIsXG5cdFx0XHRcIlx1Mjg2RVwiLFxuXHRcdFx0XCJcdTI4NkZcIixcblx0XHRcdFwiXHUyODMwXCIsXG5cdFx0XHRcIlx1MjgzMVwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODMzXCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MzVcIixcblx0XHRcdFwiXHUyODM2XCIsXG5cdFx0XHRcIlx1MjgzN1wiLFxuXHRcdFx0XCJcdTI4NzBcIixcblx0XHRcdFwiXHUyODcxXCIsXG5cdFx0XHRcIlx1Mjg3MlwiLFxuXHRcdFx0XCJcdTI4NzNcIixcblx0XHRcdFwiXHUyODc0XCIsXG5cdFx0XHRcIlx1Mjg3NVwiLFxuXHRcdFx0XCJcdTI4NzZcIixcblx0XHRcdFwiXHUyODc3XCIsXG5cdFx0XHRcIlx1MjgzOFwiLFxuXHRcdFx0XCJcdTI4MzlcIixcblx0XHRcdFwiXHUyODNBXCIsXG5cdFx0XHRcIlx1MjgzQlwiLFxuXHRcdFx0XCJcdTI4M0NcIixcblx0XHRcdFwiXHUyODNEXCIsXG5cdFx0XHRcIlx1MjgzRVwiLFxuXHRcdFx0XCJcdTI4M0ZcIixcblx0XHRcdFwiXHUyODc4XCIsXG5cdFx0XHRcIlx1Mjg3OVwiLFxuXHRcdFx0XCJcdTI4N0FcIixcblx0XHRcdFwiXHUyODdCXCIsXG5cdFx0XHRcIlx1Mjg3Q1wiLFxuXHRcdFx0XCJcdTI4N0RcIixcblx0XHRcdFwiXHUyODdFXCIsXG5cdFx0XHRcIlx1Mjg3RlwiLFxuXHRcdFx0XCJcdTI4ODBcIixcblx0XHRcdFwiXHUyODgxXCIsXG5cdFx0XHRcIlx1Mjg4MlwiLFxuXHRcdFx0XCJcdTI4ODNcIixcblx0XHRcdFwiXHUyODg0XCIsXG5cdFx0XHRcIlx1Mjg4NVwiLFxuXHRcdFx0XCJcdTI4ODZcIixcblx0XHRcdFwiXHUyODg3XCIsXG5cdFx0XHRcIlx1MjhDMFwiLFxuXHRcdFx0XCJcdTI4QzFcIixcblx0XHRcdFwiXHUyOEMyXCIsXG5cdFx0XHRcIlx1MjhDM1wiLFxuXHRcdFx0XCJcdTI4QzRcIixcblx0XHRcdFwiXHUyOEM1XCIsXG5cdFx0XHRcIlx1MjhDNlwiLFxuXHRcdFx0XCJcdTI4QzdcIixcblx0XHRcdFwiXHUyODg4XCIsXG5cdFx0XHRcIlx1Mjg4OVwiLFxuXHRcdFx0XCJcdTI4OEFcIixcblx0XHRcdFwiXHUyODhCXCIsXG5cdFx0XHRcIlx1Mjg4Q1wiLFxuXHRcdFx0XCJcdTI4OERcIixcblx0XHRcdFwiXHUyODhFXCIsXG5cdFx0XHRcIlx1Mjg4RlwiLFxuXHRcdFx0XCJcdTI4QzhcIixcblx0XHRcdFwiXHUyOEM5XCIsXG5cdFx0XHRcIlx1MjhDQVwiLFxuXHRcdFx0XCJcdTI4Q0JcIixcblx0XHRcdFwiXHUyOENDXCIsXG5cdFx0XHRcIlx1MjhDRFwiLFxuXHRcdFx0XCJcdTI4Q0VcIixcblx0XHRcdFwiXHUyOENGXCIsXG5cdFx0XHRcIlx1Mjg5MFwiLFxuXHRcdFx0XCJcdTI4OTFcIixcblx0XHRcdFwiXHUyODkyXCIsXG5cdFx0XHRcIlx1Mjg5M1wiLFxuXHRcdFx0XCJcdTI4OTRcIixcblx0XHRcdFwiXHUyODk1XCIsXG5cdFx0XHRcIlx1Mjg5NlwiLFxuXHRcdFx0XCJcdTI4OTdcIixcblx0XHRcdFwiXHUyOEQwXCIsXG5cdFx0XHRcIlx1MjhEMVwiLFxuXHRcdFx0XCJcdTI4RDJcIixcblx0XHRcdFwiXHUyOEQzXCIsXG5cdFx0XHRcIlx1MjhENFwiLFxuXHRcdFx0XCJcdTI4RDVcIixcblx0XHRcdFwiXHUyOEQ2XCIsXG5cdFx0XHRcIlx1MjhEN1wiLFxuXHRcdFx0XCJcdTI4OThcIixcblx0XHRcdFwiXHUyODk5XCIsXG5cdFx0XHRcIlx1Mjg5QVwiLFxuXHRcdFx0XCJcdTI4OUJcIixcblx0XHRcdFwiXHUyODlDXCIsXG5cdFx0XHRcIlx1Mjg5RFwiLFxuXHRcdFx0XCJcdTI4OUVcIixcblx0XHRcdFwiXHUyODlGXCIsXG5cdFx0XHRcIlx1MjhEOFwiLFxuXHRcdFx0XCJcdTI4RDlcIixcblx0XHRcdFwiXHUyOERBXCIsXG5cdFx0XHRcIlx1MjhEQlwiLFxuXHRcdFx0XCJcdTI4RENcIixcblx0XHRcdFwiXHUyOEREXCIsXG5cdFx0XHRcIlx1MjhERVwiLFxuXHRcdFx0XCJcdTI4REZcIixcblx0XHRcdFwiXHUyOEEwXCIsXG5cdFx0XHRcIlx1MjhBMVwiLFxuXHRcdFx0XCJcdTI4QTJcIixcblx0XHRcdFwiXHUyOEEzXCIsXG5cdFx0XHRcIlx1MjhBNFwiLFxuXHRcdFx0XCJcdTI4QTVcIixcblx0XHRcdFwiXHUyOEE2XCIsXG5cdFx0XHRcIlx1MjhBN1wiLFxuXHRcdFx0XCJcdTI4RTBcIixcblx0XHRcdFwiXHUyOEUxXCIsXG5cdFx0XHRcIlx1MjhFMlwiLFxuXHRcdFx0XCJcdTI4RTNcIixcblx0XHRcdFwiXHUyOEU0XCIsXG5cdFx0XHRcIlx1MjhFNVwiLFxuXHRcdFx0XCJcdTI4RTZcIixcblx0XHRcdFwiXHUyOEU3XCIsXG5cdFx0XHRcIlx1MjhBOFwiLFxuXHRcdFx0XCJcdTI4QTlcIixcblx0XHRcdFwiXHUyOEFBXCIsXG5cdFx0XHRcIlx1MjhBQlwiLFxuXHRcdFx0XCJcdTI4QUNcIixcblx0XHRcdFwiXHUyOEFEXCIsXG5cdFx0XHRcIlx1MjhBRVwiLFxuXHRcdFx0XCJcdTI4QUZcIixcblx0XHRcdFwiXHUyOEU4XCIsXG5cdFx0XHRcIlx1MjhFOVwiLFxuXHRcdFx0XCJcdTI4RUFcIixcblx0XHRcdFwiXHUyOEVCXCIsXG5cdFx0XHRcIlx1MjhFQ1wiLFxuXHRcdFx0XCJcdTI4RURcIixcblx0XHRcdFwiXHUyOEVFXCIsXG5cdFx0XHRcIlx1MjhFRlwiLFxuXHRcdFx0XCJcdTI4QjBcIixcblx0XHRcdFwiXHUyOEIxXCIsXG5cdFx0XHRcIlx1MjhCMlwiLFxuXHRcdFx0XCJcdTI4QjNcIixcblx0XHRcdFwiXHUyOEI0XCIsXG5cdFx0XHRcIlx1MjhCNVwiLFxuXHRcdFx0XCJcdTI4QjZcIixcblx0XHRcdFwiXHUyOEI3XCIsXG5cdFx0XHRcIlx1MjhGMFwiLFxuXHRcdFx0XCJcdTI4RjFcIixcblx0XHRcdFwiXHUyOEYyXCIsXG5cdFx0XHRcIlx1MjhGM1wiLFxuXHRcdFx0XCJcdTI4RjRcIixcblx0XHRcdFwiXHUyOEY1XCIsXG5cdFx0XHRcIlx1MjhGNlwiLFxuXHRcdFx0XCJcdTI4RjdcIixcblx0XHRcdFwiXHUyOEI4XCIsXG5cdFx0XHRcIlx1MjhCOVwiLFxuXHRcdFx0XCJcdTI4QkFcIixcblx0XHRcdFwiXHUyOEJCXCIsXG5cdFx0XHRcIlx1MjhCQ1wiLFxuXHRcdFx0XCJcdTI4QkRcIixcblx0XHRcdFwiXHUyOEJFXCIsXG5cdFx0XHRcIlx1MjhCRlwiLFxuXHRcdFx0XCJcdTI4RjhcIixcblx0XHRcdFwiXHUyOEY5XCIsXG5cdFx0XHRcIlx1MjhGQVwiLFxuXHRcdFx0XCJcdTI4RkJcIixcblx0XHRcdFwiXHUyOEZDXCIsXG5cdFx0XHRcIlx1MjhGRFwiLFxuXHRcdFx0XCJcdTI4RkVcIixcblx0XHRcdFwiXHUyOEZGXCJcblx0XHRdXG5cdH0sXG5cdFwic2FuZFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1Mjg0MFwiLFxuXHRcdFx0XCJcdTI4NDhcIixcblx0XHRcdFwiXHUyODUwXCIsXG5cdFx0XHRcIlx1Mjg2MFwiLFxuXHRcdFx0XCJcdTI4QzBcIixcblx0XHRcdFwiXHUyOEMxXCIsXG5cdFx0XHRcIlx1MjhDMlwiLFxuXHRcdFx0XCJcdTI4QzRcIixcblx0XHRcdFwiXHUyOENDXCIsXG5cdFx0XHRcIlx1MjhENFwiLFxuXHRcdFx0XCJcdTI4RTRcIixcblx0XHRcdFwiXHUyOEU1XCIsXG5cdFx0XHRcIlx1MjhFNlwiLFxuXHRcdFx0XCJcdTI4RUVcIixcblx0XHRcdFwiXHUyOEY2XCIsXG5cdFx0XHRcIlx1MjhGN1wiLFxuXHRcdFx0XCJcdTI4RkZcIixcblx0XHRcdFwiXHUyODdGXCIsXG5cdFx0XHRcIlx1MjgzRlwiLFxuXHRcdFx0XCJcdTI4OUZcIixcblx0XHRcdFwiXHUyODFGXCIsXG5cdFx0XHRcIlx1Mjg1QlwiLFxuXHRcdFx0XCJcdTI4MUJcIixcblx0XHRcdFwiXHUyODJCXCIsXG5cdFx0XHRcIlx1Mjg4QlwiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODBEXCIsXG5cdFx0XHRcIlx1Mjg0OVwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODExXCIsXG5cdFx0XHRcIlx1MjgyMVwiLFxuXHRcdFx0XCJcdTI4ODFcIlxuXHRcdF1cblx0fSxcblx0XCJsaW5lXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEzMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiXFxcXFwiLFxuXHRcdFx0XCJ8XCIsXG5cdFx0XHRcIi9cIlxuXHRcdF1cblx0fSxcblx0XCJsaW5lMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCJcdTIwMTNcIixcblx0XHRcdFwiXHUyMDE0XCIsXG5cdFx0XHRcIlx1MjAxM1wiLFxuXHRcdFx0XCItXCJcblx0XHRdXG5cdH0sXG5cdFwicGlwZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1MjRcIixcblx0XHRcdFwiXHUyNTE4XCIsXG5cdFx0XHRcIlx1MjUzNFwiLFxuXHRcdFx0XCJcdTI1MTRcIixcblx0XHRcdFwiXHUyNTFDXCIsXG5cdFx0XHRcIlx1MjUwQ1wiLFxuXHRcdFx0XCJcdTI1MkNcIixcblx0XHRcdFwiXHUyNTEwXCJcblx0XHRdXG5cdH0sXG5cdFwic2ltcGxlRG90c1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA0MDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIuICBcIixcblx0XHRcdFwiLi4gXCIsXG5cdFx0XHRcIi4uLlwiLFxuXHRcdFx0XCIgICBcIlxuXHRcdF1cblx0fSxcblx0XCJzaW1wbGVEb3RzU2Nyb2xsaW5nXCI6IHtcblx0XHRcImludGVydmFsXCI6IDIwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIi4gIFwiLFxuXHRcdFx0XCIuLiBcIixcblx0XHRcdFwiLi4uXCIsXG5cdFx0XHRcIiAuLlwiLFxuXHRcdFx0XCIgIC5cIixcblx0XHRcdFwiICAgXCJcblx0XHRdXG5cdH0sXG5cdFwic3RhclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA3MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjczNlwiLFxuXHRcdFx0XCJcdTI3MzhcIixcblx0XHRcdFwiXHUyNzM5XCIsXG5cdFx0XHRcIlx1MjczQVwiLFxuXHRcdFx0XCJcdTI3MzlcIixcblx0XHRcdFwiXHUyNzM3XCJcblx0XHRdXG5cdH0sXG5cdFwic3RhcjJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIrXCIsXG5cdFx0XHRcInhcIixcblx0XHRcdFwiKlwiXG5cdFx0XVxuXHR9LFxuXHRcImZsaXBcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNzAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJfXCIsXG5cdFx0XHRcIl9cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCItXCIsXG5cdFx0XHRcImBcIixcblx0XHRcdFwiYFwiLFxuXHRcdFx0XCInXCIsXG5cdFx0XHRcIlx1MDBCNFwiLFxuXHRcdFx0XCItXCIsXG5cdFx0XHRcIl9cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCJfXCJcblx0XHRdXG5cdH0sXG5cdFwiaGFtYnVyZ2VyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjYzMVwiLFxuXHRcdFx0XCJcdTI2MzJcIixcblx0XHRcdFwiXHUyNjM0XCJcblx0XHRdXG5cdH0sXG5cdFwiZ3Jvd1ZlcnRpY2FsXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODNcIixcblx0XHRcdFwiXHUyNTg0XCIsXG5cdFx0XHRcIlx1MjU4NVwiLFxuXHRcdFx0XCJcdTI1ODZcIixcblx0XHRcdFwiXHUyNTg3XCIsXG5cdFx0XHRcIlx1MjU4NlwiLFxuXHRcdFx0XCJcdTI1ODVcIixcblx0XHRcdFwiXHUyNTg0XCIsXG5cdFx0XHRcIlx1MjU4M1wiXG5cdFx0XVxuXHR9LFxuXHRcImdyb3dIb3Jpem9udGFsXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU4RlwiLFxuXHRcdFx0XCJcdTI1OEVcIixcblx0XHRcdFwiXHUyNThEXCIsXG5cdFx0XHRcIlx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OEJcIixcblx0XHRcdFwiXHUyNThBXCIsXG5cdFx0XHRcIlx1MjU4OVwiLFxuXHRcdFx0XCJcdTI1OEFcIixcblx0XHRcdFwiXHUyNThCXCIsXG5cdFx0XHRcIlx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OERcIixcblx0XHRcdFwiXHUyNThFXCJcblx0XHRdXG5cdH0sXG5cdFwiYmFsbG9vblwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIgXCIsXG5cdFx0XHRcIi5cIixcblx0XHRcdFwib1wiLFxuXHRcdFx0XCJPXCIsXG5cdFx0XHRcIkBcIixcblx0XHRcdFwiKlwiLFxuXHRcdFx0XCIgXCJcblx0XHRdXG5cdH0sXG5cdFwiYmFsbG9vbjJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLlwiLFxuXHRcdFx0XCJvXCIsXG5cdFx0XHRcIk9cIixcblx0XHRcdFwiXHUwMEIwXCIsXG5cdFx0XHRcIk9cIixcblx0XHRcdFwib1wiLFxuXHRcdFx0XCIuXCJcblx0XHRdXG5cdH0sXG5cdFwibm9pc2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTkzXCIsXG5cdFx0XHRcIlx1MjU5MlwiLFxuXHRcdFx0XCJcdTI1OTFcIlxuXHRcdF1cblx0fSxcblx0XCJib3VuY2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODAyXCJcblx0XHRdXG5cdH0sXG5cdFwiYm94Qm91bmNlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU5NlwiLFxuXHRcdFx0XCJcdTI1OThcIixcblx0XHRcdFwiXHUyNTlEXCIsXG5cdFx0XHRcIlx1MjU5N1wiXG5cdFx0XVxuXHR9LFxuXHRcImJveEJvdW5jZTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU4MFwiLFxuXHRcdFx0XCJcdTI1OTBcIixcblx0XHRcdFwiXHUyNTg0XCJcblx0XHRdXG5cdH0sXG5cdFwidHJpYW5nbGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNTAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1RTJcIixcblx0XHRcdFwiXHUyNUUzXCIsXG5cdFx0XHRcIlx1MjVFNFwiLFxuXHRcdFx0XCJcdTI1RTVcIlxuXHRcdF1cblx0fSxcblx0XCJiaW5hcnlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIwMTAwMTBcIixcbiAgICAgICAgICAgIFwiMDAxMTAwXCIsXG4gICAgICAgICAgICBcIjEwMDEwMVwiLFxuICAgICAgICAgICAgXCIxMTEwMTBcIixcbiAgICAgICAgICAgIFwiMTExMTAxXCIsXG4gICAgICAgICAgICBcIjAxMDExMVwiLFxuXHRcdFx0XCIxMDEwMTFcIixcblx0XHRcdFwiMTExMDAwXCIsXG5cdFx0XHRcIjExMDAxMVwiLFxuXHRcdFx0XCIxMTAxMDFcIlxuXHRcdF1cblx0fSxcblx0XCJhcmNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNURDXCIsXG5cdFx0XHRcIlx1MjVFMFwiLFxuXHRcdFx0XCJcdTI1RERcIixcblx0XHRcdFwiXHUyNURFXCIsXG5cdFx0XHRcIlx1MjVFMVwiLFxuXHRcdFx0XCJcdTI1REZcIlxuXHRcdF1cblx0fSxcblx0XCJjaXJjbGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUUxXCIsXG5cdFx0XHRcIlx1MjI5OVwiLFxuXHRcdFx0XCJcdTI1RTBcIlxuXHRcdF1cblx0fSxcblx0XCJzcXVhcmVDb3JuZXJzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVGMFwiLFxuXHRcdFx0XCJcdTI1RjNcIixcblx0XHRcdFwiXHUyNUYyXCIsXG5cdFx0XHRcIlx1MjVGMVwiXG5cdFx0XVxuXHR9LFxuXHRcImNpcmNsZVF1YXJ0ZXJzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVGNFwiLFxuXHRcdFx0XCJcdTI1RjdcIixcblx0XHRcdFwiXHUyNUY2XCIsXG5cdFx0XHRcIlx1MjVGNVwiXG5cdFx0XVxuXHR9LFxuXHRcImNpcmNsZUhhbHZlc1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA1MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVEMFwiLFxuXHRcdFx0XCJcdTI1RDNcIixcblx0XHRcdFwiXHUyNUQxXCIsXG5cdFx0XHRcIlx1MjVEMlwiXG5cdFx0XVxuXHR9LFxuXHRcInNxdWlzaFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1NkJcIixcblx0XHRcdFwiXHUyNTZBXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDI1MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjJCNlwiLFxuXHRcdFx0XCJcdTIyQjdcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGUyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUFCXCIsXG5cdFx0XHRcIlx1MjVBQVwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUExXCIsXG5cdFx0XHRcIlx1MjVBMFwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTRcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUEwXCIsXG5cdFx0XHRcIlx1MjVBMVwiLFxuXHRcdFx0XCJcdTI1QUFcIixcblx0XHRcdFwiXHUyNUFCXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlNVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QUVcIixcblx0XHRcdFwiXHUyNUFGXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlNlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAzMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTEwMURcIixcblx0XHRcdFwiXHUxMDQwXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlN1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjlCRVwiLFxuXHRcdFx0XCJcdTI5QkZcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU4XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVDRFwiLFxuXHRcdFx0XCJcdTI1Q0NcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU5XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVDOVwiLFxuXHRcdFx0XCJcdTI1Q0VcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGUxMFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTMyODJcIixcblx0XHRcdFwiXHUzMjgwXCIsXG5cdFx0XHRcIlx1MzI4MVwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTExXCI6IHtcblx0XHRcImludGVydmFsXCI6IDUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOUM3XCIsXG5cdFx0XHRcIlx1MjlDNlwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTEyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjYxN1wiLFxuXHRcdFx0XCJcdTI2MTZcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGUxM1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIj1cIixcblx0XHRcdFwiKlwiLFxuXHRcdFx0XCItXCJcblx0XHRdXG5cdH0sXG5cdFwiYXJyb3dcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyMTkwXCIsXG5cdFx0XHRcIlx1MjE5NlwiLFxuXHRcdFx0XCJcdTIxOTFcIixcblx0XHRcdFwiXHUyMTk3XCIsXG5cdFx0XHRcIlx1MjE5MlwiLFxuXHRcdFx0XCJcdTIxOThcIixcblx0XHRcdFwiXHUyMTkzXCIsXG5cdFx0XHRcIlx1MjE5OVwiXG5cdFx0XVxuXHR9LFxuXHRcImFycm93MlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MkIwNlx1RkUwRiBcIixcblx0XHRcdFwiXHUyMTk3XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTI3QTFcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjE5OFx1RkUwRiBcIixcblx0XHRcdFwiXHUyQjA3XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTIxOTlcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MkIwNVx1RkUwRiBcIixcblx0XHRcdFwiXHUyMTk2XHVGRTBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcImFycm93M1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI4XHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI5XCIsXG5cdFx0XHRcIlx1MjVCOVx1MjVCOFx1MjVCOVx1MjVCOVx1MjVCOVwiLFxuXHRcdFx0XCJcdTI1QjlcdTI1QjlcdTI1QjhcdTI1QjlcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI4XHUyNUI5XCIsXG5cdFx0XHRcIlx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOFwiXG5cdFx0XVxuXHR9LFxuXHRcImJvdW5jaW5nQmFyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiWyAgICBdXCIsXG5cdFx0XHRcIls9ICAgXVwiLFxuXHRcdFx0XCJbPT0gIF1cIixcblx0XHRcdFwiWz09PSBdXCIsXG5cdFx0XHRcIlsgPT09XVwiLFxuXHRcdFx0XCJbICA9PV1cIixcblx0XHRcdFwiWyAgID1dXCIsXG5cdFx0XHRcIlsgICAgXVwiLFxuXHRcdFx0XCJbICAgPV1cIixcblx0XHRcdFwiWyAgPT1dXCIsXG5cdFx0XHRcIlsgPT09XVwiLFxuXHRcdFx0XCJbPT09PV1cIixcblx0XHRcdFwiWz09PSBdXCIsXG5cdFx0XHRcIls9PSAgXVwiLFxuXHRcdFx0XCJbPSAgIF1cIlxuXHRcdF1cblx0fSxcblx0XCJib3VuY2luZ0JhbGxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIoIFx1MjVDRiAgICApXCIsXG5cdFx0XHRcIiggIFx1MjVDRiAgIClcIixcblx0XHRcdFwiKCAgIFx1MjVDRiAgKVwiLFxuXHRcdFx0XCIoICAgIFx1MjVDRiApXCIsXG5cdFx0XHRcIiggICAgIFx1MjVDRilcIixcblx0XHRcdFwiKCAgICBcdTI1Q0YgKVwiLFxuXHRcdFx0XCIoICAgXHUyNUNGICApXCIsXG5cdFx0XHRcIiggIFx1MjVDRiAgIClcIixcblx0XHRcdFwiKCBcdTI1Q0YgICAgKVwiLFxuXHRcdFx0XCIoXHUyNUNGICAgICApXCJcblx0XHRdXG5cdH0sXG5cdFwic21pbGV5XCI6IHtcblx0XHRcImludGVydmFsXCI6IDIwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REUwNCBcIixcblx0XHRcdFwiXHVEODNEXHVERTFEIFwiXG5cdFx0XVxuXHR9LFxuXHRcIm1vbmtleVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAzMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdURFNDggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REU0OCBcIixcblx0XHRcdFwiXHVEODNEXHVERTQ5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFNEEgXCJcblx0XHRdXG5cdH0sXG5cdFwiaGVhcnRzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REM5QiBcIixcblx0XHRcdFwiXHVEODNEXHVEQzk5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURDOUMgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REM5QSBcIixcblx0XHRcdFwiXHUyNzY0XHVGRTBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcImNsb2NrXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REQ1QiBcIixcblx0XHRcdFwiXHVEODNEXHVERDUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MiBcIixcblx0XHRcdFwiXHVEODNEXHVERDUzIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTQgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NSBcIixcblx0XHRcdFwiXHVEODNEXHVERDU2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTcgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1OCBcIixcblx0XHRcdFwiXHVEODNEXHVERDU5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENUEgXCJcblx0XHRdXG5cdH0sXG5cdFwiZWFydGhcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNDXHVERjBEIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMEUgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYwRiBcIlxuXHRcdF1cblx0fSxcblx0XCJtYXRlcmlhbFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNyxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIlxuXHRcdF1cblx0fSxcblx0XCJtb29uXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNDXHVERjExIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTIgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxMyBcIixcblx0XHRcdFwiXHVEODNDXHVERjE0IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTUgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxNiBcIixcblx0XHRcdFwiXHVEODNDXHVERjE3IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTggXCJcblx0XHRdXG5cdH0sXG5cdFwicnVubmVyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE0MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REVCNiBcIixcblx0XHRcdFwiXHVEODNDXHVERkMzIFwiXG5cdFx0XVxuXHR9LFxuXHRcInBvbmdcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1OTBcdTI4MDIgICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MFx1MjgwOCAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwIFx1MjgwMiAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgXHUyODIwICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgXHUyODQwICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4MjAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICBcdTI4MDIgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgIFx1MjgwOCAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgIFx1MjgwMiAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgXHUyODIwICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgXHUyODQwICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4MjAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICBcdTI4MDIgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgIFx1MjgwOCBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgIFx1MjgwMlx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICAgXHUyODIwXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgICBcdTI4NDBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgXHUyODIwIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICBcdTI4MDIgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgXHUyODA4ICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4MDIgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgXHUyODIwICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICBcdTI4NDAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgXHUyODIwICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICBcdTI4MDIgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgXHUyODA4ICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4MDIgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgXHUyODIwICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCBcdTI4NDAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwXHUyODIwICAgICAgIFx1MjU4Q1wiXG5cdFx0XVxuXHR9LFxuXHRcInNoYXJrXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU5MHxcXFxcX19fX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF98XFxcXF9fX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9ffFxcXFxfX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX3xcXFxcX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX198XFxcXF9fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19ffFxcXFxfX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX3xcXFxcX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX198XFxcXF9fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19ffFxcXFxfX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX3xcXFxcX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX198XFxcXF9fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19ffFxcXFxfXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19fX3xcXFxcXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19fXy98XHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19fL3xfXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX18vfF9fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fXy98X19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fL3xfX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX18vfF9fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fXy98X19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fL3xfX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX18vfF9fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fXy98X19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fL3xfX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF8vfF9fX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MC98X19fX19fX19fX19fXHUyNThDXCJcblx0XHRdXG5cdH0sXG5cdFwiZHFwYlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJkXCIsXG5cdFx0XHRcInFcIixcblx0XHRcdFwicFwiLFxuXHRcdFx0XCJiXCJcblx0XHRdXG5cdH0sXG5cdFwid2VhdGhlclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI2MDBcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIixcblx0XHRcdFwiXHUyNjAwXHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjQgXCIsXG5cdFx0XHRcIlx1MjZDNVx1RkUwRiBcIixcblx0XHRcdFwiXHVEODNDXHVERjI1IFwiLFxuXHRcdFx0XCJcdTI2MDFcdUZFMEYgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNyBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyOCBcIixcblx0XHRcdFwiXHVEODNDXHVERjI3IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjggXCIsXG5cdFx0XHRcIlx1MjZDOCBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyOCBcIixcblx0XHRcdFwiXHUyNjAxXHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjUgXCIsXG5cdFx0XHRcIlx1MjZDNVx1RkUwRiBcIixcblx0XHRcdFwiXHVEODNDXHVERjI0IFwiLFxuXHRcdFx0XCJcdTI2MDBcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIlxuXHRcdF1cblx0fSxcblx0XCJjaHJpc3RtYXNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNDAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNDXHVERjMyXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REY4NFwiXG5cdFx0XVxuXHR9LFxuXHRcImdyZW5hZGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTA2MEMgIFwiLFxuXHRcdFx0XCJcdTIwMzIgIFwiLFxuXHRcdFx0XCIgXHUwMEI0IFwiLFxuXHRcdFx0XCIgXHUyMDNFIFwiLFxuXHRcdFx0XCIgIFx1MkUwQ1wiLFxuXHRcdFx0XCIgIFx1MkUwQVwiLFxuXHRcdFx0XCIgIHxcIixcblx0XHRcdFwiICBcdTIwNEVcIixcblx0XHRcdFwiICBcdTIwNTVcIixcblx0XHRcdFwiIFx1MERGNCBcIixcblx0XHRcdFwiICBcdTIwNTNcIixcblx0XHRcdFwiICAgXCIsXG5cdFx0XHRcIiAgIFwiLFxuXHRcdFx0XCIgICBcIlxuXHRcdF1cblx0fSxcblx0XCJwb2ludFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjUsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTIyMTlcdTIyMTlcdTIyMTlcIixcblx0XHRcdFwiXHUyNUNGXHUyMjE5XHUyMjE5XCIsXG5cdFx0XHRcIlx1MjIxOVx1MjVDRlx1MjIxOVwiLFxuXHRcdFx0XCJcdTIyMTlcdTIyMTlcdTI1Q0ZcIixcblx0XHRcdFwiXHUyMjE5XHUyMjE5XHUyMjE5XCJcblx0XHRdXG5cdH0sXG5cdFwibGF5ZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCI9XCIsXG5cdFx0XHRcIlx1MjI2MVwiXG5cdFx0XVxuXHR9LFxuXHRcImJldGFXYXZlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUwM0MxXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNDMVx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQzFcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0MxXHUwM0IyXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNDMVx1MDNCMlx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQzFcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0MxXCJcblx0XHRdXG5cdH0sXG5cdFwiZmluZ2VyRGFuY2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTYwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNFXHVERDE4IFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMUYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ5NiBcIixcblx0XHRcdFwiXHUyNzBCIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMUEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REM0NiBcIlxuXHRcdF1cblx0fSxcblx0XCJmaXN0QnVtcFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUIgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUIgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUIgXCIsXG5cdFx0XHRcIlxcdTMwMDBcdUQ4M0VcdUREMUNcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQlxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDBcXHUzMDAwXHVEODNFXHVERDFDXHVEODNFXHVERDFCXFx1MzAwMFxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDBcdUQ4M0VcdUREMUNcdTI3MjhcdUQ4M0VcdUREMUJcXHUzMDAwXFx1MzAwMCBcIixcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFx1MjcyOFxcdTMwMDBcdUQ4M0VcdUREMUJcXHUzMDAwIFwiXG5cdFx0XVxuXHR9LFxuXHRcInNvY2NlckhlYWRlclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiBcdUQ4M0VcdURERDFcdTI2QkRcdUZFMEYgICAgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgIFx1MjZCRFx1RkUwRiAgICAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgXHUyNkJEXHVGRTBGICAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICBcdTI2QkRcdUZFMEYgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgIFx1MjZCRFx1RkUwRiAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgICAgXHUyNkJEXHVGRTBGICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICAgICBcdTI2QkRcdUZFMEZcdUQ4M0VcdURERDEgIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgICBcdTI2QkRcdUZFMEYgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgICBcdTI2QkRcdUZFMEYgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICBcdTI2QkRcdUZFMEYgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICBcdTI2QkRcdUZFMEYgICAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICBcdTI2QkRcdUZFMEYgICAgICBcdUQ4M0VcdURERDEgXCJcblx0XHRdXG5cdH0sXG5cdFwibWluZGJsb3duXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE2MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REUxMCBcIixcblx0XHRcdFwiXHVEODNEXHVERTEwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMkUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyRSBcIixcblx0XHRcdFwiXHVEODNEXHVERTI2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMjYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyNyBcIixcblx0XHRcdFwiXHVEODNEXHVERTI3IFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMkYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1RENBNSBcIixcblx0XHRcdFwiXHUyNzI4IFwiLFxuXHRcdFx0XCJcXHUzMDAwIFwiLFxuXHRcdFx0XCJcXHUzMDAwIFwiLFxuXHRcdFx0XCJcXHUzMDAwIFwiXG5cdFx0XVxuXHR9LFxuXHRcInNwZWFrZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTYwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDA4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMDkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQwQSBcIixcblx0XHRcdFwiXHVEODNEXHVERDA5IFwiXG5cdFx0XVxuXHR9LFxuXHRcIm9yYW5nZVB1bHNlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REQzOCBcIixcblx0XHRcdFwiXHVEODNEXHVERDM2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURGRTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REZFMCBcIixcblx0XHRcdFwiXHVEODNEXHVERDM2IFwiXG5cdFx0XVxuXHR9LFxuXHRcImJsdWVQdWxzZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdUREMzkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNyBcIixcblx0XHRcdFwiXHVEODNEXHVERDM1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNyBcIlxuXHRcdF1cblx0fSxcblx0XCJvcmFuZ2VCbHVlUHVsc2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDM4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REZFMCBcIixcblx0XHRcdFwiXHVEODNEXHVERkUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzOSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiXG5cdFx0XVxuXHR9LFxuXHRcInRpbWVUcmF2ZWxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDVCIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENUEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1OSBcIixcblx0XHRcdFwiXHVEODNEXHVERDU4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTcgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NiBcIixcblx0XHRcdFwiXHVEODNEXHVERDU1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTQgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MyBcIixcblx0XHRcdFwiXHVEODNEXHVERDUyIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MCBcIlxuXHRcdF1cblx0fSxcblx0XCJhZXN0aGV0aWNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIxXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXCJcblx0XHRdXG5cdH0sXG5cdFwiZHdhcmZGb3J0cmVzc1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0EgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQSBcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0EgXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkzXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkyXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTFcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBIFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5M1x1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkzXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTJcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkxXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQSBcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTJcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTJcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0EgXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5M1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTJcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkyXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5MVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTFcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBIFx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MyAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTIgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MiAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkxICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTEgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQSAgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQSAgJlwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQSBcdTI2M0MmXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0EgXHUyNjNDICZcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjYzQyAgJlwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI2M0MgICYgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjAzQyAgICYgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBICAgJiAgXCIsXG5cdFx0XHRcIiAgICBcdTIwM0MgICAgJiAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQSAgICAmICAgXCIsXG5cdFx0XHRcIiAgXHUyMDNDICAgICAmICAgXCIsXG5cdFx0XHRcIiBcdTI2M0EgICAgICYgICAgXCIsXG5cdFx0XHRcIlx1MjAzQyAgICAgICYgICAgXCIsXG5cdFx0XHRcIiAgICAgICYgICAgIFwiLFxuXHRcdFx0XCIgICAgICAmICAgICBcIixcblx0XHRcdFwiICAgICAmICAgXHUyNTkxICBcIixcblx0XHRcdFwiICAgICAmICAgXHUyNTkyICBcIixcblx0XHRcdFwiICAgICYgICAgXHUyNTkzICBcIixcblx0XHRcdFwiICAgICYgICAgXHUwMEEzICBcIixcblx0XHRcdFwiICAgJiAgICBcdTI1OTFcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAmICAgIFx1MjU5Mlx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgJiAgICAgXHUyNTkzXHUwMEEzICBcIixcblx0XHRcdFwiICAmICAgICBcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgJiAgICAgXHUyNTkxXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICYgICAgIFx1MjU5Mlx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiYgICAgICBcdTI1OTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCImICAgICAgXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTkxXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTkyXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTkzXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI1OTFcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjU5Mlx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNTkzXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNTkxXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjU5Mlx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI1OTNcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCJcblx0XHRdXG5cdH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHNwaW5uZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWlyZSgnLi9zcGlubmVycy5qc29uJykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9leHRlbnNpb25zXG5cbmNvbnN0IHNwaW5uZXJzTGlzdCA9IE9iamVjdC5rZXlzKHNwaW5uZXJzKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHNwaW5uZXJzLCAncmFuZG9tJywge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzcGlubmVyc0xpc3QubGVuZ3RoKTtcblx0XHRjb25zdCBzcGlubmVyTmFtZSA9IHNwaW5uZXJzTGlzdFtyYW5kb21JbmRleF07XG5cdFx0cmV0dXJuIHNwaW5uZXJzW3NwaW5uZXJOYW1lXTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3Bpbm5lcnM7XG4iLCAidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSkge1xuICB2YXIgZmlsdGVyO1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGZpbHRlciA9IGNpcmN1bGFyLmZpbHRlcjtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyXG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgaWYgKEJ1ZmZlci5hbGxvY1Vuc2FmZSkge1xuICAgICAgICAvLyBOb2RlLmpzID49IDQuNS4wXG4gICAgICAgIGNoaWxkID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT2xkZXIgTm9kZS5qcyB2ZXJzaW9uc1xuICAgICAgICBjaGlsZCA9IG5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwYXJlbnQuY29weShjaGlsZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICAgIHByb3RvID0gcHJvdG90eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgdmFyIGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7XG5cbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICByZXR1cm4gYWxsQ2hpbGRyZW5baW5kZXhdO1xuICAgICAgfVxuICAgICAgYWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICBhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHBhcmVudCkge1xuICAgICAgdmFyIGF0dHJzO1xuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIGF0dHJzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycyAmJiBhdHRycy5zZXQgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNoaWxkW2ldID0gX2Nsb25lKHBhcmVudFtpXSwgZGVwdGggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufTtcbmNsb25lLl9fb2JqVG9TdHIgPSBfX29ialRvU3RyO1xuXG5mdW5jdGlvbiBfX2lzRGF0ZShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufTtcbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufTtcbmNsb25lLl9faXNSZWdFeHAgPSBfX2lzUmVnRXhwO1xuXG5mdW5jdGlvbiBfX2dldFJlZ0V4cEZsYWdzKHJlKSB7XG4gIHZhciBmbGFncyA9ICcnO1xuICBpZiAocmUuZ2xvYmFsKSBmbGFncyArPSAnZyc7XG4gIGlmIChyZS5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XG4gIGlmIChyZS5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcbiAgcmV0dXJuIGZsYWdzO1xufTtcbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cbiIsICJ2YXIgY2xvbmUgPSByZXF1aXJlKCdjbG9uZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1trZXldID0gY2xvbmUoZGVmYXVsdHNba2V5XSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn07IiwgIm1vZHVsZS5leHBvcnRzID0gW1xuICAgIFsgMHgwMzAwLCAweDAzNkYgXSwgWyAweDA0ODMsIDB4MDQ4NiBdLCBbIDB4MDQ4OCwgMHgwNDg5IF0sXG4gICAgWyAweDA1OTEsIDB4MDVCRCBdLCBbIDB4MDVCRiwgMHgwNUJGIF0sIFsgMHgwNUMxLCAweDA1QzIgXSxcbiAgICBbIDB4MDVDNCwgMHgwNUM1IF0sIFsgMHgwNUM3LCAweDA1QzcgXSwgWyAweDA2MDAsIDB4MDYwMyBdLFxuICAgIFsgMHgwNjEwLCAweDA2MTUgXSwgWyAweDA2NEIsIDB4MDY1RSBdLCBbIDB4MDY3MCwgMHgwNjcwIF0sXG4gICAgWyAweDA2RDYsIDB4MDZFNCBdLCBbIDB4MDZFNywgMHgwNkU4IF0sIFsgMHgwNkVBLCAweDA2RUQgXSxcbiAgICBbIDB4MDcwRiwgMHgwNzBGIF0sIFsgMHgwNzExLCAweDA3MTEgXSwgWyAweDA3MzAsIDB4MDc0QSBdLFxuICAgIFsgMHgwN0E2LCAweDA3QjAgXSwgWyAweDA3RUIsIDB4MDdGMyBdLCBbIDB4MDkwMSwgMHgwOTAyIF0sXG4gICAgWyAweDA5M0MsIDB4MDkzQyBdLCBbIDB4MDk0MSwgMHgwOTQ4IF0sIFsgMHgwOTRELCAweDA5NEQgXSxcbiAgICBbIDB4MDk1MSwgMHgwOTU0IF0sIFsgMHgwOTYyLCAweDA5NjMgXSwgWyAweDA5ODEsIDB4MDk4MSBdLFxuICAgIFsgMHgwOUJDLCAweDA5QkMgXSwgWyAweDA5QzEsIDB4MDlDNCBdLCBbIDB4MDlDRCwgMHgwOUNEIF0sXG4gICAgWyAweDA5RTIsIDB4MDlFMyBdLCBbIDB4MEEwMSwgMHgwQTAyIF0sIFsgMHgwQTNDLCAweDBBM0MgXSxcbiAgICBbIDB4MEE0MSwgMHgwQTQyIF0sIFsgMHgwQTQ3LCAweDBBNDggXSwgWyAweDBBNEIsIDB4MEE0RCBdLFxuICAgIFsgMHgwQTcwLCAweDBBNzEgXSwgWyAweDBBODEsIDB4MEE4MiBdLCBbIDB4MEFCQywgMHgwQUJDIF0sXG4gICAgWyAweDBBQzEsIDB4MEFDNSBdLCBbIDB4MEFDNywgMHgwQUM4IF0sIFsgMHgwQUNELCAweDBBQ0QgXSxcbiAgICBbIDB4MEFFMiwgMHgwQUUzIF0sIFsgMHgwQjAxLCAweDBCMDEgXSwgWyAweDBCM0MsIDB4MEIzQyBdLFxuICAgIFsgMHgwQjNGLCAweDBCM0YgXSwgWyAweDBCNDEsIDB4MEI0MyBdLCBbIDB4MEI0RCwgMHgwQjREIF0sXG4gICAgWyAweDBCNTYsIDB4MEI1NiBdLCBbIDB4MEI4MiwgMHgwQjgyIF0sIFsgMHgwQkMwLCAweDBCQzAgXSxcbiAgICBbIDB4MEJDRCwgMHgwQkNEIF0sIFsgMHgwQzNFLCAweDBDNDAgXSwgWyAweDBDNDYsIDB4MEM0OCBdLFxuICAgIFsgMHgwQzRBLCAweDBDNEQgXSwgWyAweDBDNTUsIDB4MEM1NiBdLCBbIDB4MENCQywgMHgwQ0JDIF0sXG4gICAgWyAweDBDQkYsIDB4MENCRiBdLCBbIDB4MENDNiwgMHgwQ0M2IF0sIFsgMHgwQ0NDLCAweDBDQ0QgXSxcbiAgICBbIDB4MENFMiwgMHgwQ0UzIF0sIFsgMHgwRDQxLCAweDBENDMgXSwgWyAweDBENEQsIDB4MEQ0RCBdLFxuICAgIFsgMHgwRENBLCAweDBEQ0EgXSwgWyAweDBERDIsIDB4MERENCBdLCBbIDB4MERENiwgMHgwREQ2IF0sXG4gICAgWyAweDBFMzEsIDB4MEUzMSBdLCBbIDB4MEUzNCwgMHgwRTNBIF0sIFsgMHgwRTQ3LCAweDBFNEUgXSxcbiAgICBbIDB4MEVCMSwgMHgwRUIxIF0sIFsgMHgwRUI0LCAweDBFQjkgXSwgWyAweDBFQkIsIDB4MEVCQyBdLFxuICAgIFsgMHgwRUM4LCAweDBFQ0QgXSwgWyAweDBGMTgsIDB4MEYxOSBdLCBbIDB4MEYzNSwgMHgwRjM1IF0sXG4gICAgWyAweDBGMzcsIDB4MEYzNyBdLCBbIDB4MEYzOSwgMHgwRjM5IF0sIFsgMHgwRjcxLCAweDBGN0UgXSxcbiAgICBbIDB4MEY4MCwgMHgwRjg0IF0sIFsgMHgwRjg2LCAweDBGODcgXSwgWyAweDBGOTAsIDB4MEY5NyBdLFxuICAgIFsgMHgwRjk5LCAweDBGQkMgXSwgWyAweDBGQzYsIDB4MEZDNiBdLCBbIDB4MTAyRCwgMHgxMDMwIF0sXG4gICAgWyAweDEwMzIsIDB4MTAzMiBdLCBbIDB4MTAzNiwgMHgxMDM3IF0sIFsgMHgxMDM5LCAweDEwMzkgXSxcbiAgICBbIDB4MTA1OCwgMHgxMDU5IF0sIFsgMHgxMTYwLCAweDExRkYgXSwgWyAweDEzNUYsIDB4MTM1RiBdLFxuICAgIFsgMHgxNzEyLCAweDE3MTQgXSwgWyAweDE3MzIsIDB4MTczNCBdLCBbIDB4MTc1MiwgMHgxNzUzIF0sXG4gICAgWyAweDE3NzIsIDB4MTc3MyBdLCBbIDB4MTdCNCwgMHgxN0I1IF0sIFsgMHgxN0I3LCAweDE3QkQgXSxcbiAgICBbIDB4MTdDNiwgMHgxN0M2IF0sIFsgMHgxN0M5LCAweDE3RDMgXSwgWyAweDE3REQsIDB4MTdERCBdLFxuICAgIFsgMHgxODBCLCAweDE4MEQgXSwgWyAweDE4QTksIDB4MThBOSBdLCBbIDB4MTkyMCwgMHgxOTIyIF0sXG4gICAgWyAweDE5MjcsIDB4MTkyOCBdLCBbIDB4MTkzMiwgMHgxOTMyIF0sIFsgMHgxOTM5LCAweDE5M0IgXSxcbiAgICBbIDB4MUExNywgMHgxQTE4IF0sIFsgMHgxQjAwLCAweDFCMDMgXSwgWyAweDFCMzQsIDB4MUIzNCBdLFxuICAgIFsgMHgxQjM2LCAweDFCM0EgXSwgWyAweDFCM0MsIDB4MUIzQyBdLCBbIDB4MUI0MiwgMHgxQjQyIF0sXG4gICAgWyAweDFCNkIsIDB4MUI3MyBdLCBbIDB4MURDMCwgMHgxRENBIF0sIFsgMHgxREZFLCAweDFERkYgXSxcbiAgICBbIDB4MjAwQiwgMHgyMDBGIF0sIFsgMHgyMDJBLCAweDIwMkUgXSwgWyAweDIwNjAsIDB4MjA2MyBdLFxuICAgIFsgMHgyMDZBLCAweDIwNkYgXSwgWyAweDIwRDAsIDB4MjBFRiBdLCBbIDB4MzAyQSwgMHgzMDJGIF0sXG4gICAgWyAweDMwOTksIDB4MzA5QSBdLCBbIDB4QTgwNiwgMHhBODA2IF0sIFsgMHhBODBCLCAweEE4MEIgXSxcbiAgICBbIDB4QTgyNSwgMHhBODI2IF0sIFsgMHhGQjFFLCAweEZCMUUgXSwgWyAweEZFMDAsIDB4RkUwRiBdLFxuICAgIFsgMHhGRTIwLCAweEZFMjMgXSwgWyAweEZFRkYsIDB4RkVGRiBdLCBbIDB4RkZGOSwgMHhGRkZCIF0sXG4gICAgWyAweDEwQTAxLCAweDEwQTAzIF0sIFsgMHgxMEEwNSwgMHgxMEEwNiBdLCBbIDB4MTBBMEMsIDB4MTBBMEYgXSxcbiAgICBbIDB4MTBBMzgsIDB4MTBBM0EgXSwgWyAweDEwQTNGLCAweDEwQTNGIF0sIFsgMHgxRDE2NywgMHgxRDE2OSBdLFxuICAgIFsgMHgxRDE3MywgMHgxRDE4MiBdLCBbIDB4MUQxODUsIDB4MUQxOEIgXSwgWyAweDFEMUFBLCAweDFEMUFEIF0sXG4gICAgWyAweDFEMjQyLCAweDFEMjQ0IF0sIFsgMHhFMDAwMSwgMHhFMDAwMSBdLCBbIDB4RTAwMjAsIDB4RTAwN0YgXSxcbiAgICBbIDB4RTAxMDAsIDB4RTAxRUYgXVxuXVxuIiwgIlwidXNlIHN0cmljdFwiXG5cbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJ2RlZmF1bHRzJylcbnZhciBjb21iaW5pbmcgPSByZXF1aXJlKCcuL2NvbWJpbmluZycpXG5cbnZhciBERUZBVUxUUyA9IHtcbiAgbnVsOiAwLFxuICBjb250cm9sOiAwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgcmV0dXJuIHdjc3dpZHRoKHN0ciwgREVGQVVMVFMpXG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbmZpZyA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgb3B0cyA9IGRlZmF1bHRzKG9wdHMgfHwge30sIERFRkFVTFRTKVxuICByZXR1cm4gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgICByZXR1cm4gd2Nzd2lkdGgoc3RyLCBvcHRzKVxuICB9XG59XG5cbi8qXG4gKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGVmaW5lIHRoZSBjb2x1bW4gd2lkdGggb2YgYW4gSVNPIDEwNjQ2XG4gKiAgY2hhcmFjdGVyIGFzIGZvbGxvd3M6XG4gKiAgLSBUaGUgbnVsbCBjaGFyYWN0ZXIgKFUrMDAwMCkgaGFzIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBPdGhlciBDMC9DMSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIERFTCB3aWxsIGxlYWQgdG8gYSByZXR1cm4gdmFsdWVcbiAqICAgIG9mIC0xLlxuICogIC0gTm9uLXNwYWNpbmcgYW5kIGVuY2xvc2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyAoZ2VuZXJhbCBjYXRlZ29yeVxuICogICAgY29kZSBNbiBvciBNZSBpbiB0aGVcbiAqICAgIFVuaWNvZGUgZGF0YWJhc2UpIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMC5cbiAqICAtIFNPRlQgSFlQSEVOIChVKzAwQUQpIGhhcyBhIGNvbHVtbiB3aWR0aCBvZiAxLlxuICogIC0gT3RoZXIgZm9ybWF0IGNoYXJhY3RlcnMgKGdlbmVyYWwgY2F0ZWdvcnkgY29kZSBDZiBpbiB0aGUgVW5pY29kZVxuICogICAgZGF0YWJhc2UpIGFuZCBaRVJPIFdJRFRIXG4gKiAgICBTUEFDRSAoVSsyMDBCKSBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBIYW5ndWwgSmFtbyBtZWRpYWwgdm93ZWxzIGFuZCBmaW5hbCBjb25zb25hbnRzIChVKzExNjAtVSsxMUZGKVxuICogICAgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLlxuICogIC0gU3BhY2luZyBjaGFyYWN0ZXJzIGluIHRoZSBFYXN0IEFzaWFuIFdpZGUgKFcpIG9yIEVhc3QgQXNpYW5cbiAqICAgIEZ1bGwtd2lkdGggKEYpIGNhdGVnb3J5IGFzXG4gKiAgICBkZWZpbmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsIFJlcG9ydCAjMTEgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAyLlxuICogIC0gQWxsIHJlbWFpbmluZyBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgYWxsIHByaW50YWJsZSBJU08gODg1OS0xIGFuZFxuICogICAgV0dMNCBjaGFyYWN0ZXJzLCBVbmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycywgZXRjLikgaGF2ZSBhIGNvbHVtblxuICogICAgd2lkdGggb2YgMS5cbiAqICBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkIGluIElTTyAxMDY0Ni5cbiovXG5cbmZ1bmN0aW9uIHdjc3dpZHRoKHN0ciwgb3B0cykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiB3Y3dpZHRoKHN0ciwgb3B0cylcblxuICB2YXIgcyA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbiA9IHdjd2lkdGgoc3RyLmNoYXJDb2RlQXQoaSksIG9wdHMpXG4gICAgaWYgKG4gPCAwKSByZXR1cm4gLTFcbiAgICBzICs9IG5cbiAgfVxuXG4gIHJldHVybiBzXG59XG5cbmZ1bmN0aW9uIHdjd2lkdGgodWNzLCBvcHRzKSB7XG4gIC8vIHRlc3QgZm9yIDgtYml0IGNvbnRyb2wgY2hhcmFjdGVyc1xuICBpZiAodWNzID09PSAwKSByZXR1cm4gb3B0cy5udWxcbiAgaWYgKHVjcyA8IDMyIHx8ICh1Y3MgPj0gMHg3ZiAmJiB1Y3MgPCAweGEwKSkgcmV0dXJuIG9wdHMuY29udHJvbFxuXG4gIC8vIGJpbmFyeSBzZWFyY2ggaW4gdGFibGUgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVyc1xuICBpZiAoYmlzZWFyY2godWNzKSkgcmV0dXJuIDBcblxuICAvLyBpZiB3ZSBhcnJpdmUgaGVyZSwgdWNzIGlzIG5vdCBhIGNvbWJpbmluZyBvciBDMC9DMSBjb250cm9sIGNoYXJhY3RlclxuICByZXR1cm4gMSArXG4gICAgICAodWNzID49IDB4MTEwMCAmJlxuICAgICAgICh1Y3MgPD0gMHgxMTVmIHx8ICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5ndWwgSmFtbyBpbml0LiBjb25zb25hbnRzXG4gICAgICAgIHVjcyA9PSAweDIzMjkgfHwgdWNzID09IDB4MjMyYSB8fFxuICAgICAgICAodWNzID49IDB4MmU4MCAmJiB1Y3MgPD0gMHhhNGNmICYmXG4gICAgICAgICB1Y3MgIT0gMHgzMDNmKSB8fCAgICAgICAgICAgICAgICAgICAgIC8vIENKSyAuLi4gWWlcbiAgICAgICAgKHVjcyA+PSAweGFjMDAgJiYgdWNzIDw9IDB4ZDdhMykgfHwgICAgLy8gSGFuZ3VsIFN5bGxhYmxlc1xuICAgICAgICAodWNzID49IDB4ZjkwMCAmJiB1Y3MgPD0gMHhmYWZmKSB8fCAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXG4gICAgICAgICh1Y3MgPj0gMHhmZTEwICYmIHVjcyA8PSAweGZlMTkpIHx8ICAgIC8vIFZlcnRpY2FsIGZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZTMwICYmIHVjcyA8PSAweGZlNmYpIHx8ICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZjAwICYmIHVjcyA8PSAweGZmNjApIHx8ICAgIC8vIEZ1bGx3aWR0aCBGb3Jtc1xuICAgICAgICAodWNzID49IDB4ZmZlMCAmJiB1Y3MgPD0gMHhmZmU2KSB8fFxuICAgICAgICAodWNzID49IDB4MjAwMDAgJiYgdWNzIDw9IDB4MmZmZmQpIHx8XG4gICAgICAgICh1Y3MgPj0gMHgzMDAwMCAmJiB1Y3MgPD0gMHgzZmZmZCkpKTtcbn1cblxuZnVuY3Rpb24gYmlzZWFyY2godWNzKSB7XG4gIHZhciBtaW4gPSAwXG4gIHZhciBtYXggPSBjb21iaW5pbmcubGVuZ3RoIC0gMVxuICB2YXIgbWlkXG5cbiAgaWYgKHVjcyA8IGNvbWJpbmluZ1swXVswXSB8fCB1Y3MgPiBjb21iaW5pbmdbbWF4XVsxXSkgcmV0dXJuIGZhbHNlXG5cbiAgd2hpbGUgKG1heCA+PSBtaW4pIHtcbiAgICBtaWQgPSBNYXRoLmZsb29yKChtaW4gKyBtYXgpIC8gMilcbiAgICBpZiAodWNzID4gY29tYmluaW5nW21pZF1bMV0pIG1pbiA9IG1pZCArIDFcbiAgICBlbHNlIGlmICh1Y3MgPCBjb21iaW5pbmdbbWlkXVswXSkgbWF4ID0gbWlkIC0gMVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnc3RyZWFtJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJ2J1ZmZlcicpLFxuICBCdWZmZXIgPSBfcmVxdWlyZS5CdWZmZXI7XG52YXIgX3JlcXVpcmUyID0gcmVxdWlyZSgndXRpbCcpLFxuICBpbnNwZWN0ID0gX3JlcXVpcmUyLmluc3BlY3Q7XG52YXIgY3VzdG9tID0gaW5zcGVjdCAmJiBpbnNwZWN0LmN1c3RvbSB8fCAnaW5zcGVjdCc7XG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5jb3B5LmNhbGwoc3JjLCB0YXJnZXQsIG9mZnNldCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEJ1ZmZlckxpc3QsIFt7XG4gICAga2V5OiBcInB1c2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHVzaCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVuc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IHRoaXMuaGVhZFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAgIC0tdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImpvaW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gam9pbihzKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICAgICAgd2hpbGUgKHAgPSBwLm5leHQpIHJldCArPSBzICsgcC5kYXRhO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29uY2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbmNhdChuKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB3aGlsZSAocCkge1xuICAgICAgICBjb3B5QnVmZmVyKHAuZGF0YSwgcmV0LCBpKTtcbiAgICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICB9LCB7XG4gICAga2V5OiBcImNvbnN1bWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgICB2YXIgcmV0O1xuICAgICAgaWYgKG4gPCB0aGlzLmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gYHNsaWNlYCBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5ncy5cbiAgICAgICAgcmV0ID0gdGhpcy5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgICAgIHRoaXMuaGVhZC5kYXRhID0gdGhpcy5oZWFkLmRhdGEuc2xpY2Uobik7XG4gICAgICB9IGVsc2UgaWYgKG4gPT09IHRoaXMuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBGaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2guXG4gICAgICAgIHJldCA9IHRoaXMuc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlci5cbiAgICAgICAgcmV0ID0gaGFzU3RyaW5ncyA/IHRoaXMuX2dldFN0cmluZyhuKSA6IHRoaXMuX2dldEJ1ZmZlcihuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpcnN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpcnN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICAgIH1cblxuICAgIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldFN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U3RyaW5nKG4pIHtcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIGMgPSAxO1xuICAgICAgdmFyIHJldCA9IHAuZGF0YTtcbiAgICAgIG4gLT0gcmV0Lmxlbmd0aDtcbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkgcmV0ICs9IHN0cjtlbHNlIHJldCArPSBzdHIuc2xpY2UoMCwgbik7XG4gICAgICAgIG4gLT0gbmI7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHQ7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytjO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggLT0gYztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldEJ1ZmZlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0QnVmZmVyKG4pIHtcbiAgICAgIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBjID0gMTtcbiAgICAgIHAuZGF0YS5jb3B5KHJldCk7XG4gICAgICBuIC09IHAuZGF0YS5sZW5ndGg7XG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgICAgICB2YXIgbmIgPSBuID4gYnVmLmxlbmd0aCA/IGJ1Zi5sZW5ndGggOiBuO1xuICAgICAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgICAgIG4gLT0gbmI7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHQ7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG5iKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytjO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggLT0gYztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsaW5rZWQgbGlzdCBvbmx5IHNob3dzIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi5cbiAgfSwge1xuICAgIGtleTogY3VzdG9tLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAvLyBPbmx5IGluc3BlY3Qgb25lIGxldmVsLlxuICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgLy8gSXQgc2hvdWxkIG5vdCByZWN1cnNlLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG4vLyB1bmRvY3VtZW50ZWQgY2IoKSBBUEksIG5lZWRlZCBmb3IgY29yZSwgbm90IGZvciBwdWJsaWMgQVBJXG5mdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG4gIHRoaXMuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoIWNiICYmIGVycikge1xuICAgICAgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckFuZENsb3NlTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gZW1pdEVycm9yQW5kQ2xvc2VOVChzZWxmLCBlcnIpIHtcbiAgZW1pdEVycm9yTlQoc2VsZiwgZXJyKTtcbiAgZW1pdENsb3NlTlQoc2VsZik7XG59XG5mdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmKSB7XG4gIGlmIChzZWxmLl93cml0YWJsZVN0YXRlICYmICFzZWxmLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBpZiAoc2VsZi5fcmVhZGFibGVTdGF0ZSAmJiAhc2VsZi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2UpIHJldHVybjtcbiAgc2VsZi5lbWl0KCdjbG9zZScpO1xufVxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB9XG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG59XG5mdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVycikge1xuICAvLyBXZSBoYXZlIHRlc3RzIHRoYXQgcmVseSBvbiBlcnJvcnMgYmVpbmcgZW1pdHRlZFxuICAvLyBpbiB0aGUgc2FtZSB0aWNrLCBzbyBjaGFuZ2luZyB0aGlzIGlzIHNlbXZlciBtYWpvci5cbiAgLy8gRm9yIG5vdyB3aGVuIHlvdSBvcHQtaW4gdG8gYXV0b0Rlc3Ryb3kgd2UgYWxsb3dcbiAgLy8gdGhlIGVycm9yIHRvIGJlIGVtaXR0ZWQgbmV4dFRpY2suIEluIGEgZnV0dXJlXG4gIC8vIHNlbXZlciBtYWpvciB1cGRhdGUgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgZGVmYXVsdCB0byB0aGlzLlxuXG4gIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChyU3RhdGUgJiYgclN0YXRlLmF1dG9EZXN0cm95IHx8IHdTdGF0ZSAmJiB3U3RhdGUuYXV0b0Rlc3Ryb3kpIHN0cmVhbS5kZXN0cm95KGVycik7ZWxzZSBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gIHVuZGVzdHJveTogdW5kZXN0cm95LFxuICBlcnJvck9yRGVzdHJveTogZXJyb3JPckRlc3Ryb3lcbn07IiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29kZXMgPSB7fTtcblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JUeXBlKGNvZGUsIG1lc3NhZ2UsIEJhc2UpIHtcbiAgaWYgKCFCYXNlKSB7XG4gICAgQmFzZSA9IEVycm9yXG4gIH1cblxuICBmdW5jdGlvbiBnZXRNZXNzYWdlIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMylcbiAgICB9XG4gIH1cblxuICBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgc3VwZXIoZ2V0TWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKSk7XG4gICAgfVxuICB9XG5cbiAgTm9kZUVycm9yLnByb3RvdHlwZS5uYW1lID0gQmFzZS5uYW1lO1xuICBOb2RlRXJyb3IucHJvdG90eXBlLmNvZGUgPSBjb2RlO1xuXG4gIGNvZGVzW2NvZGVdID0gTm9kZUVycm9yO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92MTAuOC4wL2xpYi9pbnRlcm5hbC9lcnJvcnMuanNcbmZ1bmN0aW9uIG9uZU9mKGV4cGVjdGVkLCB0aGluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBjb25zdCBsZW4gPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5tYXAoKGkpID0+IFN0cmluZyhpKSk7XG4gICAgaWYgKGxlbiA+IDIpIHtcbiAgICAgIHJldHVybiBgb25lIG9mICR7dGhpbmd9ICR7ZXhwZWN0ZWQuc2xpY2UoMCwgbGVuIC0gMSkuam9pbignLCAnKX0sIG9yIGAgK1xuICAgICAgICAgICAgIGV4cGVjdGVkW2xlbiAtIDFdO1xuICAgIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG4gICAgICByZXR1cm4gYG9uZSBvZiAke3RoaW5nfSAke2V4cGVjdGVkWzBdfSBvciAke2V4cGVjdGVkWzFdfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgb2YgJHt0aGluZ30gJHtleHBlY3RlZFswXX1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYG9mICR7dGhpbmd9ICR7U3RyaW5nKGV4cGVjdGVkKX1gO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9zdGFydHNXaXRoXG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgc2VhcmNoLCBwb3MpIHtcblx0cmV0dXJuIHN0ci5zdWJzdHIoIXBvcyB8fCBwb3MgPCAwID8gMCA6ICtwb3MsIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG59XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9lbmRzV2l0aFxuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2gsIHRoaXNfbGVuKSB7XG5cdGlmICh0aGlzX2xlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXNfbGVuID4gc3RyLmxlbmd0aCkge1xuXHRcdHRoaXNfbGVuID0gc3RyLmxlbmd0aDtcblx0fVxuXHRyZXR1cm4gc3RyLnN1YnN0cmluZyh0aGlzX2xlbiAtIHNlYXJjaC5sZW5ndGgsIHRoaXNfbGVuKSA9PT0gc2VhcmNoO1xufVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvaW5jbHVkZXNcbmZ1bmN0aW9uIGluY2x1ZGVzKHN0ciwgc2VhcmNoLCBzdGFydCkge1xuICBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnbnVtYmVyJykge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGlmIChzdGFydCArIHNlYXJjaC5sZW5ndGggPiBzdHIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihzZWFyY2gsIHN0YXJ0KSAhPT0gLTE7XG4gIH1cbn1cblxuY3JlYXRlRXJyb3JUeXBlKCdFUlJfSU5WQUxJRF9PUFRfVkFMVUUnLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuICdUaGUgdmFsdWUgXCInICsgdmFsdWUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwiJyArIG5hbWUgKyAnXCInXG59LCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfSU5WQUxJRF9BUkdfVFlQRScsIGZ1bmN0aW9uIChuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSB7XG4gIC8vIGRldGVybWluZXI6ICdtdXN0IGJlJyBvciAnbXVzdCBub3QgYmUnXG4gIGxldCBkZXRlcm1pbmVyO1xuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyAmJiBzdGFydHNXaXRoKGV4cGVjdGVkLCAnbm90ICcpKSB7XG4gICAgZGV0ZXJtaW5lciA9ICdtdXN0IG5vdCBiZSc7XG4gICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5yZXBsYWNlKC9ebm90IC8sICcnKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRlcm1pbmVyID0gJ211c3QgYmUnO1xuICB9XG5cbiAgbGV0IG1zZztcbiAgaWYgKGVuZHNXaXRoKG5hbWUsICcgYXJndW1lbnQnKSkge1xuICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICBtc2cgPSBgVGhlICR7bmFtZX0gJHtkZXRlcm1pbmVyfSAke29uZU9mKGV4cGVjdGVkLCAndHlwZScpfWA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdHlwZSA9IGluY2x1ZGVzKG5hbWUsICcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50JztcbiAgICBtc2cgPSBgVGhlIFwiJHtuYW1lfVwiICR7dHlwZX0gJHtkZXRlcm1pbmVyfSAke29uZU9mKGV4cGVjdGVkLCAndHlwZScpfWA7XG4gIH1cblxuICBtc2cgKz0gYC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YDtcbiAgcmV0dXJuIG1zZztcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YnLCAnc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQnLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gJ1RoZSAnICsgbmFtZSArICcgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCdcbn0pO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScsICdQcmVtYXR1cmUgY2xvc2UnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gJ0Nhbm5vdCBjYWxsICcgKyBuYW1lICsgJyBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkJztcbn0pO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfTVVMVElQTEVfQ0FMTEJBQ0snLCAnQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fQ0FOTk9UX1BJUEUnLCAnQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCcsICd3cml0ZSBhZnRlciBlbmQnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUycsICdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScsIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9VTktOT1dOX0VOQ09ESU5HJywgZnVuY3Rpb24gKGFyZykge1xuICByZXR1cm4gJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBhcmdcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQnLCAnc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMuY29kZXMgPSBjb2RlcztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfSU5WQUxJRF9PUFRfVkFMVUUgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2Rlcy5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7XG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsIG9wdGlvbnMsIGR1cGxleEtleSwgaXNEdXBsZXgpIHtcbiAgdmFyIGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpO1xuICBpZiAoaHdtICE9IG51bGwpIHtcbiAgICBpZiAoIShpc0Zpbml0ZShod20pICYmIE1hdGguZmxvb3IoaHdtKSA9PT0gaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICB2YXIgbmFtZSA9IGlzRHVwbGV4ID8gZHVwbGV4S2V5IDogJ2hpZ2hXYXRlck1hcmsnO1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX09QVF9WQUxVRShuYW1lLCBod20pO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihod20pO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZVxuICByZXR1cm4gc3RhdGUub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcms6IGdldEhpZ2hXYXRlck1hcmtcbn07IiwgImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsICJ0cnkge1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiB1dGlsLmluaGVyaXRzICE9PSAnZnVuY3Rpb24nKSB0aHJvdyAnJztcbiAgbW9kdWxlLmV4cG9ydHMgPSB1dGlsLmluaGVyaXRzO1xufSBjYXRjaCAoZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW5oZXJpdHNfYnJvd3Nlci5qcycpO1xufVxuIiwgIlxuLyoqXG4gKiBGb3IgTm9kZS5qcywgc2ltcGx5IHJlLWV4cG9ydCB0aGUgY29yZSBgdXRpbC5kZXByZWNhdGVgIGZ1bmN0aW9uLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgndXRpbCcpLmRlcHJlY2F0ZTtcbiIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qIDxyZXBsYWNlbWVudD4gKi9cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICAgIG9uQ29ya2VkRmluaXNoKF90aGlzLCBzdGF0ZSk7XG4gIH07XG59XG4vKiA8L3JlcGxhY2VtZW50PiAqL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZScpLFxuICBnZXRIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuZ2V0SGlnaFdhdGVyTWFyaztcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fREVTVFJPWUVELFxuICBFUlJfU1RSRUFNX05VTExfVkFMVUVTID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxcbiAgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxcbiAgRVJSX1VOS05PV05fRU5DT0RJTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORztcbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xucmVxdWlyZSgnaW5oZXJpdHMnKShXcml0YWJsZSwgU3RyZWFtKTtcbmZ1bmN0aW9uIG5vcCgpIHt9XG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0sXG4gIC8vIGUuZy4gb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUgdnMuIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlLCBldGMuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTtcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTtcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgdGhpcy5lbWl0Q2xvc2UgPSBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpXG4gIHRoaXMuYXV0b0Rlc3Ryb3kgPSAhIW9wdGlvbnMuYXV0b0Rlc3Ryb3k7XG5cbiAgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG4gIHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3QodGhpcyk7XG59XG5Xcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gd3JpdGFibGVTdGF0ZUJ1ZmZlckdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCk7XG4gICAgICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArICdpbnN0ZWFkLicsICdERVAwMDAzJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGU7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IGZ1bmN0aW9uIHJlYWxIYXNJbnN0YW5jZShvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpcztcbiAgfTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBXcml0YWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuICB2YXIgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgRHVwbGV4O1xuICBpZiAoIWlzRHVwbGV4ICYmICFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykpIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZXYgPSBvcHRpb25zLndyaXRldjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIGVycm9yT3JEZXN0cm95KHRoaXMsIG5ldyBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFKCkpO1xufTtcbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIGVyO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBFUlJfU1RSRUFNX05VTExfVkFMVUVTKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlciddLCBjaHVuayk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgX2lzVWludDhBcnJheShjaHVuayk7XG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcbiAgaWYgKHN0YXRlLmVuZGluZykgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrO1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcbiAgICBpZiAoIXN0YXRlLndyaXRpbmcgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgfVxufTtcbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBFUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTtcbiAgfVxufSk7XG5mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKSB7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiBzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHdyaXRldiwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICBzdGF0ZS53cml0ZWNiID0gY2I7XG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlO1xuICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJykpO2Vsc2UgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpO2Vsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpO1xuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuICBpZiAoc3luYykge1xuICAgIC8vIGRlZmVyIHRoZSBjYWxsYmFjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHlcbiAgICAvLyB0byBhdm9pZCBwaWxpbmcgdXAgdGhpbmdzIG9uIHRoZSBzdGFja1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYW5kIGl0IHdpbGwgYWx3YXlzIGhhcHBlblxuICAgIC8vIGFmdGVyIGVycm9yXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGNhbGxlciBleHBlY3QgdGhpcyB0byBoYXBwZW4gYmVmb3JlIGlmXG4gICAgLy8gaXQgaXMgYXN5bmNcbiAgICBjYihlcik7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGJ1dCBmaW5pc2ggbXVzdFxuICAgIC8vIGFsd2F5cyBmb2xsb3cgZXJyb3JcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCk7XG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG4gIGlmIChlcikgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7ZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKSB8fCBzdHJlYW0uZGVzdHJveWVkO1xuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIGFsbEJ1ZmZlcnMgPSB0cnVlO1xuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgYnVmZmVyW2NvdW50XSA9IGVudHJ5O1xuICAgICAgaWYgKCFlbnRyeS5pc0J1ZikgYWxsQnVmZmVycyA9IGZhbHNlO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgYnVmZmVyLmFsbEJ1ZmZlcnMgPSBhbGxCdWZmZXJzO1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS07XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIH1cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ193cml0ZSgpJykpO1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG4gIHJldHVybiB0aGlzO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0cmVhbS5fZmluYWwoZnVuY3Rpb24gKGVycikge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKTtcbiAgICB9XG4gICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkICYmICFzdGF0ZS5maW5hbENhbGxlZCkge1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLl9maW5hbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbEZpbmFsLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgICAgICAvLyBpZiB0aGUgcmVhZGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbFxuICAgICAgICB2YXIgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICAgICAgICBpZiAoIXJTdGF0ZSB8fCByU3RhdGUuYXV0b0Rlc3Ryb3kgJiYgclN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcHJvY2Vzcy5uZXh0VGljayhjYik7ZWxzZSBzdHJlYW0ub25jZSgnZmluaXNoJywgY2IpO1xuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgc3RyZWFtLndyaXRhYmxlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfVxuXG4gIC8vIHJldXNlIHRoZSBmcmVlIGNvcmtSZXEuXG4gIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5Xcml0YWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycik7XG59OyIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBEdXBsZXg7XG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShEdXBsZXgsIFJlYWRhYmxlKTtcbntcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICB2YXIgbWV0aG9kID0ga2V5c1t2XTtcbiAgICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF07XG4gIH1cbn1cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbiAgICB9XG4gIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVCdWZmZXInLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIElmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLCB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3MubmV4dFRpY2sob25FbmROVCwgdGhpcyk7XG59XG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7IiwgIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLCAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvZW5kLW9mLXN0cmVhbSB3aXRoXG4vLyBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvciwgTWF0aGlhcyBCdXVzIChAbWFmaW50b3NoKS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2Rlcy5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtcbmZ1bmN0aW9uIG9uY2UoY2FsbGJhY2spIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59XG5mdW5jdGlvbiBub29wKCkge31cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGVvcyhzdHJlYW0sIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVvcyhzdHJlYW0sIG51bGwsIG9wdHMpO1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICB2YXIgcmVhZGFibGUgPSBvcHRzLnJlYWRhYmxlIHx8IG9wdHMucmVhZGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS5yZWFkYWJsZTtcbiAgdmFyIHdyaXRhYmxlID0gb3B0cy53cml0YWJsZSB8fCBvcHRzLndyaXRhYmxlICE9PSBmYWxzZSAmJiBzdHJlYW0ud3JpdGFibGU7XG4gIHZhciBvbmxlZ2FjeWZpbmlzaCA9IGZ1bmN0aW9uIG9ubGVnYWN5ZmluaXNoKCkge1xuICAgIGlmICghc3RyZWFtLndyaXRhYmxlKSBvbmZpbmlzaCgpO1xuICB9O1xuICB2YXIgd3JpdGFibGVFbmRlZCA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ7XG4gIHZhciBvbmZpbmlzaCA9IGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIHdyaXRhYmxlID0gZmFsc2U7XG4gICAgd3JpdGFibGVFbmRlZCA9IHRydWU7XG4gICAgaWYgKCFyZWFkYWJsZSkgY2FsbGJhY2suY2FsbChzdHJlYW0pO1xuICB9O1xuICB2YXIgcmVhZGFibGVFbmRlZCA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZDtcbiAgdmFyIG9uZW5kID0gZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgcmVhZGFibGUgPSBmYWxzZTtcbiAgICByZWFkYWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXdyaXRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG4gIHZhciBvbmVycm9yID0gZnVuY3Rpb24gb25lcnJvcihlcnIpIHtcbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgfTtcbiAgdmFyIG9uY2xvc2UgPSBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIHZhciBlcnI7XG4gICAgaWYgKHJlYWRhYmxlICYmICFyZWFkYWJsZUVuZGVkKSB7XG4gICAgICBpZiAoIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSB8fCAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSBlcnIgPSBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKTtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgICB9XG4gICAgaWYgKHdyaXRhYmxlICYmICF3cml0YWJsZUVuZGVkKSB7XG4gICAgICBpZiAoIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSB8fCAhc3RyZWFtLl93cml0YWJsZVN0YXRlLmVuZGVkKSBlcnIgPSBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKTtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgICB9XG4gIH07XG4gIHZhciBvbnJlcXVlc3QgPSBmdW5jdGlvbiBvbnJlcXVlc3QoKSB7XG4gICAgc3RyZWFtLnJlcS5vbignZmluaXNoJywgb25maW5pc2gpO1xuICB9O1xuICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgb25yZXF1ZXN0KCk7ZWxzZSBzdHJlYW0ub24oJ3JlcXVlc3QnLCBvbnJlcXVlc3QpO1xuICB9IGVsc2UgaWYgKHdyaXRhYmxlICYmICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAvLyBsZWdhY3kgc3RyZWFtc1xuICAgIHN0cmVhbS5vbignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gIH1cbiAgc3RyZWFtLm9uKCdlbmQnLCBvbmVuZCk7XG4gIHN0cmVhbS5vbignZmluaXNoJywgb25maW5pc2gpO1xuICBpZiAob3B0cy5lcnJvciAhPT0gZmFsc2UpIHN0cmVhbS5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgc3RyZWFtLm9uKCdjbG9zZScsIG9uY2xvc2UpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY29tcGxldGUnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIG9uY2xvc2UpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigncmVxdWVzdCcsIG9ucmVxdWVzdCk7XG4gICAgaWYgKHN0cmVhbS5yZXEpIHN0cmVhbS5yZXEucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGVvczsiLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxudmFyIGZpbmlzaGVkID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJyk7XG52YXIga0xhc3RSZXNvbHZlID0gU3ltYm9sKCdsYXN0UmVzb2x2ZScpO1xudmFyIGtMYXN0UmVqZWN0ID0gU3ltYm9sKCdsYXN0UmVqZWN0Jyk7XG52YXIga0Vycm9yID0gU3ltYm9sKCdlcnJvcicpO1xudmFyIGtFbmRlZCA9IFN5bWJvbCgnZW5kZWQnKTtcbnZhciBrTGFzdFByb21pc2UgPSBTeW1ib2woJ2xhc3RQcm9taXNlJyk7XG52YXIga0hhbmRsZVByb21pc2UgPSBTeW1ib2woJ2hhbmRsZVByb21pc2UnKTtcbnZhciBrU3RyZWFtID0gU3ltYm9sKCdzdHJlYW0nKTtcbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJSZXN1bHQodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZG9uZTogZG9uZVxuICB9O1xufVxuZnVuY3Rpb24gcmVhZEFuZFJlc29sdmUoaXRlcikge1xuICB2YXIgcmVzb2x2ZSA9IGl0ZXJba0xhc3RSZXNvbHZlXTtcbiAgaWYgKHJlc29sdmUgIT09IG51bGwpIHtcbiAgICB2YXIgZGF0YSA9IGl0ZXJba1N0cmVhbV0ucmVhZCgpO1xuICAgIC8vIHdlIGRlZmVyIGlmIGRhdGEgaXMgbnVsbFxuICAgIC8vIHdlIGNhbiBiZSBleHBlY3RpbmcgZWl0aGVyICdlbmQnIG9yXG4gICAgLy8gJ2Vycm9yJ1xuICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICBpdGVyW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgaXRlcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgIGl0ZXJba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25SZWFkYWJsZShpdGVyKSB7XG4gIC8vIHdlIHdhaXQgZm9yIHRoZSBuZXh0IHRpY2ssIGJlY2F1c2UgaXQgbWlnaHRcbiAgLy8gZW1pdCBhbiBlcnJvciB3aXRoIHByb2Nlc3MubmV4dFRpY2tcbiAgcHJvY2Vzcy5uZXh0VGljayhyZWFkQW5kUmVzb2x2ZSwgaXRlcik7XG59XG5mdW5jdGlvbiB3cmFwRm9yTmV4dChsYXN0UHJvbWlzZSwgaXRlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxhc3RQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGl0ZXJba0VuZGVkXSkge1xuICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZXJba0hhbmRsZVByb21pc2VdKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfTtcbn1cbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uICgpIHt9KTtcbnZhciBSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoKF9PYmplY3Qkc2V0UHJvdG90eXBlTyA9IHtcbiAgZ2V0IHN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RyZWFtXTtcbiAgfSxcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8vIGlmIHdlIGhhdmUgZGV0ZWN0ZWQgYW4gZXJyb3IgaW4gdGhlIG1lYW53aGlsZVxuICAgIC8vIHJlamVjdCBzdHJhaWdodCBhd2F5XG4gICAgdmFyIGVycm9yID0gdGhpc1trRXJyb3JdO1xuICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHRoaXNba0VuZGVkXSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH1cbiAgICBpZiAodGhpc1trU3RyZWFtXS5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gZGVmZXIgdmlhIG5leHRUaWNrIGJlY2F1c2UgaWYgLmRlc3Ryb3koZXJyKSBpc1xuICAgICAgLy8gY2FsbGVkLCB0aGUgZXJyb3Igd2lsbCBiZSBlbWl0dGVkIHZpYSBuZXh0VGljaywgYW5kXG4gICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhlcmUgaXMgbm8gZXJyb3IgbGluZ2VyaW5nIGFyb3VuZFxuICAgICAgLy8gd2FpdGluZyB0byBiZSBlbWl0dGVkLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzW2tFcnJvcl0pIHtcbiAgICAgICAgICAgIHJlamVjdChfdGhpc1trRXJyb3JdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIG11bHRpcGxlIG5leHQoKSBjYWxsc1xuICAgIC8vIHdlIHdpbGwgd2FpdCBmb3IgdGhlIHByZXZpb3VzIFByb21pc2UgdG8gZmluaXNoXG4gICAgLy8gdGhpcyBsb2dpYyBpcyBvcHRpbWl6ZWQgdG8gc3VwcG9ydCBmb3IgYXdhaXQgbG9vcHMsXG4gICAgLy8gd2hlcmUgbmV4dCgpIGlzIG9ubHkgY2FsbGVkIG9uY2UgYXQgYSB0aW1lXG4gICAgdmFyIGxhc3RQcm9taXNlID0gdGhpc1trTGFzdFByb21pc2VdO1xuICAgIHZhciBwcm9taXNlO1xuICAgIGlmIChsYXN0UHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCB0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhc3QgcGF0aCBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0aGlzLnB1c2goKVxuICAgICAgLy8gd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBuZXh0KCkgcXVldWVcbiAgICAgIHZhciBkYXRhID0gdGhpc1trU3RyZWFtXS5yZWFkKCk7XG4gICAgICBpZiAoZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSh0aGlzW2tIYW5kbGVQcm9taXNlXSk7XG4gICAgfVxuICAgIHRoaXNba0xhc3RQcm9taXNlXSA9IHByb21pc2U7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cbn0sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFwicmV0dXJuXCIsIGZ1bmN0aW9uIF9yZXR1cm4oKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuICAvLyBkZXN0cm95KGVyciwgY2IpIGlzIGEgcHJpdmF0ZSBBUElcbiAgLy8gd2UgY2FuIGd1YXJhbnRlZSB3ZSBoYXZlIHRoYXQgaGVyZSwgYmVjYXVzZSB3ZSBjb250cm9sIHRoZVxuICAvLyBSZWFkYWJsZSBjbGFzcyB0aGlzIGlzIGF0dGFjaGVkIHRvXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgX3RoaXMyW2tTdHJlYW1dLmRlc3Ryb3kobnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH0pO1xuICB9KTtcbn0pLCBfT2JqZWN0JHNldFByb3RvdHlwZU8pLCBBc3luY0l0ZXJhdG9yUHJvdG90eXBlKTtcbnZhciBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSBmdW5jdGlvbiBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3Ioc3RyZWFtKSB7XG4gIHZhciBfT2JqZWN0JGNyZWF0ZTtcbiAgdmFyIGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIChfT2JqZWN0JGNyZWF0ZSA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtTdHJlYW0sIHtcbiAgICB2YWx1ZTogc3RyZWFtLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtMYXN0UmVzb2x2ZSwge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtMYXN0UmVqZWN0LCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0Vycm9yLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0VuZGVkLCB7XG4gICAgdmFsdWU6IHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtIYW5kbGVQcm9taXNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGRhdGEgPSBpdGVyYXRvcltrU3RyZWFtXS5yZWFkKCk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IHJlc29sdmU7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IHJlamVjdDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfT2JqZWN0JGNyZWF0ZSkpO1xuICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgZmluaXNoZWQoc3RyZWFtLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSAhPT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykge1xuICAgICAgdmFyIHJlamVjdCA9IGl0ZXJhdG9yW2tMYXN0UmVqZWN0XTtcbiAgICAgIC8vIHJlamVjdCBpZiB3ZSBhcmUgd2FpdGluZyBmb3IgZGF0YSBpbiB0aGUgUHJvbWlzZVxuICAgICAgLy8gcmV0dXJuZWQgYnkgbmV4dCgpIGFuZCBzdG9yZSB0aGUgZXJyb3JcbiAgICAgIGlmIChyZWplY3QgIT09IG51bGwpIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIGl0ZXJhdG9yW2tFcnJvcl0gPSBlcnI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByZXNvbHZlID0gaXRlcmF0b3Jba0xhc3RSZXNvbHZlXTtcbiAgICBpZiAocmVzb2x2ZSAhPT0gbnVsbCkge1xuICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yW2tFbmRlZF0gPSB0cnVlO1xuICB9KTtcbiAgc3RyZWFtLm9uKCdyZWFkYWJsZScsIG9uUmVhZGFibGUuYmluZChudWxsLCBpdGVyYXRvcikpO1xuICByZXR1cm4gaXRlcmF0b3I7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I7IiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbnZhciBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO1xuZnVuY3Rpb24gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpIHtcbiAgdmFyIGl0ZXJhdG9yO1xuICBpZiAoaXRlcmFibGUgJiYgdHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtlbHNlIGlmIChpdGVyYWJsZSAmJiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKSBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnaXRlcmFibGUnLCBbJ0l0ZXJhYmxlJ10sIGl0ZXJhYmxlKTtcbiAgdmFyIHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKF9vYmplY3RTcHJlYWQoe1xuICAgIG9iamVjdE1vZGU6IHRydWVcbiAgfSwgb3B0cykpO1xuICAvLyBSZWFkaW5nIGJvb2xlYW4gdG8gcHJvdGVjdCBhZ2FpbnN0IF9yZWFkXG4gIC8vIGJlaW5nIGNhbGxlZCBiZWZvcmUgbGFzdCBpdGVyYXRpb24gY29tcGxldGlvbi5cbiAgdmFyIHJlYWRpbmcgPSBmYWxzZTtcbiAgcmVhZGFibGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFyZWFkaW5nKSB7XG4gICAgICByZWFkaW5nID0gdHJ1ZTtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgcmV0dXJuIF9uZXh0Mi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIGZ1bmN0aW9uIF9uZXh0MigpIHtcbiAgICBfbmV4dDIgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIF95aWVsZCRpdGVyYXRvciRuZXh0ID0geWllbGQgaXRlcmF0b3IubmV4dCgpLFxuICAgICAgICAgIHZhbHVlID0gX3lpZWxkJGl0ZXJhdG9yJG5leHQudmFsdWUsXG4gICAgICAgICAgZG9uZSA9IF95aWVsZCRpdGVyYXRvciRuZXh0LmRvbmU7XG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcmVhZGFibGUucHVzaChudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZWFkYWJsZS5wdXNoKHlpZWxkIHZhbHVlKSkge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWFkYWJsZS5kZXN0cm95KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF9uZXh0Mi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiByZWFkYWJsZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZnJvbTtcbiIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBFRWxpc3RlbmVyQ291bnQoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZztcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gZGVidWcoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZScpLFxuICBnZXRIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuZ2V0SGlnaFdhdGVyTWFyaztcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7XG5cbi8vIExhenkgbG9hZGVkIHRvIGltcHJvdmUgdGhlIHN0YXJ0dXAgcGVyZm9ybWFuY2UuXG52YXIgU3RyaW5nRGVjb2RlcjtcbnZhciBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I7XG52YXIgZnJvbTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoUmVhZGFibGUsIFN0cmVhbSk7XG52YXIgZXJyb3JPckRlc3Ryb3kgPSBkZXN0cm95SW1wbC5lcnJvck9yRGVzdHJveTtcbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChBcnJheS5pc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5XG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIHRoaXMuZW1pdENsb3NlID0gb3B0aW9ucy5lbWl0Q2xvc2UgIT09IGZhbHNlO1xuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZW5kJyAoYW5kIHBvdGVudGlhbGx5ICdmaW5pc2gnKVxuICB0aGlzLmF1dG9EZXN0cm95ID0gISFvcHRpb25zLmF1dG9EZXN0cm95O1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBSZWFkYWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuICB2YXIgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgRHVwbGV4O1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcywgaXNEdXBsZXgpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICAgIH1cbiAgICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICB9XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIGRlYnVnKCdyZWFkYWJsZUFkZENodW5rJywgY2h1bmspO1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcjtcbiAgICBpZiAoIXNraXBDaHVua0NoZWNrKSBlciA9IGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspO1xuICAgIGlmIChlcikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZGRUb0Zyb250KSB7XG4gICAgICAgIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UKCkpO2Vsc2UgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRlZCkge1xuICAgICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhZW5jb2RpbmcpIHtcbiAgICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuICAgICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTtlbHNlIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgY2FuIHB1c2ggbW9yZSBkYXRhIGlmIHdlIGFyZSBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyay5cbiAgLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWUgbW9yZSBieXRlcy5cbiAgLy8gVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCwgc3VjaCBhcyB0aGUgcmVwbC5cbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGFkZFRvRnJvbnQpIHtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspO1xuICB9XG4gIHJldHVybiBlcjtcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59O1xuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdmFyIGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBkZWNvZGVyO1xuICAvLyBJZiBzZXRFbmNvZGluZyhudWxsKSwgZGVjb2Rlci5lbmNvZGluZyBlcXVhbHMgdXRmOFxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciBjdXJyZW50IGJ1ZmZlciB0byBjb252ZXJ0IGFscmVhZHkgc3RvcmVkIEJ1ZmZlcnM6XG4gIHZhciBwID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZDtcbiAgdmFyIGNvbnRlbnQgPSAnJztcbiAgd2hpbGUgKHAgIT09IG51bGwpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUocC5kYXRhKTtcbiAgICBwID0gcC5uZXh0O1xuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCk7XG4gIGlmIChjb250ZW50ICE9PSAnJykgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChjb250ZW50KTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gMUdCXG52YXIgTUFYX0hXTSA9IDB4NDAwMDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICAvLyBUT0RPKHJvbmFnKTogVGhyb3cgRVJSX1ZBTFVFX09VVF9PRl9SQU5HRS5cbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcbiAgaWYgKG4gIT09IDApIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUubmVlZFJlYWRhYmxlICYmICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG4gIHZhciByZXQ7XG4gIGlmIChuID4gMCkgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO2Vsc2UgcmV0ID0gbnVsbDtcbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICAgIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICB9XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO1xuICB9XG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG4gIHJldHVybiByZXQ7XG59O1xuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdvbkVvZkNodW5rJyk7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIGlmIChzdGF0ZS5zeW5jKSB7XG4gICAgLy8gaWYgd2UgYXJlIHN5bmMsIHdhaXQgdW50aWwgbmV4dCB0aWNrIHRvIGVtaXQgdGhlIGRhdGEuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIHJpc2sgZW1pdHRpbmcgZGF0YSBpbiB0aGUgZmxvdygpXG4gICAgLy8gdGhlIHJlYWRhYmxlIGNvZGUgdHJpZ2dlcnMgZHVyaW5nIGEgcmVhZCgpIGNhbGxcbiAgICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUubmVlZFJlYWRhYmxlLCBzdGF0ZS5lbWl0dGVkUmVhZGFibGUpO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZV8nLCBzdGF0ZS5kZXN0cm95ZWQsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICBpZiAoIXN0YXRlLmRlc3Ryb3llZCAmJiAoc3RhdGUubGVuZ3RoIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gVGhlIHN0cmVhbSBuZWVkcyBhbm90aGVyIHJlYWRhYmxlIGV2ZW50IGlmXG4gIC8vIDEuIEl0IGlzIG5vdCBmbG93aW5nLCBhcyB0aGUgZmxvdyBtZWNoYW5pc20gd2lsbCB0YWtlXG4gIC8vICAgIGNhcmUgb2YgaXQuXG4gIC8vIDIuIEl0IGlzIG5vdCBlbmRlZC5cbiAgLy8gMy4gSXQgaXMgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmssIHNvIHdlIGNhbiBzY2hlZHVsZVxuICAvLyAgICBhbm90aGVyIHJlYWRhYmxlIGxhdGVyLlxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgdGhlIHN0cmVhbSBoYXMgY2FsbGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIF9yZWFkKClcbiAgLy8gICBtZXRob2QsIGJ1dCB0aGV5IGFyZSBwcm9jZXNzaW5nIHRoZSBjYWxsIGFzeW5jaHJvbm91c2x5IGFuZCBoYXZlIF9ub3RfXG4gIC8vICAgY2FsbGVkIHB1c2goKSB3aXRoIG5ldyBkYXRhLiBJbiB0aGlzIGNhc2Ugd2Ugc2tpcCBwZXJmb3JtaW5nIG1vcmVcbiAgLy8gICByZWFkKClzLiBUaGUgZXhlY3V0aW9uIGVuZHMgaW4gdGhpcyBtZXRob2QgYWdhaW4gYWZ0ZXIgdGhlIF9yZWFkKCkgZW5kc1xuICAvLyAgIHVwIGNhbGxpbmcgcHVzaCgpIHdpdGggbW9yZSBkYXRhLlxuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSkge1xuICAgIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfcmVhZCgpJykpO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIHBpcGVPcHRzKSB7XG4gIHZhciBzcmMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZTtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KTtcbiAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuICByZXR1cm4gZGVzdDtcbn07XG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKSBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0ge1xuICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gIH07XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7XG4gICAgICBoYXNVbnBpcGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyB1cGRhdGUgcmVhZGFibGVMaXN0ZW5pbmcgc28gdGhhdCByZXN1bWUoKSBtYXkgYmUgYSBuby1vcFxuICAgIC8vIGEgZmV3IGxpbmVzIGRvd24uIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgb25jZSgncmVhZGFibGUnKS5cbiAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDA7XG5cbiAgICAvLyBUcnkgc3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpO1xuICAgICAgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsIGV2LCBmbik7XG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJyB8fCBldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lb25lIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHJlYWRhYmxlIGFuZCByZXNldCB0aGUgc3RhdGUuIEhvd2V2ZXIgdGhpcyBuZWVkcyB0byBoYXBwZW5cbiAgICAvLyBhZnRlciByZWFkYWJsZSBoYXMgYmVlbiBlbWl0dGVkIGJ1dCBiZWZvcmUgSS9PIChuZXh0VGljaykgdG9cbiAgICAvLyBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJywgZm4pIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAvLyByZXN1bWUgd2l0aGluIHRoZSBzYW1lIHRpY2sgd2lsbCBoYXZlIG5vXG4gICAgLy8gZWZmZWN0LlxuICAgIHByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsIHRoaXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuZnVuY3Rpb24gdXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcoc2VsZikge1xuICB2YXIgc3RhdGUgPSBzZWxmLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHNlbGYubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDA7XG4gIGlmIChzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgJiYgIXN0YXRlLnBhdXNlZCkge1xuICAgIC8vIGZsb3dpbmcgbmVlZHMgdG8gYmUgc2V0IHRvIHRydWUgbm93LCBvdGhlcndpc2VcbiAgICAvLyB0aGUgdXBjb21pbmcgcmVzdW1lIHdpbGwgbm90IGZsb3cuXG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG5cbiAgICAvLyBjcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZVxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIC8vIHdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKClcbiAgICBzdGF0ZS5mbG93aW5nID0gIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gIHJldHVybiB0aGlzO1xufTtcbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ3Jlc3VtZScsIHN0YXRlLnJlYWRpbmcpO1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ2NhbGwgcGF1c2UgZmxvd2luZz0laicsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7XG4gICAgZGVidWcoJ3BhdXNlJyk7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpO1xuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKTtcbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZW5kJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkgX3RoaXMucHVzaChjaHVuayk7XG4gICAgfVxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG4gICAgdmFyIHJldCA9IF90aGlzLnB1c2goY2h1bmspO1xuICAgIGlmICghcmV0KSB7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBmb3IgKHZhciBpIGluIHN0cmVhbSkge1xuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IGZ1bmN0aW9uIG1ldGhvZFdyYXAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXRob2RXcmFwUmV0dXJuRnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHRoaXMuZW1pdC5iaW5kKHRoaXMsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0aGlzO1xufTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3InKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih0aGlzKTtcbiAgfTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVGbG93aW5nJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldChzdGF0ZSkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBzdGF0ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZFxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuZmlyc3QoKTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG4sIHN0YXRlLmRlY29kZXIpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW5kUmVhZGFibGUnLCBzdGF0ZS5lbmRFbWl0dGVkKTtcbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsIHN0cmVhbSkge1xuICBkZWJ1ZygnZW5kUmVhZGFibGVOVCcsIHN0YXRlLmVuZEVtaXR0ZWQsIHN0YXRlLmxlbmd0aCk7XG5cbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAvLyBpZiB0aGUgd3JpdGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbFxuICAgICAgdmFyIHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgICAgIGlmICghd1N0YXRlIHx8IHdTdGF0ZS5hdXRvRGVzdHJveSAmJiB3U3RhdGUuZmluaXNoZWQpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLmZyb20gPSBmdW5jdGlvbiAoaXRlcmFibGUsIG9wdHMpIHtcbiAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcm9tID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb20oUmVhZGFibGUsIGl0ZXJhYmxlLCBvcHRzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLCAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLFxuICBFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzA7XG52YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShUcmFuc2Zvcm0sIER1cGxleCk7XG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlciwgZGF0YSkge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG4gIGlmIChjYiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKTtcbiAgfVxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuICBjYihlcik7XG4gIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJzLnJlYWRpbmcgPSBmYWxzZTtcbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSB7XG4gICAgYWZ0ZXJUcmFuc2Zvcm06IGFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksXG4gICAgbmVlZFRyYW5zZm9ybTogZmFsc2UsXG4gICAgdHJhbnNmb3JtaW5nOiBmYWxzZSxcbiAgICB3cml0ZWNiOiBudWxsLFxuICAgIHdyaXRlY2h1bms6IG51bGwsXG4gICAgd3JpdGVlbmNvZGluZzogbnVsbFxuICB9O1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoX3RoaXMsIGVyLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKHRoaXMsIG51bGwsIG51bGwpO1xuICB9XG59XG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfdHJhbnNmb3JtKCknKSk7XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLCB0cy53cml0ZWVuY29kaW5nLCB0cy5hZnRlclRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbWFyayB0aGF0IHdlIG5lZWQgYSB0cmFuc2Zvcm0sIHNvIHRoYXQgYW55IGRhdGEgdGhhdCBjb21lcyBpblxuICAgIC8vIHdpbGwgZ2V0IHByb2Nlc3NlZCwgbm93IHRoYXQgd2UndmUgYXNrZWQgZm9yIGl0LlxuICAgIHRzLm5lZWRUcmFuc2Zvcm0gPSB0cnVlO1xuICB9XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gVE9ETyhCcmlkZ2VBUik6IFdyaXRlIGEgdGVzdCBmb3IgdGhlc2UgdHdvIGVycm9yIGNhc2VzXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUubGVuZ3RoKSB0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wKCk7XG4gIGlmIChzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcoKTtcbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufSIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9wdW1wIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlb3M7XG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH07XG59XG52YXIgX3JlcXVpcmUkY29kZXMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2RlcyxcbiAgRVJSX01JU1NJTkdfQVJHUyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NSVNTSU5HX0FSR1MsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7XG5mdW5jdGlvbiBub29wKGVycikge1xuICAvLyBSZXRocm93IHRoZSBlcnJvciBpZiBpdCBleGlzdHMgdG8gYXZvaWQgc3dhbGxvd2luZyBpdFxuICBpZiAoZXJyKSB0aHJvdyBlcnI7XG59XG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICB2YXIgY2xvc2VkID0gZmFsc2U7XG4gIHN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChlb3MgPT09IHVuZGVmaW5lZCkgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJyk7XG4gIGVvcyhzdHJlYW0sIHtcbiAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICB3cml0YWJsZTogd3JpdGluZ1xuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjYWxsYmFjaygpO1xuICB9KTtcbiAgdmFyIGRlc3Ryb3llZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICBpZiAoZGVzdHJveWVkKSByZXR1cm47XG4gICAgZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIC8vIHJlcXVlc3QuZGVzdHJveSBqdXN0IGRvIC5lbmQgLSAuYWJvcnQgaXMgd2hhdCB3ZSB3YW50XG4gICAgaWYgKGlzUmVxdWVzdChzdHJlYW0pKSByZXR1cm4gc3RyZWFtLmFib3J0KCk7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgY2FsbGJhY2soZXJyIHx8IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgncGlwZScpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNhbGwoZm4pIHtcbiAgZm4oKTtcbn1cbmZ1bmN0aW9uIHBpcGUoZnJvbSwgdG8pIHtcbiAgcmV0dXJuIGZyb20ucGlwZSh0byk7XG59XG5mdW5jdGlvbiBwb3BDYWxsYmFjayhzdHJlYW1zKSB7XG4gIGlmICghc3RyZWFtcy5sZW5ndGgpIHJldHVybiBub29wO1xuICBpZiAodHlwZW9mIHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG5vb3A7XG4gIHJldHVybiBzdHJlYW1zLnBvcCgpO1xufVxuZnVuY3Rpb24gcGlwZWxpbmUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdHJlYW1zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHN0cmVhbXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgdmFyIGNhbGxiYWNrID0gcG9wQ2FsbGJhY2soc3RyZWFtcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHN0cmVhbXNbMF0pKSBzdHJlYW1zID0gc3RyZWFtc1swXTtcbiAgaWYgKHN0cmVhbXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJyk7XG4gIH1cbiAgdmFyIGVycm9yO1xuICB2YXIgZGVzdHJveXMgPSBzdHJlYW1zLm1hcChmdW5jdGlvbiAoc3RyZWFtLCBpKSB7XG4gICAgdmFyIHJlYWRpbmcgPSBpIDwgc3RyZWFtcy5sZW5ndGggLSAxO1xuICAgIHZhciB3cml0aW5nID0gaSA+IDA7XG4gICAgcmV0dXJuIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuICAgICAgaWYgKGVycikgZGVzdHJveXMuZm9yRWFjaChjYWxsKTtcbiAgICAgIGlmIChyZWFkaW5nKSByZXR1cm47XG4gICAgICBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHN0cmVhbXMucmVkdWNlKHBpcGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBwaXBlbGluZTsiLCAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuaWYgKHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnICYmIFN0cmVhbSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgT2JqZWN0LmFzc2lnbihtb2R1bGUuZXhwb3J0cywgU3RyZWFtKTtcbiAgbW9kdWxlLmV4cG9ydHMuU3RyZWFtID0gU3RyZWFtO1xufSBlbHNlIHtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbSB8fCBleHBvcnRzO1xuICBleHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbiAgZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG4gIGV4cG9ydHMuZmluaXNoZWQgPSByZXF1aXJlKCcuL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMnKTtcbiAgZXhwb3J0cy5waXBlbGluZSA9IHJlcXVpcmUoJy4vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBzeW1ib2wgPSBTeW1ib2wuZm9yKCdCdWZmZXJMaXN0JylcblxuZnVuY3Rpb24gQnVmZmVyTGlzdCAoYnVmKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXJMaXN0KSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyTGlzdChidWYpXG4gIH1cblxuICBCdWZmZXJMaXN0Ll9pbml0LmNhbGwodGhpcywgYnVmKVxufVxuXG5CdWZmZXJMaXN0Ll9pbml0ID0gZnVuY3Rpb24gX2luaXQgKGJ1Zikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pXG5cbiAgdGhpcy5fYnVmcyA9IFtdXG4gIHRoaXMubGVuZ3RoID0gMFxuXG4gIGlmIChidWYpIHtcbiAgICB0aGlzLmFwcGVuZChidWYpXG4gIH1cbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX25ldyA9IGZ1bmN0aW9uIF9uZXcgKGJ1Zikge1xuICByZXR1cm4gbmV3IEJ1ZmZlckxpc3QoYnVmKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fb2Zmc2V0ID0gZnVuY3Rpb24gX29mZnNldCAob2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICByZXR1cm4gWzAsIDBdXG4gIH1cblxuICBsZXQgdG90ID0gMFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IF90ID0gdG90ICsgdGhpcy5fYnVmc1tpXS5sZW5ndGhcbiAgICBpZiAob2Zmc2V0IDwgX3QgfHwgaSA9PT0gdGhpcy5fYnVmcy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gW2ksIG9mZnNldCAtIHRvdF1cbiAgICB9XG4gICAgdG90ID0gX3RcbiAgfVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fcmV2ZXJzZU9mZnNldCA9IGZ1bmN0aW9uIChibE9mZnNldCkge1xuICBjb25zdCBidWZmZXJJZCA9IGJsT2Zmc2V0WzBdXG4gIGxldCBvZmZzZXQgPSBibE9mZnNldFsxXVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVySWQ7IGkrKykge1xuICAgIG9mZnNldCArPSB0aGlzLl9idWZzW2ldLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG9mZnNldFxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGluZGV4KSB7XG4gIGlmIChpbmRleCA+IHRoaXMubGVuZ3RoIHx8IGluZGV4IDwgMCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0IG9mZnNldCA9IHRoaXMuX29mZnNldChpbmRleClcblxuICByZXR1cm4gdGhpcy5fYnVmc1tvZmZzZXRbMF1dW29mZnNldFsxXV1cbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnbnVtYmVyJyAmJiBzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHR5cGVvZiBlbmQgPT09ICdudW1iZXInICYmIGVuZCA8IDApIHtcbiAgICBlbmQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGlzLmNvcHkobnVsbCwgMCwgc3RhcnQsIGVuZClcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRzdCwgZHN0U3RhcnQsIHNyY1N0YXJ0LCBzcmNFbmQpIHtcbiAgaWYgKHR5cGVvZiBzcmNTdGFydCAhPT0gJ251bWJlcicgfHwgc3JjU3RhcnQgPCAwKSB7XG4gICAgc3JjU3RhcnQgPSAwXG4gIH1cblxuICBpZiAodHlwZW9mIHNyY0VuZCAhPT0gJ251bWJlcicgfHwgc3JjRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBzcmNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHNyY1N0YXJ0ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGRzdCB8fCBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIGlmIChzcmNFbmQgPD0gMCkge1xuICAgIHJldHVybiBkc3QgfHwgQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICBjb25zdCBjb3B5ID0gISFkc3RcbiAgY29uc3Qgb2ZmID0gdGhpcy5fb2Zmc2V0KHNyY1N0YXJ0KVxuICBjb25zdCBsZW4gPSBzcmNFbmQgLSBzcmNTdGFydFxuICBsZXQgYnl0ZXMgPSBsZW5cbiAgbGV0IGJ1Zm9mZiA9IChjb3B5ICYmIGRzdFN0YXJ0KSB8fCAwXG4gIGxldCBzdGFydCA9IG9mZlsxXVxuXG4gIC8vIGNvcHkvc2xpY2UgZXZlcnl0aGluZ1xuICBpZiAoc3JjU3RhcnQgPT09IDAgJiYgc3JjRW5kID09PSB0aGlzLmxlbmd0aCkge1xuICAgIGlmICghY29weSkge1xuICAgICAgLy8gc2xpY2UsIGJ1dCBmdWxsIGNvbmNhdCBpZiBtdWx0aXBsZSBidWZmZXJzXG4gICAgICByZXR1cm4gdGhpcy5fYnVmcy5sZW5ndGggPT09IDFcbiAgICAgICAgPyB0aGlzLl9idWZzWzBdXG4gICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzLl9idWZzLCB0aGlzLmxlbmd0aClcbiAgICB9XG5cbiAgICAvLyBjb3B5LCBuZWVkIHRvIGNvcHkgaW5kaXZpZHVhbCBidWZmZXJzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9idWZzW2ldLmNvcHkoZHN0LCBidWZvZmYpXG4gICAgICBidWZvZmYgKz0gdGhpcy5fYnVmc1tpXS5sZW5ndGhcbiAgICB9XG5cbiAgICByZXR1cm4gZHN0XG4gIH1cblxuICAvLyBlYXN5LCBjaGVhcCBjYXNlIHdoZXJlIGl0J3MgYSBzdWJzZXQgb2Ygb25lIG9mIHRoZSBidWZmZXJzXG4gIGlmIChieXRlcyA8PSB0aGlzLl9idWZzW29mZlswXV0ubGVuZ3RoIC0gc3RhcnQpIHtcbiAgICByZXR1cm4gY29weVxuICAgICAgPyB0aGlzLl9idWZzW29mZlswXV0uY29weShkc3QsIGRzdFN0YXJ0LCBzdGFydCwgc3RhcnQgKyBieXRlcylcbiAgICAgIDogdGhpcy5fYnVmc1tvZmZbMF1dLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKVxuICB9XG5cbiAgaWYgKCFjb3B5KSB7XG4gICAgLy8gYSBzbGljZSwgd2UgbmVlZCBzb21ldGhpbmcgdG8gY29weSBpbiB0b1xuICAgIGRzdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pXG4gIH1cblxuICBmb3IgKGxldCBpID0gb2ZmWzBdOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGwgPSB0aGlzLl9idWZzW2ldLmxlbmd0aCAtIHN0YXJ0XG5cbiAgICBpZiAoYnl0ZXMgPiBsKSB7XG4gICAgICB0aGlzLl9idWZzW2ldLmNvcHkoZHN0LCBidWZvZmYsIHN0YXJ0KVxuICAgICAgYnVmb2ZmICs9IGxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYnVmc1tpXS5jb3B5KGRzdCwgYnVmb2ZmLCBzdGFydCwgc3RhcnQgKyBieXRlcylcbiAgICAgIGJ1Zm9mZiArPSBsXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGJ5dGVzIC09IGxcblxuICAgIGlmIChzdGFydCkge1xuICAgICAgc3RhcnQgPSAwXG4gICAgfVxuICB9XG5cbiAgLy8gc2FmZWd1YXJkIHNvIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5XG4gIGlmIChkc3QubGVuZ3RoID4gYnVmb2ZmKSByZXR1cm4gZHN0LnNsaWNlKDAsIGJ1Zm9mZilcblxuICByZXR1cm4gZHN0XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnNoYWxsb3dTbGljZSA9IGZ1bmN0aW9uIHNoYWxsb3dTbGljZSAoc3RhcnQsIGVuZCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDBcbiAgZW5kID0gdHlwZW9mIGVuZCAhPT0gJ251bWJlcicgPyB0aGlzLmxlbmd0aCA6IGVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgcmV0dXJuIHRoaXMuX25ldygpXG4gIH1cblxuICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMuX29mZnNldChzdGFydClcbiAgY29uc3QgZW5kT2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KGVuZClcbiAgY29uc3QgYnVmZmVycyA9IHRoaXMuX2J1ZnMuc2xpY2Uoc3RhcnRPZmZzZXRbMF0sIGVuZE9mZnNldFswXSArIDEpXG5cbiAgaWYgKGVuZE9mZnNldFsxXSA9PT0gMCkge1xuICAgIGJ1ZmZlcnMucG9wKClcbiAgfSBlbHNlIHtcbiAgICBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0gPSBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0uc2xpY2UoMCwgZW5kT2Zmc2V0WzFdKVxuICB9XG5cbiAgaWYgKHN0YXJ0T2Zmc2V0WzFdICE9PSAwKSB7XG4gICAgYnVmZmVyc1swXSA9IGJ1ZmZlcnNbMF0uc2xpY2Uoc3RhcnRPZmZzZXRbMV0pXG4gIH1cblxuICByZXR1cm4gdGhpcy5fbmV3KGJ1ZmZlcnMpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLnRvU3RyaW5nKGVuY29kaW5nKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24gY29uc3VtZSAoYnl0ZXMpIHtcbiAgLy8gZmlyc3QsIG5vcm1hbGl6ZSB0aGUgYXJndW1lbnQsIGluIGFjY29yZGFuY2Ugd2l0aCBob3cgQnVmZmVyIGRvZXMgaXRcbiAgYnl0ZXMgPSBNYXRoLnRydW5jKGJ5dGVzKVxuICAvLyBkbyBub3RoaW5nIGlmIG5vdCBhIHBvc2l0aXZlIG51bWJlclxuICBpZiAoTnVtYmVyLmlzTmFOKGJ5dGVzKSB8fCBieXRlcyA8PSAwKSByZXR1cm4gdGhpc1xuXG4gIHdoaWxlICh0aGlzLl9idWZzLmxlbmd0aCkge1xuICAgIGlmIChieXRlcyA+PSB0aGlzLl9idWZzWzBdLmxlbmd0aCkge1xuICAgICAgYnl0ZXMgLT0gdGhpcy5fYnVmc1swXS5sZW5ndGhcbiAgICAgIHRoaXMubGVuZ3RoIC09IHRoaXMuX2J1ZnNbMF0ubGVuZ3RoXG4gICAgICB0aGlzLl9idWZzLnNoaWZ0KClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYnVmc1swXSA9IHRoaXMuX2J1ZnNbMF0uc2xpY2UoYnl0ZXMpXG4gICAgICB0aGlzLmxlbmd0aCAtPSBieXRlc1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5kdXBsaWNhdGUgPSBmdW5jdGlvbiBkdXBsaWNhdGUgKCkge1xuICBjb25zdCBjb3B5ID0gdGhpcy5fbmV3KClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3B5LmFwcGVuZCh0aGlzLl9idWZzW2ldKVxuICB9XG5cbiAgcmV0dXJuIGNvcHlcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kIChidWYpIHtcbiAgaWYgKGJ1ZiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGlmIChidWYuYnVmZmVyKSB7XG4gICAgLy8gYXBwZW5kIGEgdmlldyBvZiB0aGUgdW5kZXJseWluZyBBcnJheUJ1ZmZlclxuICAgIHRoaXMuX2FwcGVuZEJ1ZmZlcihCdWZmZXIuZnJvbShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYnVmKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFwcGVuZChidWZbaV0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHRoaXMuX2lzQnVmZmVyTGlzdChidWYpKSB7XG4gICAgLy8gdW53cmFwIGFyZ3VtZW50IGludG8gaW5kaXZpZHVhbCBCdWZmZXJMaXN0c1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFwcGVuZChidWYuX2J1ZnNbaV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNvZXJjZSBudW1iZXIgYXJndW1lbnRzIHRvIHN0cmluZ3MsIHNpbmNlIEJ1ZmZlcihudW1iZXIpIGRvZXNcbiAgICAvLyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uXG4gICAgaWYgKHR5cGVvZiBidWYgPT09ICdudW1iZXInKSB7XG4gICAgICBidWYgPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZEJ1ZmZlcihCdWZmZXIuZnJvbShidWYpKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX2FwcGVuZEJ1ZmZlciA9IGZ1bmN0aW9uIGFwcGVuZEJ1ZmZlciAoYnVmKSB7XG4gIHRoaXMuX2J1ZnMucHVzaChidWYpXG4gIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGhcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChzZWFyY2gsIG9mZnNldCwgZW5jb2RpbmcpIHtcbiAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIG9mZnNldCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShzZWFyY2gpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBCdWZmZXJMaXN0LCBvciBVaW50OEFycmF5LicpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlYXJjaCA9PT0gJ251bWJlcicpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShbc2VhcmNoXSlcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKHNlYXJjaCwgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAodGhpcy5faXNCdWZmZXJMaXN0KHNlYXJjaCkpIHtcbiAgICBzZWFyY2ggPSBzZWFyY2guc2xpY2UoKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2VhcmNoLmJ1ZmZlcikpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShzZWFyY2guYnVmZmVyLCBzZWFyY2guYnl0ZU9mZnNldCwgc2VhcmNoLmJ5dGVMZW5ndGgpXG4gIH0gZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oc2VhcmNoKVxuICB9XG5cbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCB8fCAwKVxuXG4gIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gMFxuICB9XG5cbiAgaWYgKG9mZnNldCA8IDApIHtcbiAgICBvZmZzZXQgPSB0aGlzLmxlbmd0aCArIG9mZnNldFxuICB9XG5cbiAgaWYgKG9mZnNldCA8IDApIHtcbiAgICBvZmZzZXQgPSAwXG4gIH1cblxuICBpZiAoc2VhcmNoLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvZmZzZXQgPiB0aGlzLmxlbmd0aCA/IHRoaXMubGVuZ3RoIDogb2Zmc2V0XG4gIH1cblxuICBjb25zdCBibE9mZnNldCA9IHRoaXMuX29mZnNldChvZmZzZXQpXG4gIGxldCBibEluZGV4ID0gYmxPZmZzZXRbMF0gLy8gaW5kZXggb2Ygd2hpY2ggaW50ZXJuYWwgYnVmZmVyIHdlJ3JlIHdvcmtpbmcgb25cbiAgbGV0IGJ1ZmZPZmZzZXQgPSBibE9mZnNldFsxXSAvLyBvZmZzZXQgb2YgdGhlIGludGVybmFsIGJ1ZmZlciB3ZSdyZSB3b3JraW5nIG9uXG5cbiAgLy8gc2NhbiBvdmVyIGVhY2ggYnVmZmVyXG4gIGZvciAoOyBibEluZGV4IDwgdGhpcy5fYnVmcy5sZW5ndGg7IGJsSW5kZXgrKykge1xuICAgIGNvbnN0IGJ1ZmYgPSB0aGlzLl9idWZzW2JsSW5kZXhdXG5cbiAgICB3aGlsZSAoYnVmZk9mZnNldCA8IGJ1ZmYubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhdmFpbGFibGVXaW5kb3cgPSBidWZmLmxlbmd0aCAtIGJ1ZmZPZmZzZXRcblxuICAgICAgaWYgKGF2YWlsYWJsZVdpbmRvdyA+PSBzZWFyY2gubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZVNlYXJjaFJlc3VsdCA9IGJ1ZmYuaW5kZXhPZihzZWFyY2gsIGJ1ZmZPZmZzZXQpXG5cbiAgICAgICAgaWYgKG5hdGl2ZVNlYXJjaFJlc3VsdCAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZU9mZnNldChbYmxJbmRleCwgbmF0aXZlU2VhcmNoUmVzdWx0XSlcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPZmZzZXQgPSBidWZmLmxlbmd0aCAtIHNlYXJjaC5sZW5ndGggKyAxIC8vIGVuZCBvZiBuYXRpdmUgc2VhcmNoIHdpbmRvd1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmV2T2Zmc2V0ID0gdGhpcy5fcmV2ZXJzZU9mZnNldChbYmxJbmRleCwgYnVmZk9mZnNldF0pXG5cbiAgICAgICAgaWYgKHRoaXMuX21hdGNoKHJldk9mZnNldCwgc2VhcmNoKSkge1xuICAgICAgICAgIHJldHVybiByZXZPZmZzZXRcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPZmZzZXQrK1xuICAgICAgfVxuICAgIH1cblxuICAgIGJ1ZmZPZmZzZXQgPSAwXG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX21hdGNoID0gZnVuY3Rpb24gKG9mZnNldCwgc2VhcmNoKSB7XG4gIGlmICh0aGlzLmxlbmd0aCAtIG9mZnNldCA8IHNlYXJjaC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAobGV0IHNlYXJjaE9mZnNldCA9IDA7IHNlYXJjaE9mZnNldCA8IHNlYXJjaC5sZW5ndGg7IHNlYXJjaE9mZnNldCsrKSB7XG4gICAgaWYgKHRoaXMuZ2V0KG9mZnNldCArIHNlYXJjaE9mZnNldCkgIT09IHNlYXJjaFtzZWFyY2hPZmZzZXRdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuOyhmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgcmVhZERvdWJsZUJFOiA4LFxuICAgIHJlYWREb3VibGVMRTogOCxcbiAgICByZWFkRmxvYXRCRTogNCxcbiAgICByZWFkRmxvYXRMRTogNCxcbiAgICByZWFkSW50MzJCRTogNCxcbiAgICByZWFkSW50MzJMRTogNCxcbiAgICByZWFkVUludDMyQkU6IDQsXG4gICAgcmVhZFVJbnQzMkxFOiA0LFxuICAgIHJlYWRJbnQxNkJFOiAyLFxuICAgIHJlYWRJbnQxNkxFOiAyLFxuICAgIHJlYWRVSW50MTZCRTogMixcbiAgICByZWFkVUludDE2TEU6IDIsXG4gICAgcmVhZEludDg6IDEsXG4gICAgcmVhZFVJbnQ4OiAxLFxuICAgIHJlYWRJbnRCRTogbnVsbCxcbiAgICByZWFkSW50TEU6IG51bGwsXG4gICAgcmVhZFVJbnRCRTogbnVsbCxcbiAgICByZWFkVUludExFOiBudWxsXG4gIH1cblxuICBmb3IgKGNvbnN0IG0gaW4gbWV0aG9kcykge1xuICAgIChmdW5jdGlvbiAobSkge1xuICAgICAgaWYgKG1ldGhvZHNbbV0gPT09IG51bGwpIHtcbiAgICAgICAgQnVmZmVyTGlzdC5wcm90b3R5cGVbbV0gPSBmdW5jdGlvbiAob2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBieXRlTGVuZ3RoKVttXSgwLCBieXRlTGVuZ3RoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBCdWZmZXJMaXN0LnByb3RvdHlwZVttXSA9IGZ1bmN0aW9uIChvZmZzZXQgPSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBtZXRob2RzW21dKVttXSgwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfShtKSlcbiAgfVxufSgpKVxuXG4vLyBVc2VkIGludGVybmFsbHkgYnkgdGhlIGNsYXNzIGFuZCBhbHNvIGFzIGFuIGluZGljYXRvciBvZiB0aGlzIG9iamVjdCBiZWluZ1xuLy8gYSBgQnVmZmVyTGlzdGAuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJMaXN0YCBpbiBhIGJyb3dzZXJcbi8vIGVudmlyb25tZW50IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50IGNvcGllcyBvZiB0aGVcbi8vIEJ1ZmZlckxpc3QgY2xhc3MgYW5kIHNvbWUgYEJ1ZmZlckxpc3RgcyBtaWdodCBiZSBgQnVmZmVyTGlzdGBzLlxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX2lzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIF9pc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0IHx8IEJ1ZmZlckxpc3QuaXNCdWZmZXJMaXN0KGIpXG59XG5cbkJ1ZmZlckxpc3QuaXNCdWZmZXJMaXN0ID0gZnVuY3Rpb24gaXNCdWZmZXJMaXN0IChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYltzeW1ib2xdXG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyTGlzdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEdXBsZXhTdHJlYW0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5EdXBsZXhcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuY29uc3QgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vQnVmZmVyTGlzdCcpXG5cbmZ1bmN0aW9uIEJ1ZmZlckxpc3RTdHJlYW0gKGNhbGxiYWNrKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrXG5cbiAgICBjb25zdCBwaXBlciA9IGZ1bmN0aW9uIHBpcGVyIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayhlcnIpXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbFxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5vbigncGlwZScsIGZ1bmN0aW9uIG9uUGlwZSAoc3JjKSB7XG4gICAgICBzcmMub24oJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcbiAgICB0aGlzLm9uKCd1bnBpcGUnLCBmdW5jdGlvbiBvblVucGlwZSAoc3JjKSB7XG4gICAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcblxuICAgIGNhbGxiYWNrID0gbnVsbFxuICB9XG5cbiAgQnVmZmVyTGlzdC5faW5pdC5jYWxsKHRoaXMsIGNhbGxiYWNrKVxuICBEdXBsZXhTdHJlYW0uY2FsbCh0aGlzKVxufVxuXG5pbmhlcml0cyhCdWZmZXJMaXN0U3RyZWFtLCBEdXBsZXhTdHJlYW0pXG5PYmplY3QuYXNzaWduKEJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLCBCdWZmZXJMaXN0LnByb3RvdHlwZSlcblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX25ldyA9IGZ1bmN0aW9uIF9uZXcgKGNhbGxiYWNrKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlIChidWYsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICB0aGlzLl9hcHBlbmRCdWZmZXIoYnVmKVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiBfcmVhZCAoc2l6ZSkge1xuICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMucHVzaChudWxsKVxuICB9XG5cbiAgc2l6ZSA9IE1hdGgubWluKHNpemUsIHRoaXMubGVuZ3RoKVxuICB0aGlzLnB1c2godGhpcy5zbGljZSgwLCBzaXplKSlcbiAgdGhpcy5jb25zdW1lKHNpemUpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZCAoY2h1bmspIHtcbiAgRHVwbGV4U3RyZWFtLnByb3RvdHlwZS5lbmQuY2FsbCh0aGlzLCBjaHVuaylcblxuICBpZiAodGhpcy5fY2FsbGJhY2spIHtcbiAgICB0aGlzLl9jYWxsYmFjayhudWxsLCB0aGlzLnNsaWNlKCkpXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiBfZGVzdHJveSAoZXJyLCBjYikge1xuICB0aGlzLl9idWZzLmxlbmd0aCA9IDBcbiAgdGhpcy5sZW5ndGggPSAwXG4gIGNiKGVycilcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2lzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIF9pc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtIHx8IGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0IHx8IEJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0KGIpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0ID0gQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3RcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0U3RyZWFtXG5tb2R1bGUuZXhwb3J0cy5CdWZmZXJMaXN0U3RyZWFtID0gQnVmZmVyTGlzdFN0cmVhbVxubW9kdWxlLmV4cG9ydHMuQnVmZmVyTGlzdCA9IEJ1ZmZlckxpc3RcbiIsICJpbXBvcnQgY2FjIGZyb20gJ2NhYyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCAqIGFzIGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xuXG5jb25zdCBjbGkgPSBjYWMoJ3d4dCcpO1xuY2xpLmhlbHAoKTtcbmNsaS52ZXJzaW9uKHZlcnNpb24pO1xuXG4vLyBERVZcbmNsaVxuICAuY29tbWFuZCgnW3Jvb3RdJywgJ3N0YXJ0IGRldiBzZXJ2ZXInKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuZGV2KTtcblxuLy8gQlVJTERcbmNsaVxuICAuY29tbWFuZCgnYnVpbGQgW3Jvb3RdJywgJ2J1aWxkIGZvciBwcm9kdWN0aW9uJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAuYWN0aW9uKGNvbW1hbmRzLmJ1aWxkKTtcblxuLy8gWklQXG5jbGlcbiAgLmNvbW1hbmQoJ3ppcCBbcm9vdF0nLCAnYnVpbGQgZm9yIHByb2R1Y3Rpb24gYW5kIHppcCBvdXRwdXQnKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuemlwKTtcblxuLy8gUFJFUEFSRVxuY2xpXG4gIC5jb21tYW5kKCdwcmVwYXJlIFtyb290XScsICdwcmVwYXJlJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLmFjdGlvbihjb21tYW5kcy5wcmVwYXJlKTtcblxuLy8gUFVCTElTSFxuY2xpLmNvbW1hbmQoJ3B1Ymxpc2ggW3Jvb3RdJywgJ3B1Ymxpc2ggdG8gc3RvcmVzJykuYWN0aW9uKGNvbW1hbmRzLnB1Ymxpc2gpO1xuXG4vLyBJTklUXG5jbGlcbiAgLmNvbW1hbmQoJ2luaXQgW2RpcmVjdG9yeV0nLCAnaW5pdGlhbGl6ZSBhIG5ldyBwcm9qZWN0JylcbiAgLm9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHRlbXBsYXRlPicsICd0ZW1wbGF0ZSB0byB1c2UnKVxuICAub3B0aW9uKCctLXBtIDxwYWNrYWdlTWFuYWdlcj4nLCAnd2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZScpXG4gIC5hY3Rpb24oY29tbWFuZHMuaW5pdCk7XG5cbmNsaS5wYXJzZSgpO1xuIiwgIntcbiAgXCJuYW1lXCI6IFwid3h0XCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcInZlcnNpb25cIjogXCIwLjMuMVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiTmV4dCBnZW4gZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHdlYiBleHRlbnNpb25zXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0xOC4xNi4wXCIsXG4gICAgXCJwbnBtXCI6IFwiPj04XCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ha2xpbmtlcjEvd3h0XCJcbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJ2aXRlXCIsXG4gICAgXCJjaHJvbWVcIixcbiAgICBcIndlYlwiLFxuICAgIFwiZXh0ZW5zaW9uXCIsXG4gICAgXCJicm93c2VyXCIsXG4gICAgXCJidW5kbGVyXCIsXG4gICAgXCJmcmFtZXdvcmtcIlxuICBdLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiQWFyb24gS2xpbmtlclwiLFxuICAgIFwiZW1haWxcIjogXCJhYXJvbmtsaW5rZXIxK3d4dEBnbWFpbC5jb21cIlxuICB9LFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW5cIixcbiAgICBcImRpc3RcIlxuICBdLFxuICBcImJpblwiOiBcIi4vYmluL3d4dC5janNcIixcbiAgXCJtYWluXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICBcIm1vZHVsZVwiOiBcIi4vZGlzdC9pbmRleC5qc1wiLFxuICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgXCJleHBvcnRzXCI6IHtcbiAgICBcIi5cIjoge1xuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiXG4gICAgfSxcbiAgICBcIi4vY2xpZW50XCI6IHtcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiLFxuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiXG4gICAgfSxcbiAgICBcIi4vYnJvd3NlclwiOiB7XG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9icm93c2VyLmpzXCIsXG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2Jyb3dzZXIuZC50c1wiXG4gICAgfVxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwid3h0XCI6IFwidHN4IHNyYy9jbGkvaW5kZXgudHNcIixcbiAgICBcImJ1aWxkXCI6IFwidHN4IHNjcmlwdHMvYnVpbGQudHNcIixcbiAgICBcImZvcm1hdFwiOiBcInByZXR0aWVyIC0td3JpdGUgLlwiLFxuICAgIFwiZm9ybWF0OmNoZWNrXCI6IFwicHJldHRpZXIgLS13cml0ZSAuXCIsXG4gICAgXCJjb21waWxlXCI6IFwidHNjIC0tbm9FbWl0XCIsXG4gICAgXCJ0ZXN0XCI6IFwidml0ZXN0XCIsXG4gICAgXCJ0ZXN0OmNvdmVyYWdlXCI6IFwidml0ZXN0IHJ1biAtLWNvdmVyYWdlXCIsXG4gICAgXCJwcmVwYXJlXCI6IFwic2ltcGxlLWdpdC1ob29rc1wiLFxuICAgIFwicHJlcHVibGlzaFwiOiBcInBucG0gLXMgYnVpbGRcIixcbiAgICBcImRvY3M6ZGV2XCI6IFwidml0ZXByZXNzIGRldiBkb2NzXCIsXG4gICAgXCJkb2NzOmJ1aWxkXCI6IFwidml0ZXByZXNzIGJ1aWxkIGRvY3NcIixcbiAgICBcImRvY3M6cHJldmlld1wiOiBcInZpdGVwcmVzcyBwcmV2aWV3IGRvY3NcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvd2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiLFxuICAgIFwiQHdlYmV4dC1jb3JlL2Zha2UtYnJvd3NlclwiOiBcIl4xLjIuMlwiLFxuICAgIFwiQHdlYmV4dC1jb3JlL21hdGNoLXBhdHRlcm5zXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJhc3luYy1tdXRleFwiOiBcIl4wLjQuMFwiLFxuICAgIFwiYzEyXCI6IFwiXjEuNC4yXCIsXG4gICAgXCJjYWNcIjogXCJeNi43LjE0XCIsXG4gICAgXCJjb25zb2xhXCI6IFwiXjMuMS4wXCIsXG4gICAgXCJmYXN0LWdsb2JcIjogXCJeMy4yLjEyXCIsXG4gICAgXCJmaWxlc2l6ZVwiOiBcIl4xMC4wLjdcIixcbiAgICBcImZzLWV4dHJhXCI6IFwiXjExLjEuMVwiLFxuICAgIFwiZ2V0LXBvcnRcIjogXCJeNy4wLjBcIixcbiAgICBcImdpZ2V0XCI6IFwiXjEuMS4yXCIsXG4gICAgXCJqaXRpXCI6IFwiXjEuMTguMlwiLFxuICAgIFwianNvbjVcIjogXCJeMi4yLjNcIixcbiAgICBcImxpbmtlZG9tXCI6IFwiXjAuMTQuMjZcIixcbiAgICBcIm1pbmltYXRjaFwiOiBcIl45LjAuM1wiLFxuICAgIFwicGljb2NvbG9yc1wiOiBcIl4xLjAuMFwiLFxuICAgIFwicHJvbXB0c1wiOiBcIl4yLjQuMlwiLFxuICAgIFwidW5pbXBvcnRcIjogXCJeMy4wLjhcIixcbiAgICBcInZpdGVcIjogXCJeNC4zLjlcIixcbiAgICBcInZpdGUtdHNjb25maWctcGF0aHNcIjogXCJeNC4yLjBcIixcbiAgICBcIndlYi1leHRcIjogXCJeNy42LjJcIixcbiAgICBcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiOiBcIl4wLjEwLjBcIixcbiAgICBcInppcC1kaXJcIjogXCJeMi4wLjBcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAZmFrZXItanMvZmFrZXJcIjogXCJeOC4wLjJcIixcbiAgICBcIkB0eXBlcy9mcy1leHRyYVwiOiBcIl4xMS4wLjFcIixcbiAgICBcIkB0eXBlcy9sb2Rhc2gubWVyZ2VcIjogXCJeNC42LjdcIixcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjMuMVwiLFxuICAgIFwiQHR5cGVzL3Byb21wdHNcIjogXCJeMi40LjRcIixcbiAgICBcIkB2aXRlc3QvY292ZXJhZ2UtdjhcIjogXCJeMC4zMi4yXCIsXG4gICAgXCJleGVjYVwiOiBcIl43LjIuMFwiLFxuICAgIFwibG9kYXNoLm1lcmdlXCI6IFwiXjQuNi4yXCIsXG4gICAgXCJucG0tcnVuLWFsbFwiOiBcIl40LjEuNVwiLFxuICAgIFwib3JhXCI6IFwiXjYuMy4xXCIsXG4gICAgXCJwcmV0dGllclwiOiBcIl4yLjguOFwiLFxuICAgIFwicHJldHR5LXF1aWNrXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJzaW1wbGUtZ2l0LWhvb2tzXCI6IFwiXjIuOC4xXCIsXG4gICAgXCJ0c3VwXCI6IFwiXjcuMC4wXCIsXG4gICAgXCJ0c3hcIjogXCJeMy4xMi43XCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMS4zXCIsXG4gICAgXCJ2aXRlcHJlc3NcIjogXCIxLjAuMC1iZXRhLjVcIixcbiAgICBcInZpdGVzdFwiOiBcIl4wLjMyLjRcIixcbiAgICBcInZpdGVzdC1tb2NrLWV4dGVuZGVkXCI6IFwiXjEuMS40XCIsXG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiOiBcIj49MC4xMC4wXCJcbiAgfSxcbiAgXCJwYWNrYWdlTWFuYWdlclwiOiBcInBucG1AOC42LjNcIixcbiAgXCJzaW1wbGUtZ2l0LWhvb2tzXCI6IHtcbiAgICBcInByZS1jb21taXRcIjogXCJwbnBtIHByZXR0eS1xdWljayAtLXN0YWdlZFwiXG4gIH0sXG4gIFwicG5wbVwiOiB7XG4gICAgXCJwZWVyRGVwZW5kZW5jeVJ1bGVzXCI6IHtcbiAgICAgIFwiaWdub3JlTWlzc2luZ1wiOiBbXG4gICAgICAgIFwiQGFsZ29saWEvY2xpZW50LXNlYXJjaFwiLFxuICAgICAgICBcInNlYXJjaC1pbnNpZ2h0c1wiXG4gICAgICBdLFxuICAgICAgXCJhbGxvd0FueVwiOiBbXG4gICAgICAgIFwibm9kZS1mZXRjaFwiXG4gICAgICBdXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgQ29uZmlnRW52LFxuICBFeHRlbnNpb25SdW5uZXJDb25maWcsXG4gIElubGluZUNvbmZpZyxcbiAgSW50ZXJuYWxDb25maWcsXG4gIFVzZXJDb25maWcsXG4gIFVzZXJNYW5pZmVzdCxcbiAgVXNlck1hbmlmZXN0Rm4sXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwYXRoLCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi4vdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IGNyZWF0ZUZzQ2FjaGUgfSBmcm9tICcuL2NyZWF0ZUZzQ2FjaGUnO1xuaW1wb3J0IHsgZ2V0R2xvYmFscyB9IGZyb20gJy4vZ2xvYmFscyc7XG5pbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSAnYzEyJztcblxuLyoqXG4gKiBHaXZlbiBhbiBpbmxpbmUgY29uZmlnLCBkaXNjb3ZlciB0aGUgY29uZmlnIGZpbGUgaWYgbmVjZXNzYXJ5LCBtZXJnZSB0aGUgcmVzdWx0cywgcmVzb2x2ZSBhbnlcbiAqIHJlbGF0aXZlIHBhdGhzLCBhbmQgYXBwbHkgYW55IGRlZmF1bHRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SW50ZXJuYWxDb25maWcoXG4gIGNvbmZpZzogSW5saW5lQ29uZmlnLFxuICBjb21tYW5kOiAnYnVpbGQnIHwgJ3NlcnZlJyxcbik6IFByb21pc2U8SW50ZXJuYWxDb25maWc+IHtcbiAgLy8gQXBwbHkgZGVmYXVsdHMgdG8gYSBiYXNlIGNvbmZpZ1xuICBjb25zdCByb290ID0gY29uZmlnLnJvb3QgPyBwYXRoLnJlc29sdmUoY29uZmlnLnJvb3QpIDogcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbW9kZSA9XG4gICAgY29uZmlnLm1vZGUgPz8gKGNvbW1hbmQgPT09ICdidWlsZCcgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnKTtcbiAgY29uc3QgYnJvd3NlciA9IGNvbmZpZy5icm93c2VyID8/ICdjaHJvbWUnO1xuICBjb25zdCBtYW5pZmVzdFZlcnNpb24gPVxuICAgIGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPz8gKGJyb3dzZXIgPT0gJ2ZpcmVmb3gnID8gMiA6IDMpO1xuICBjb25zdCBvdXRCYXNlRGlyID0gcGF0aC5yZXNvbHZlKHJvb3QsICcub3V0cHV0Jyk7XG4gIGNvbnN0IG91dERpciA9IHBhdGgucmVzb2x2ZShvdXRCYXNlRGlyLCBgJHticm93c2VyfS1tdiR7bWFuaWZlc3RWZXJzaW9ufWApO1xuICBjb25zdCBsb2dnZXIgPSBjb25maWcubG9nZ2VyID8/IGNvbnNvbGE7XG5cbiAgY29uc3QgYmFzZUNvbmZpZzogSW50ZXJuYWxDb25maWdOb1VzZXJEaXJzID0ge1xuICAgIHJvb3QsXG4gICAgb3V0RGlyLFxuICAgIG91dEJhc2VEaXIsXG4gICAgc3RvcmVJZHM6IGNvbmZpZy5zdG9yZUlkcyA/PyB7fSxcbiAgICBicm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbixcbiAgICBtb2RlLFxuICAgIGNvbW1hbmQsXG4gICAgbG9nZ2VyLFxuICAgIHZpdGU6IGNvbmZpZy52aXRlID8/IHt9LFxuICAgIGltcG9ydHM6IGNvbmZpZy5pbXBvcnRzID8/IHt9LFxuICAgIHJ1bm5lckNvbmZpZzogYXdhaXQgbG9hZENvbmZpZzxFeHRlbnNpb25SdW5uZXJDb25maWc+KHtcbiAgICAgIG5hbWU6ICd3ZWItZXh0JyxcbiAgICAgIGN3ZDogcm9vdCxcbiAgICAgIGdsb2JhbFJjOiB0cnVlLFxuICAgICAgcmNGaWxlOiAnLndlYmV4dHJjJyxcbiAgICAgIG92ZXJyaWRlczogY29uZmlnLnJ1bm5lcixcbiAgICB9KSxcbiAgfTtcblxuICAvLyBMb2FkIHVzZXIgY29uZmlnIGZyb20gZmlsZVxuICBsZXQgdXNlckNvbmZpZzogVXNlckNvbmZpZyA9IHtcbiAgICBtb2RlLFxuICB9O1xuICBpZiAoY29uZmlnLmNvbmZpZ0ZpbGUgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZENvbmZpZzxVc2VyQ29uZmlnPih7XG4gICAgICBuYW1lOiAnd3h0JyxcbiAgICAgIGN3ZDogcm9vdCxcbiAgICAgIHJjRmlsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgdXNlckNvbmZpZyA9IGxvYWRlZC5jb25maWcgPz8ge307XG4gIH1cblxuICAvLyBNZXJnZSBpbmxpbmUgYW5kIHVzZXIgY29uZmlnc1xuICBjb25zdCBtZXJnZWQgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIGJhc2VDb25maWcsXG4gICAgdXNlckNvbmZpZyxcbiAgKSBhcyBJbnRlcm5hbENvbmZpZ05vVXNlckRpcnM7XG5cbiAgLy8gQXBwbHkgdXNlciBjb25maWcgYW5kIGNyZWF0ZSBmaW5hbCBjb25maWdcbiAgY29uc3Qgc3JjRGlyID0gdXNlckNvbmZpZy5zcmNEaXIgPyByZXNvbHZlKHJvb3QsIHVzZXJDb25maWcuc3JjRGlyKSA6IHJvb3Q7XG4gIGNvbnN0IGVudHJ5cG9pbnRzRGlyID0gcmVzb2x2ZShcbiAgICBzcmNEaXIsXG4gICAgdXNlckNvbmZpZy5lbnRyeXBvaW50c0RpciA/PyAnZW50cnlwb2ludHMnLFxuICApO1xuICBjb25zdCBwdWJsaWNEaXIgPSByZXNvbHZlKHJvb3QsIHVzZXJDb25maWcucHVibGljRGlyID8/ICdwdWJsaWMnKTtcbiAgY29uc3Qgd3h0RGlyID0gcmVzb2x2ZShzcmNEaXIsICcud3h0Jyk7XG4gIGNvbnN0IHR5cGVzRGlyID0gcmVzb2x2ZSh3eHREaXIsICd0eXBlcycpO1xuXG4gIC8vIE1lcmdlIG1hbmlmZXN0IHNvdXJjZXNcbiAgY29uc3QgZW52OiBDb25maWdFbnYgPSB7IG1vZGUsIGJyb3dzZXIsIG1hbmlmZXN0VmVyc2lvbiwgY29tbWFuZCB9O1xuICBjb25zdCB1c2VyTWFuaWZlc3QgPSBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCB1c2VyQ29uZmlnLm1hbmlmZXN0KTtcbiAgY29uc3QgaW5saW5lTWFuaWZlc3QgPSBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCBjb25maWcubWFuaWZlc3QpO1xuICBjb25zdCBtYW5pZmVzdCA9IHZpdGUubWVyZ2VDb25maWcodXNlck1hbmlmZXN0LCBpbmxpbmVNYW5pZmVzdCk7XG5cbiAgY29uc3QgZmluYWxDb25maWc6IEludGVybmFsQ29uZmlnID0ge1xuICAgIC4uLm1lcmdlZCxcbiAgICBzcmNEaXIsXG4gICAgZW50cnlwb2ludHNEaXIsXG4gICAgcHVibGljRGlyLFxuICAgIHd4dERpcjogd3h0RGlyLFxuICAgIHR5cGVzRGlyLFxuICAgIGZzQ2FjaGU6IGNyZWF0ZUZzQ2FjaGUod3h0RGlyKSxcbiAgICBtYW5pZmVzdCxcbiAgICB6aXA6IHtcbiAgICAgIHNvdXJjZXNUZW1wbGF0ZTogJ3t7bmFtZX19LXt7dmVyc2lvbn19LXNvdXJjZXMuemlwJyxcbiAgICAgIGFydGlmYWN0VGVtcGxhdGU6ICd7e25hbWV9fS17e3ZlcnNpb259fS17e2Jyb3dzZXJ9fS56aXAnLFxuICAgICAgc291cmNlc1Jvb3Q6IHJvb3QsXG4gICAgICAuLi51c2VyQ29uZmlnLnppcCxcbiAgICAgIC4uLmNvbmZpZy56aXAsXG4gICAgICBpZ25vcmVkU291cmNlczogW1xuICAgICAgICAnKiovbm9kZV9tb2R1bGVzJyxcbiAgICAgICAgLy8gV1hUIGZpbGVzXG4gICAgICAgICcqKi93ZWItZXh0LmNvbmZpZy50cycsXG4gICAgICAgIC8vIEhpZGRlbiBmaWxlc1xuICAgICAgICAnKiovLionLFxuICAgICAgICAvLyBUZXN0c1xuICAgICAgICAnKiovX190ZXN0c19fLyoqJyxcbiAgICAgICAgJyoqLyouKyh0ZXN0fHNwZWMpLj8oY3xtKSsoanx0KXM/KHgpJyxcbiAgICAgICAgLy8gVXNlciBjb25maWdcbiAgICAgICAgLi4uKHVzZXJDb25maWcuemlwPy5pZ25vcmVkU291cmNlcyA/PyBbXSksXG4gICAgICAgIC4uLihjb25maWcuemlwPy5pZ25vcmVkU291cmNlcyA/PyBbXSksXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gQ3VzdG9taXplIHRoZSBkZWZhdWx0IHZpdGUgY29uZmlnXG4gIGZpbmFsQ29uZmlnLnZpdGUucm9vdCA9IHJvb3Q7XG4gIGZpbmFsQ29uZmlnLnZpdGUuY29uZmlnRmlsZSA9IGZhbHNlO1xuICBmaW5hbENvbmZpZy52aXRlLmxvZ0xldmVsID0gJ3dhcm4nO1xuXG4gIGZpbmFsQ29uZmlnLnZpdGUuYnVpbGQgPz89IHt9O1xuICBmaW5hbENvbmZpZy52aXRlLmJ1aWxkLm91dERpciA9IG91dERpcjtcbiAgZmluYWxDb25maWcudml0ZS5idWlsZC5lbXB0eU91dERpciA9IGZhbHNlO1xuXG4gIGZpbmFsQ29uZmlnLnZpdGUucGx1Z2lucyA/Pz0gW107XG4gIGZpbmFsQ29uZmlnLnZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuZG93bmxvYWQoZmluYWxDb25maWcpKTtcbiAgZmluYWxDb25maWcudml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5kZXZIdG1sUHJlcmVuZGVyKGZpbmFsQ29uZmlnKSk7XG4gIGZpbmFsQ29uZmlnLnZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMudW5pbXBvcnQoZmluYWxDb25maWcpKTtcbiAgZmluYWxDb25maWcudml0ZS5wbHVnaW5zLnB1c2goXG4gICAgcGx1Z2lucy52aXJ0dWFsRW50cnlwb2luKCdiYWNrZ3JvdW5kJywgZmluYWxDb25maWcpLFxuICApO1xuICBmaW5hbENvbmZpZy52aXRlLnBsdWdpbnMucHVzaChcbiAgICBwbHVnaW5zLnZpcnR1YWxFbnRyeXBvaW4oJ2NvbnRlbnQtc2NyaXB0JywgZmluYWxDb25maWcpLFxuICApO1xuICBmaW5hbENvbmZpZy52aXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmRldlNlcnZlckdsb2JhbHMoZmluYWxDb25maWcpKTtcbiAgZmluYWxDb25maWcudml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy50c2NvbmZpZ1BhdGhzKGZpbmFsQ29uZmlnKSk7XG4gIGZpbmFsQ29uZmlnLnZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMubm9vcEJhY2tncm91bmQoKSk7XG5cbiAgZmluYWxDb25maWcudml0ZS5kZWZpbmUgPz89IHt9O1xuICBnZXRHbG9iYWxzKGZpbmFsQ29uZmlnKS5mb3JFYWNoKChnbG9iYWwpID0+IHtcbiAgICBmaW5hbENvbmZpZy52aXRlLmRlZmluZSFbZ2xvYmFsLm5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZ2xvYmFsLnZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbmFsQ29uZmlnO1xufVxuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciBkZWZpbmluZyBhIGJhc2UgY29uZmlnLCBzaW5jZSB1c2VyLWNvbmZpZ3VyYWJsZSBkaXJlY3RvcmllcyBtdXN0IGJlIHNldCBhZnRlclxuICogcmVhZGluZyBpbiB0aGUgdXNlciBjb25maWcuXG4gKi9cbnR5cGUgSW50ZXJuYWxDb25maWdOb1VzZXJEaXJzID0gT21pdDxcbiAgSW50ZXJuYWxDb25maWcsXG4gIHwgJ3NyY0RpcidcbiAgfCAncHVibGljRGlyJ1xuICB8ICdlbnRyeXBvaW50c0RpcidcbiAgfCAnd3h0RGlyJ1xuICB8ICd0eXBlc0RpcidcbiAgfCAnZnNDYWNoZSdcbiAgfCAnbWFuaWZlc3QnXG4gIHwgJ3ppcCdcbj47XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVNYW5pZmVzdENvbmZpZyhcbiAgZW52OiBDb25maWdFbnYsXG4gIG1hbmlmZXN0OiBVc2VyTWFuaWZlc3QgfCBQcm9taXNlPFVzZXJNYW5pZmVzdD4gfCBVc2VyTWFuaWZlc3RGbiB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8VXNlck1hbmlmZXN0PiB7XG4gIHJldHVybiBhd2FpdCAodHlwZW9mIG1hbmlmZXN0ID09PSAnZnVuY3Rpb24nXG4gICAgPyBtYW5pZmVzdChlbnYpXG4gICAgOiBtYW5pZmVzdCA/PyB7fSk7XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwYXRoLCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3BhdGhzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnROYW1lKFxuICBlbnRyeXBvaW50c0Rpcjogc3RyaW5nLFxuICBpbnB1dFBhdGg6IHN0cmluZyxcbiAgLy8gdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShlbnRyeXBvaW50c0RpciwgaW5wdXRQYXRoKTtcbiAgLy8gR3JhYiB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCAuIG9yIC8gb3IgXFxcXFxuICBjb25zdCBuYW1lID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9bXFwuXFwvXFxcXF0vLCAyKVswXTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBleHQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlKGVudHJ5cG9pbnQub3V0cHV0RGlyLCBgJHtlbnRyeXBvaW50Lm5hbWV9JHtleHR9YCk7XG59XG5cbi8qKlxuICogUmV0dXJuJ3MgdGhlIGVudHJ5cG9pbnQncyBvdXRwdXQgcGF0aCByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4gVXNlZCBmb3IgcGF0aHMgaW4gdGhlXG4gKiBtYW5pZmVzdCBhbmQgcm9sbHVwJ3MgYnVuZGxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gIGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQsXG4gIG91dERpcjogc3RyaW5nLFxuICBleHQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKFxuICAgIHJlbGF0aXZlKG91dERpciwgZ2V0RW50cnlwb2ludE91dHB1dEZpbGUoZW50cnlwb2ludCwgZXh0KSksXG4gICk7XG59XG4iLCAiaW1wb3J0IG5vZGVQYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIENvbnZlcnRzIHN5c3RlbSBwYXRocyB0byBub3JtYWxpemVkIGJ1bmRsZXIgcGF0aC4gT24gd2luZG93cyBhbmQgdW5peCwgdGhpcyByZXR1cm5zIHBhdGhzIHdpdGggL1xuICogaW5zdGVhZCBvZiBcXC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZpdGUubm9ybWFsaXplUGF0aChwYXRoKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG5vcm1hbGl6ZWQgcGF0aCwgY29udmVydCBpdCB0byB0aGUgc3lzdGVtIHBhdGggc3R5bGUuIE9uIFdpbmRvd3MsIHN3aXRjaCB0byBcXCwgb3RoZXJ3aXNlIHVzZSAvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5ub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBub2RlUGF0aC5ub3JtYWxpemUocGF0aCk7XG59XG5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OUyA9IFsnY3NzJywgJ3Njc3MnLCAnc2FzcycsICdsZXNzJywgJ3N0eWwnLCAnc3R5bHVzJ107XG5cbi8vIC5tb2R1bGUuY3NzIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdGhlc2UgYXJlIGdsb2JhbCBDU1MgZmlsZXMsIHNvIHVzaW5nIENTUyBtb2R1bGVzIGRvZXNuJ3QgbWFrZSBzZW5zZS5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OU19QQVRURVJOID0gYCsoJHtDU1NfRVhURU5TSU9OUy5qb2luKCd8Jyl9KWA7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE5hbWUgfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBwYXJzZUhUTUwgfSBmcm9tICdsaW5rZWRvbSc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIFByZS1yZW5kZXJzIHRoZSBIVE1MIGVudHJ5cG9pbnRzIHdoZW4gYnVpbGRpbmcgdGhlIGV4dGVuc2lvbiB0byBjb25uZWN0IHRvIHRoZSBkZXYgc2VydmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2SHRtbFByZXJlbmRlcihjb25maWc6IEludGVybmFsQ29uZmlnKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIGFwcGx5OiAnYnVpbGQnLFxuICAgIG5hbWU6ICd3eHQ6ZGV2LWh0bWwtcHJlcmVuZGVyJyxcbiAgICBjb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgYWxpYXM6IHtcbiAgICAgICAgICAgICdAd3h0L3JlbG9hZC1odG1sJzogcmVzb2x2ZShcbiAgICAgICAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL3JlbG9hZC1odG1sLmpzJyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBhc3luYyB0cmFuc2Zvcm0oaHRtbCwgaWQpIHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGNvbmZpZy5zZXJ2ZXI7XG4gICAgICBpZiAoY29uZmlnLmNvbW1hbmQgIT09ICdzZXJ2ZScgfHwgc2VydmVyID09IG51bGwgfHwgIWlkLmVuZHNXaXRoKCcuaHRtbCcpKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gYCR7c2VydmVyLm9yaWdpbn0ke2lkfWA7XG4gICAgICBjb25zdCBuYW1lID0gZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBpZCk7XG4gICAgICBjb25zdCB1cmwgPSBgJHtzZXJ2ZXIub3JpZ2lufS8ke25hbWV9Lmh0bWxgO1xuICAgICAgY29uc3Qgc2VydmVySHRtbCA9IGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgIHVybCxcbiAgICAgICAgaHRtbCxcbiAgICAgICAgb3JpZ2luYWxVcmwsXG4gICAgICApO1xuICAgICAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKHNlcnZlckh0bWwpO1xuXG4gICAgICBjb25zdCBwb2ludFRvRGV2U2VydmVyID0gKHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgYXR0cjogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNyYyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xuICAgICAgICAgIGlmICghc3JjKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoaXNBYnNvbHV0ZShzcmMpKSB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLCBzZXJ2ZXIub3JpZ2luICsgc3JjKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNyYy5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFicyA9IHJlc29sdmUoZGlybmFtZShpZCksIHNyYyk7XG4gICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IHJlbGF0aXZlKGNvbmZpZy5yb290LCBhYnMpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgYCR7c2VydmVyLm9yaWdpbn0vJHtwYXRobmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHBvaW50VG9EZXZTZXJ2ZXIoJ3NjcmlwdFt0eXBlPW1vZHVsZV0nLCAnc3JjJyk7XG4gICAgICBwb2ludFRvRGV2U2VydmVyKCdsaW5rW3JlbD1zdHlsZXNoZWV0XScsICdocmVmJyk7XG5cbiAgICAgIC8vIEFkZCBhIHNjcmlwdCB0byBhZGQgcGFnZSByZWxvYWRpbmdcbiAgICAgIGNvbnN0IHJlbG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICByZWxvYWRlci5zcmMgPSAnQHd4dC9yZWxvYWQtaHRtbCc7XG4gICAgICByZWxvYWRlci50eXBlID0gJ21vZHVsZSc7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlbG9hZGVyKTtcblxuICAgICAgY29uc3QgbmV3SHRtbCA9IGRvY3VtZW50LnRvU3RyaW5nKCk7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdUcmFuc2Zvcm1lZCAnICsgaWQpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnT2xkIEhUTUw6XFxuJyArIGh0bWwpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnTmV3IEhUTUw6XFxuJyArIG5ld0h0bWwpO1xuICAgICAgcmV0dXJuIG5ld0h0bWw7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIERlZmluZXMgZ2xvYmFsIGNvbnN0YW50cyBhYm91dCB0aGUgZGV2IHNlcnZlci4gSGVscHMgc2NyaXB0cyBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIncyB3ZWIgc29ja2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2U2VydmVyR2xvYmFscyhpbnRlcm5hbENvbmZpZzogSW50ZXJuYWxDb25maWcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6ZGV2LXNlcnZlci1nbG9iYWxzJyxcbiAgICBjb25maWcoKSB7XG4gICAgICBpZiAoaW50ZXJuYWxDb25maWcuc2VydmVyID09IG51bGwgfHwgaW50ZXJuYWxDb25maWcuY29tbWFuZCA9PSAnYnVpbGQnKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgIF9fREVWX1NFUlZFUl9QUk9UT0NPTF9fOiBKU09OLnN0cmluZ2lmeSgnd3M6JyksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX0hPU1ROQU1FX186IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgaW50ZXJuYWxDb25maWcuc2VydmVyLmhvc3RuYW1lLFxuICAgICAgICAgICksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX1BPUlRfXzogSlNPTi5zdHJpbmdpZnkoaW50ZXJuYWxDb25maWcuc2VydmVyLnBvcnQpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCBkbnMgZnJvbSAnbm9kZTpkbnMnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3Byb21pc2VzJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5mdW5jdGlvbiBpc09mZmxpbmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGlzT2ZmbGluZSA9IG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXMpID0+IHtcbiAgICBkbnMucmVzb2x2ZSgnZ29vZ2xlLmNvbScsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIgPT0gbnVsbCkge1xuICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGlzT2ZmbGluZSwgMWUzKS5jYXRjaCgoKSA9PiB0cnVlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzT25saW5lKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBvZmZsaW5lID0gYXdhaXQgaXNPZmZsaW5lKCk7XG4gIHJldHVybiAhb2ZmbGluZTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgVVJMIHdpdGggYSBzaW1wbGUgR0VUIHJlcXVlc3QuIEdyYWJzIGl0IGZyb20gY2FjaGUgaWYgaXQgZG9lc24ndCBleGlzdCwgb3IgdGhyb3dzIGFuXG4gKiBlcnJvciBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCB2aWEgdGhlIG5ldHdvcmsgb3IgY2FjaGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaENhY2hlZChcbiAgdXJsOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgY29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgaWYgKGF3YWl0IGlzT25saW5lKCkpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmIChyZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICBjb250ZW50ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgIGF3YWl0IGNvbmZpZy5mc0NhY2hlLnNldCh1cmwsIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGRvd25sb2FkIFwiJHt1cmx9XCIsIGZhbGxpbmcgYmFjayB0byBjYWNoZS4uLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGVudCkgY29udGVudCA9IChhd2FpdCBjb25maWcuZnNDYWNoZS5nZXQodXJsKSkgPz8gJyc7XG4gIGlmICghY29udGVudClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBPZmZsaW5lIGFuZCBcIiR7dXJsfVwiIGhhcyBub3QgYmVlbiBjYWNoZWQuIFRyeSBhZ2FpbiB3aGVuIG9ubGluZS5gLFxuICAgICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiLyoqXG4gKiBBZGQgYSB0aW1lb3V0IHRvIGEgcHJvbWlzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuICBkdXJhdGlvbjogbnVtYmVyLFxuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWooYFByb21pc2UgdGltZWQgb3V0IGFmdGVyICR7ZHVyYXRpb259bXNgKTtcbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcHJvbWlzZVxuICAgICAgLnRoZW4ocmVzKVxuICAgICAgLmNhdGNoKHJlailcbiAgICAgIC5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIERvbid0IHVzZSBpbiBwcm9kdWN0aW9uLCBqdXN0IGZvciB0ZXN0aW5nIGFuZCBzbG93aW5nIHRoaW5ncyBkb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGZldGNoQ2FjaGVkIH0gZnJvbSAnLi4vdXRpbHMvbmV0d29yayc7XG5cbi8qKlxuICogRG93bmxvYWRzIGFueSBVUkwgaW1wb3J0cywgbGlrZSBHb29nbGUgQW5hbHl0aWNzLCBpbnRvIHZpcnR1YWwgbW9kdWxlcyBzbyB0aGV5IGFyZSBidW5kbGVkIHdpdGhcbiAqIHRoZSBleHRlbnNpb24gaW5zdGVhZCBvZiBkZXBlbmRpbmcgb24gcmVtb3RlIGNvZGUgYXQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IFwidXJsOmh0dHBzOi8vZ29vZ2xlLXRhZ21hbmFnZXIuY29tL2d0YWc/aWQ9WFlaXCI7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZChjb25maWc6IEludGVybmFsQ29uZmlnKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmRvd25sb2FkJyxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZC5zdGFydHNXaXRoKCd1cmw6JykpIHJldHVybiAnXFwwJyArIGlkO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKCdcXDB1cmw6JykpIHJldHVybjtcblxuICAgICAgLy8gTG9hZCBmaWxlIGZyb20gbmV0d29yayBvciBjYWNoZVxuICAgICAgY29uc3QgdXJsID0gaWQucmVwbGFjZSgnXFwwdXJsOicsICcnKTtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaENhY2hlZCh1cmwsIGNvbmZpZyk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgSFRNTCBmaWxlcyBvdXRwdXQgYnkgYSBtdWx0aXBhZ2UgYnVpbGQgYXJlIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLiBUaGlzIGRvZXMgdHdvXG4gKiB0aGluZ3M6XG4gKlxuICogMS4gTW92ZXMgdGhlIEhNVEwgZmlsZXMgdG8gdGhlaXIgZmluYWwgbG9jYXRpb24gYXQgYDxvdXREaXI+LzxlbnRyeXBvaW50Lm5hbWU+Lmh0bWxgLlxuICogMi4gVXBkYXRlcyB0aGUgYnVuZGxlIHNvIGl0IHN1bW1hcml6ZXMgdGhlIGZpbGVzIGNvcnJlY3RseSBpbiB0aGUgcmV0dXJuZWQgYnVpbGQgb3V0cHV0LlxuICpcbiAqIEFzc2V0cyAoSlMgYW5kIENTUykgYXJlIG91dHB1dCB0byB0aGUgYDxvdXREaXI+L2Fzc2V0c2AgZGlyZWN0b3J5LCBhbmQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZC5cbiAqIEhUTUwgZmlsZXMgYWNjZXNzIHRoZW0gdmlhIGFic29sdXRlIFVSTHMsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGFueSBpbXBvcnQgcGF0aHMgaW4gdGhlIEhUTUxcbiAqIGZpbGVzIGVpdGhlci5cbiAqXG4gKiBUSElTIFBMVUdJTiBTSE9VTEQgT05MWSBCRSBBUFBMSUVEIFRPIE1VTFRJUEFHRSBCVUlMRFMuIEl0IHNob3VsZCBub3QgYmUgYWRkZWQgdG8gZXZlcnkgYnVpbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBhZ2VNb3ZlKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6bXVsdGlwYWdlLW1vdmUnLFxuICAgIGFzeW5jIHdyaXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgZm9yIChjb25zdCBvbGRCdW5kbGVQYXRoIGluIGJ1bmRsZSkge1xuICAgICAgICAvLyBvbGRCdW5kbGVQYXRoID0gJ2VudHJ5cG9pbnRzL3BvcHVwLmh0bWwnIG9yICdlbnRyeXBvaW50cy9vcHRpb25zL2luZGV4Lmh0bWwnXG5cbiAgICAgICAgLy8gRmluZCBhIG1hdGNoaW5nIGVudHJ5cG9pbnQgLSBvbGRCdW5kbGVQYXRoIGlzIHRoZSBzYW1lIGFzIGVuZCBlbmQgb2YgdGhlIGlucHV0IHBhdGguXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBlbnRyeXBvaW50cy5maW5kKFxuICAgICAgICAgIChlbnRyeSkgPT4gISFub3JtYWxpemVQYXRoKGVudHJ5LmlucHV0UGF0aCkuZW5kc1dpdGgob2xkQnVuZGxlUGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChlbnRyeXBvaW50ID09IG51bGwpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdObyBlbnRyeXBvaW50IGZvdW5kIGZvcicsIG9sZEJ1bmRsZVBhdGgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBuZXcgYnVuZGxlIHBhdGhcbiAgICAgICAgY29uc3QgbmV3QnVuZGxlUGF0aCA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgICBleHRuYW1lKG9sZEJ1bmRsZVBhdGgpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobmV3QnVuZGxlUGF0aCA9PT0gb2xkQnVuZGxlUGF0aCkge1xuICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAnSFRNTCBmaWxlIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24nLFxuICAgICAgICAgICAgb2xkQnVuZGxlUGF0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBmaWxlIGFuZCB1cGRhdGUgYnVuZGxlXG4gICAgICAgIC8vIERvIHRoaXMgaW5zaWRlIGEgbXV0ZXggbG9jayBzbyBpdCBvbmx5IHJ1bnMgb25lIGF0IGEgdGltZSBmb3IgY29uY3VycmVudCBtdWx0aXBhZ2UgYnVpbGRzXG4gICAgICAgIGNvbnN0IG9sZEFic1BhdGggPSByZXNvbHZlKGNvbmZpZy5vdXREaXIsIG9sZEJ1bmRsZVBhdGgpO1xuICAgICAgICBjb25zdCBuZXdBYnNQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBuZXdCdW5kbGVQYXRoKTtcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKGRpcm5hbWUobmV3QWJzUGF0aCkpO1xuICAgICAgICBhd2FpdCBmcy5tb3ZlKG9sZEFic1BhdGgsIG5ld0Fic1BhdGgsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlbmFtZWRDaHVuayA9IHtcbiAgICAgICAgICAuLi5idW5kbGVbb2xkQnVuZGxlUGF0aF0sXG4gICAgICAgICAgZmlsZU5hbWU6IG5ld0J1bmRsZVBhdGgsXG4gICAgICAgIH07XG4gICAgICAgIGRlbGV0ZSBidW5kbGVbb2xkQnVuZGxlUGF0aF07XG4gICAgICAgIGJ1bmRsZVtuZXdCdW5kbGVQYXRoXSA9IHJlbmFtZWRDaHVuaztcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVVuaW1wb3J0IH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSAncGF0aCc7XG5cbmNvbnN0IEVOQUJMRURfRVhURU5TSU9OUzogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHVuZGVmaW5lZD4gPSB7XG4gICcuanMnOiB0cnVlLFxuICAnLmpzeCc6IHRydWUsXG4gICcudHMnOiB0cnVlLFxuICAnLnRzeCc6IHRydWUsXG4gICcudnVlJzogdHJ1ZSxcbiAgJy5zdmVsdGUnOiB0cnVlLFxufTtcblxuLyoqXG4gKiBJbmplY3QgYW55IGdsb2JhbCBpbXBvcnRzIGRlZmluZWQgYnkgdW5pbXBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW1wb3J0KGNvbmZpZzogSW50ZXJuYWxDb25maWcpOiBQbHVnaW4ge1xuICBjb25zdCBvcHRpb25zID0gZ2V0VW5pbXBvcnRPcHRpb25zKGNvbmZpZyk7XG4gIGNvbnN0IHVuaW1wb3J0ID0gY3JlYXRlVW5pbXBvcnQob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OnVuaW1wb3J0JyxcbiAgICBhc3luYyBjb25maWcoKSB7XG4gICAgICBhd2FpdCB1bmltcG9ydC5zY2FuSW1wb3J0c0Zyb21EaXIodW5kZWZpbmVkLCB7IGN3ZDogY29uZmlnLnNyY0RpciB9KTtcbiAgICB9LFxuICAgIGFzeW5jIHRyYW5zZm9ybShjb2RlLCBpZCkge1xuICAgICAgY29uc3QgZXh0ID0gZXh0bmFtZShpZCk7XG4gICAgICBpZiAoRU5BQkxFRF9FWFRFTlNJT05TW2V4dF0pIHJldHVybiB1bmltcG9ydC5pbmplY3RJbXBvcnRzKGNvZGUsIGlkKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFVuaW1wb3J0T3B0aW9ucyB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbWVyZ2VDb25maWcgfSBmcm9tICd2aXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaW1wb3J0T3B0aW9ucyhcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPiB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBQYXJ0aWFsPFVuaW1wb3J0T3B0aW9ucz4gPSB7XG4gICAgZGVidWdMb2c6IGNvbmZpZy5sb2dnZXIuZGVidWcsXG4gICAgaW1wb3J0czogW3sgbmFtZTogJ2RlZmluZUNvbmZpZycsIGZyb206ICd3eHQnIH1dLFxuICAgIHByZXNldHM6IFt7IHBhY2thZ2U6ICd3eHQvY2xpZW50JyB9LCB7IHBhY2thZ2U6ICd3eHQvYnJvd3NlcicgfV0sXG4gICAgd2FybjogY29uZmlnLmxvZ2dlci53YXJuLFxuICAgIGRpcnM6IFsnLi9jb21wb25lbnRzLyonLCAnLi9jb21wb3NhYmxlcy8qJywgJy4vaG9va3MvKicsICcuL3V0aWxzLyonXSxcbiAgfTtcblxuICByZXR1cm4gbWVyZ2VDb25maWcoXG4gICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgY29uZmlnLmltcG9ydHMsXG4gICkgYXMgUGFydGlhbDxVbmltcG9ydE9wdGlvbnM+O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBXcmFwcyBhIHVzZXIncyBlbnRyeXBvaW50IHdpdGggYSB2aXR1YWwgdmVyc2lvbiB3aXRoIGFkZGl0aW9uYWwgbG9naWMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXJ0dWFsRW50cnlwb2luKFxuICB0eXBlOiBFbnRyeXBvaW50Wyd0eXBlJ10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQbHVnaW4ge1xuICBjb25zdCB2aXJ0dWFsSWQgPSBgdmlydHVhbDp3eHQtJHt0eXBlfT9gO1xuICBjb25zdCByZXNvbHZlZFZpcnR1YWxJZCA9IGBcXDAke3ZpcnR1YWxJZH1gO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogYHd4dDp2aXJ0dWFsLWVudHJ5cG9pbnRgLFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgLy8gSWQgZG9lc24ndCBzdGFydCB3aXRoIHByZWZpeCwgaXQgbG9va3MgbGlrZSB0aGlzOlxuICAgICAgLy8gL3BhdGgvdG8vcHJvamVjdC92aXJ0dWFsOmJhY2tncm91bmQ/L3BhdGgvdG8vcHJvamVjdC9lbnRyeXBvaW50cy9iYWNrZ3JvdW5kLnRzXG4gICAgICBjb25zdCBpbmRleCA9IGlkLmluZGV4T2YodmlydHVhbElkKTtcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgY29uc3QgaW5wdXRQYXRoID0gbm9ybWFsaXplUGF0aChpZC5zdWJzdHJpbmcoaW5kZXggKyB2aXJ0dWFsSWQubGVuZ3RoKSk7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRWaXJ0dWFsSWQgKyBpbnB1dFBhdGg7XG4gICAgfSxcbiAgICBhc3luYyBsb2FkKGlkKSB7XG4gICAgICBpZiAoIWlkLnN0YXJ0c1dpdGgocmVzb2x2ZWRWaXJ0dWFsSWQpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlucHV0UGF0aCA9IGlkLnJlcGxhY2UocmVzb2x2ZWRWaXJ0dWFsSWQsICcnKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICAgYG5vZGVfbW9kdWxlcy93eHQvZGlzdC92aXJ0dWFsLW1vZHVsZXMvJHt0eXBlfS1lbnRyeXBvaW50LmpzYCxcbiAgICAgICAgKSxcbiAgICAgICAgJ3V0Zi04JyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShgdmlydHVhbDp1c2VyLSR7dHlwZX1gLCBpbnB1dFBhdGgpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgcGF0aHMgZnJvbSAndml0ZS10c2NvbmZpZy1wYXRocyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0c2NvbmZpZ1BhdGhzKGNvbmZpZzogSW50ZXJuYWxDb25maWcpIHtcbiAgY29uc3QgZm46IHR5cGVvZiBwYXRocyA9XG4gICAgdHlwZW9mIHBhdGhzID09PSAnZnVuY3Rpb24nID8gcGF0aHMgOiAocGF0aHMgYXMgYW55KS5kZWZhdWx0O1xuICByZXR1cm4gZm4oe1xuICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcblxuLyoqXG4gKiBJbiBkZXYgbW9kZSwgaWYgdGhlcmUncyBub3QgYSBiYWNrZ3JvdW5kIHNjcmlwdCBsaXN0ZWQsIHdlIG5lZWQgdG8gYWRkIG9uZS5cbiAqXG4gKiBUaGlzIGRlZmluZSdzIGEgdmlydHVhbCBtb2R1bGUgdGhhdCBpcyBiYXNpY2FsbHkganVzdCBhIG5vb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wQmFja2dyb3VuZCgpOiBQbHVnaW4ge1xuICBjb25zdCB2aXJ0dWFsTW9kdWxlSWQgPSBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQ7XG4gIGNvbnN0IHJlc29sdmVkVmlydHVhbE1vZHVsZUlkID0gJ1xcMCcgKyB2aXJ0dWFsTW9kdWxlSWQ7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3d4dDpub29wLWJhY2tncm91bmQnLFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgaWYgKGlkID09PSB2aXJ0dWFsTW9kdWxlSWQpIHJldHVybiByZXNvbHZlZFZpcnR1YWxNb2R1bGVJZDtcbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGlmIChpZCA9PT0gcmVzb2x2ZWRWaXJ0dWFsTW9kdWxlSWQpIHtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyBkZWZpbmVCYWNrZ3JvdW5kIH0gZnJvbSAnd3h0L2NsaWVudCc7XFxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQmFja2dyb3VuZCgoKSA9PiB2b2lkIDApYDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEID0gJ3ZpcnR1YWw6dXNlci1iYWNrZ3JvdW5kJztcbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2VudHJ5cG9pbnRzJztcblxuLyoqXG4gKiBSZW5hbWUgQ1NTIGVudHJ5cG9pbnQgb3V0cHV0cyB0byBlbnN1cmUgYSBKUyBmaWxlIGlzIG5vdCBnZW5lcmF0ZWQsIGFuZCB0aGF0IHRoZSBDU1MgZmlsZSBpc1xuICogcGxhY2VkIGluIHRoZSBjb3JyZWN0IHBsYWNlLlxuICpcbiAqIEl0OlxuICogMS4gUmVuYW1lcyBDU1MgZmlsZXMgdG8gdGhlaXIgZmluYWwgcGF0aHNcbiAqIDIuIFJlbW92ZXMgdGhlIEpTIGZpbGUgdGhhdCBnZXQncyBvdXRwdXQgYnkgbGliIG1vZGVcbiAqXG4gKiBUSElTIFBMVUdJTiBTSE9VTEQgT05MWSBCRSBBUFBMSUVEIFRPIENTUyBMSUIgTU9ERSBCVUlMRFMuIEl0IHNob3VsZCBub3QgYmUgYWRkZWQgdG8gZXZlcnkgYnVpbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NFbnRyeXBvaW50cyhcbiAgZW50cnlwb2ludDogRW50cnlwb2ludCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmNzcy1lbnRyeXBvaW50JyxcbiAgICBjb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWlsZDoge1xuICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogKCkgPT5cbiAgICAgICAgICAgICAgICBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChlbnRyeXBvaW50LCBjb25maWcub3V0RGlyLCAnLmNzcycpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIGdlbmVyYXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgT2JqZWN0LmtleXMoYnVuZGxlKS5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuanMnKSkgZGVsZXRlIGJ1bmRsZVtmaWxlXTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEZzQ2FjaGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5cbi8qKlxuICogQSBiYXNpYyBmaWxlIHN5c3RlbSBjYWNoZSBzdG9yZWQgYXQgYDxzcmNEaXI+Ly53eHQvY2FjaGUvPGtleT5gLiBKdXN0IGNhY2hlcyBhIHN0cmluZyBpbiBhXG4gKiBmaWxlIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBwYXJhbSBzcmNEaXIgQWJzb2x1dGUgcGF0aCB0byBzb3VyY2UgZGlyZWN0b3J5LiBTZWUgYEludGVybmFsQ29uZmlnLnNyY0RpcmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZzQ2FjaGUod3h0RGlyOiBzdHJpbmcpOiBGc0NhY2hlIHtcbiAgY29uc3QgZ2V0UGF0aCA9IChrZXk6IHN0cmluZykgPT5cbiAgICByZXNvbHZlKHd4dERpciwgJ2NhY2hlJywgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChrZXkpO1xuICAgICAgYXdhaXQgZW5zdXJlRGlyKGRpcm5hbWUocGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGgsIHZhbHVlLCAndXRmLTgnKTtcbiAgICB9LFxuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChrZXkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueTsgdHlwZTogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiAnX19NQU5JRkVTVF9WRVJTSU9OX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgICB0eXBlOiBgMiB8IDNgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fQlJPV1NFUl9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlcixcbiAgICAgIHR5cGU6IGBzdHJpbmdgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfQ0hST01FX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnY2hyb21lJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX0ZJUkVGT1hfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX1NBRkFSSV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19FREdFX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnZWRnZScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19PUEVSQV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ29wZXJhJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0NPTU1BTkRfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmNvbW1hbmQsXG4gICAgICB0eXBlOiBgXCJidWlsZFwiIHwgXCJzZXJ2ZVwiYCxcbiAgICB9LFxuICBdO1xufVxuIiwgImltcG9ydCB7IEJ1aWxkT3V0cHV0LCBXeHREZXZTZXJ2ZXIsIElubGluZUNvbmZpZyB9IGZyb20gJy4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyBnZXRJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgZGV0ZWN0RGV2Q2hhbmdlcyB9IGZyb20gJy4vY29yZS91dGlscy9kZXRlY3REZXZDaGFuZ2VzJztcbmltcG9ydCB7IE11dGV4IH0gZnJvbSAnYXN5bmMtbXV0ZXgnO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE91dHB1dEZpbGUgfSBmcm9tICcuL2NvcmUvdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgYnVpbGRJbnRlcm5hbCwgcmVidWlsZCB9IGZyb20gJy4vY29yZS9idWlsZCc7XG5pbXBvcnQge1xuICBnZXRTZXJ2ZXJJbmZvLFxuICByZWxvYWRDb250ZW50U2NyaXB0cyxcbiAgcmVsb2FkSHRtbFBhZ2VzLFxuICBzZXR1cFNlcnZlcixcbn0gZnJvbSAnLi9jb3JlL3NlcnZlcic7XG5cbmV4cG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3R5cGVzL2V4dGVybmFsJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS91dGlscy9kZWZpbmVDb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3V0aWxzL2RlZmluZVJ1bm5lckNvbmZpZyc7XG5cbi8qKlxuICogQnVuZGxlcyB0aGUgZXh0ZW5zaW9uIGZvciBwcm9kdWN0aW9uLiBSZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgYnVpbGQgcmVzdWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGQoY29uZmlnOiBJbmxpbmVDb25maWcpOiBQcm9taXNlPEJ1aWxkT3V0cHV0PiB7XG4gIGNvbnN0IGludGVybmFsQ29uZmlnID0gYXdhaXQgZ2V0SW50ZXJuYWxDb25maWcoY29uZmlnLCAnYnVpbGQnKTtcbiAgcmV0dXJuIGF3YWl0IGJ1aWxkSW50ZXJuYWwoaW50ZXJuYWxDb25maWcpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZXYgc2VydmVyLCBwcmUtYnVpbGRzIGFsbCB0aGUgZmlsZXMgdGhhdCBuZWVkIHRvIGV4aXN0IHRvIGxvYWQgdGhlIGV4dGVuc2lvbiwgYW5kIG9wZW5cbiAqIHRoZSBicm93c2VyIHdpdGggdGhlIGV4dGVuc2lvbiBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXIoXG4gIGNvbmZpZz86IElubGluZUNvbmZpZyxcbik6IFByb21pc2U8V3h0RGV2U2VydmVyPiB7XG4gIGNvbnN0IHNlcnZlckluZm8gPSBhd2FpdCBnZXRTZXJ2ZXJJbmZvKCk7XG5cbiAgY29uc3QgZ2V0TGF0ZXN0SW50ZXJuYWxDb25maWcgPSAoKSA9PiB7XG4gICAgY29uc3Qgdml0ZUNvbmZpZzogdml0ZS5JbmxpbmVDb25maWcgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgICAgc2VydmVySW5mby52aXRlU2VydmVyQ29uZmlnLFxuICAgICAgY29uZmlnPy52aXRlID8/IHt9LFxuICAgICk7XG4gICAgcmV0dXJuIGdldEludGVybmFsQ29uZmlnKHsgLi4uY29uZmlnLCB2aXRlOiB2aXRlQ29uZmlnIH0sICdzZXJ2ZScpO1xuICB9O1xuXG4gIGxldCBpbnRlcm5hbENvbmZpZyA9IGF3YWl0IGdldExhdGVzdEludGVybmFsQ29uZmlnKCk7XG4gIGNvbnN0IHNlcnZlciA9IGF3YWl0IHNldHVwU2VydmVyKHNlcnZlckluZm8sIGludGVybmFsQ29uZmlnKTtcbiAgaW50ZXJuYWxDb25maWcuc2VydmVyID0gc2VydmVyO1xuXG4gIGNvbnN0IGZpbGVDaGFuZ2VkTXV0ZXggPSBuZXcgTXV0ZXgoKTtcbiAgY29uc3QgY2hhbmdlUXVldWU6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+ID0gW107XG5cbiAgc2VydmVyLndzLm9uKCd3eHQ6YmFja2dyb3VuZC1pbml0aWFsaXplZCcsICgpID0+IHtcbiAgICAvLyBSZWdpc3RlciBjb250ZW50IHNjcmlwdHMgZm9yIHRoZSBmaXJzdCB0aW1lIHNpbmNlIHRoZXkncmUgbm90IGxpc3RlZCBpbiB0aGUgbWFuaWZlc3RcbiAgICByZWxvYWRDb250ZW50U2NyaXB0cyhzZXJ2ZXIuY3VycmVudE91dHB1dC5zdGVwcywgaW50ZXJuYWxDb25maWcsIHNlcnZlcik7XG4gIH0pO1xuXG4gIHNlcnZlci53YXRjaGVyLm9uKCdhbGwnLCBhc3luYyAoZXZlbnQsIHBhdGgsIF9zdGF0cykgPT4ge1xuICAgIC8vIEhlcmUsIFwicGF0aFwiIGlzIGEgbm9uLW5vcm1hbGl6ZWQgcGF0aCAoaWU6IEM6XFxcXHVzZXJzXFxcXC4uLiBpbnN0ZWFkIG9mIEM6L3VzZXJzLy4uLilcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKGludGVybmFsQ29uZmlnLm91dEJhc2VEaXIpKSByZXR1cm47XG4gICAgY2hhbmdlUXVldWUucHVzaChbZXZlbnQsIHBhdGhdKTtcblxuICAgIGF3YWl0IGZpbGVDaGFuZ2VkTXV0ZXgucnVuRXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gY2hhbmdlUXVldWUuc3BsaWNlKDAsIGNoYW5nZVF1ZXVlLmxlbmd0aCk7XG4gICAgICBpZiAoZmlsZUNoYW5nZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBkZXRlY3REZXZDaGFuZ2VzKGZpbGVDaGFuZ2VzLCBzZXJ2ZXIuY3VycmVudE91dHB1dCk7XG4gICAgICBpZiAoY2hhbmdlcy50eXBlID09PSAnbm8tY2hhbmdlJykgcmV0dXJuO1xuXG4gICAgICAvLyBMb2cgdGhlIGVudHJ5cG9pbnRzIHRoYXQgd2VyZSBlZmZlY3RlZFxuICAgICAgaW50ZXJuYWxDb25maWcubG9nZ2VyLmluZm8oXG4gICAgICAgIGBDaGFuZ2VkOiAke0FycmF5LmZyb20obmV3IFNldChmaWxlQ2hhbmdlcy5tYXAoKGNoYW5nZSkgPT4gY2hhbmdlWzFdKSkpXG4gICAgICAgICAgLm1hcCgoZmlsZSkgPT4gcGMuZGltKHJlbGF0aXZlKGludGVybmFsQ29uZmlnLnJvb3QsIGZpbGUpKSlcbiAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlYnVpbHROYW1lcyA9IGNoYW5nZXMucmVidWlsZEdyb3Vwc1xuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBjLmN5YW4oXG4gICAgICAgICAgICByZWxhdGl2ZShpbnRlcm5hbENvbmZpZy5vdXREaXIsIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKGVudHJ5LCAnJykpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKHBjLmRpbSgnLCAnKSk7XG5cbiAgICAgIC8vIEdldCBsYXRlc3QgY29uZmlnIGFuZCBSZWJ1aWxkIGdyb3VwcyB3aXRoIGNoYW5nZXNcbiAgICAgIGludGVybmFsQ29uZmlnID0gYXdhaXQgZ2V0TGF0ZXN0SW50ZXJuYWxDb25maWcoKTtcbiAgICAgIGludGVybmFsQ29uZmlnLnNlcnZlciA9IHNlcnZlcjtcbiAgICAgIGNvbnN0IHsgb3V0cHV0OiBuZXdPdXRwdXQgfSA9IGF3YWl0IHJlYnVpbGQoXG4gICAgICAgIGludGVybmFsQ29uZmlnLFxuICAgICAgICAvLyBUT0RPOiB0aGlzIGV4Y2x1ZGVzIG5ldyBlbnRyeXBvaW50cywgc28gdGhleSdyZSBub3QgYnVpbHQgdW50aWwgdGhlIGRldiBjb21tYW5kIGlzIHJlc3RhcnRlZFxuICAgICAgICBjaGFuZ2VzLnJlYnVpbGRHcm91cHMsXG4gICAgICAgIGNoYW5nZXMuY2FjaGVkT3V0cHV0LFxuICAgICAgKTtcbiAgICAgIHNlcnZlci5jdXJyZW50T3V0cHV0ID0gbmV3T3V0cHV0O1xuXG4gICAgICAvLyBQZXJmb3JtIHJlbG9hZHNcbiAgICAgIHN3aXRjaCAoY2hhbmdlcy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2V4dGVuc2lvbi1yZWxvYWQnOlxuICAgICAgICAgIHNlcnZlci5yZWxvYWRFeHRlbnNpb24oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaHRtbC1yZWxvYWQnOlxuICAgICAgICAgIHJlbG9hZEh0bWxQYWdlcyhjaGFuZ2VzLnJlYnVpbGRHcm91cHMsIHNlcnZlciwgaW50ZXJuYWxDb25maWcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdC1yZWxvYWQnOlxuICAgICAgICAgIHJlbG9hZENvbnRlbnRTY3JpcHRzKGNoYW5nZXMuY2hhbmdlZFN0ZXBzLCBpbnRlcm5hbENvbmZpZywgc2VydmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGEuc3VjY2VzcyhgUmVsb2FkZWQ6ICR7cmVidWlsdE5hbWVzfWApO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBhbGwgZWxlbWVudHMgb2YgdGhlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlcnk8VD4oXG4gIGFycmF5OiBUW10sXG4gIHByZWRpY2F0ZTogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4pOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKylcbiAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpXSwgaSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRPdXRwdXQsIEJ1aWxkU3RlcE91dHB1dCwgRW50cnlwb2ludEdyb3VwIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGV2ZXJ5IH0gZnJvbSAnLi9hcnJheXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIENvbXBhcmUgdGhlIGNoYW5nZWQgZmlsZXMgdnMgdGhlIGJ1aWxkIG91dHB1dCBhbmQgZGV0ZXJtaW5lIHdoYXQga2luZCBvZiByZWxvYWQgbmVlZHMgdG8gaGFwcGVuOlxuICpcbiAqIC0gRG8gbm90aGluZ1xuICogICAtIENTUyBvciBKUyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhbiBIVE1MIHBhZ2UgaXMgY2hhbmdlZCAtIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZVxuICogICAgIGRldiBzZXJ2ZXJcbiAqICAgLSBDaGFuZ2UgaXNuJ3QgdXNlZCBieSBhbnkgb2YgdGhlIGVudHJ5cG9pbnRzXG4gKiAtIFJlbG9hZCBDb250ZW50IHNjcmlwdFxuICogICAtIENTUyBvciBKUyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRlbnQgc2NyaXB0XG4gKiAgIC0gQmFja2dyb3VuZCBzY3JpcHQgd2lsbCBiZSB0b2xkIHRvIHJlbG9hZCB0aGUgY29udGVudCBzY3JpcHRcbiAqIC0gUmVsb2FkIEhUTUwgZmlsZVxuICogICAtIEhUTUwgZmlsZSBpdHNlbGYgaXMgc2F2ZWQgLSBITVIgZG9lc24ndCBoYW5kbGUgdGhpcyBiZWNhdXNlIHRoZSBIVE1MIHBhZ2VzIGFyZSBwcmUtcmVuZGVyZWRcbiAqICAgLSBDaHJvbWUgaXMgT0sgcmVsb2FkaW5nIHRoZSBwYWdlIHdoZW4gdGhlIEhUTUwgZmlsZSBpcyBjaGFuZ2VkIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSB3aG9sZVxuICogICAgIGV4dGVuc2lvbi4gTm90IHN1cmUgYWJvdXQgZmlyZWZveCwgdGhpcyBtaWdodCBuZWVkIHRvIGNoYW5nZSB0byBhbiBleHRlbnNpb24gcmVsb2FkXG4gKiAtIFJlbG9hZCBleHRlbnNpb25cbiAqICAgLSBCYWNrZ3JvdW5kIHNjcmlwdCBpcyBjaGFuZ2VkXG4gKiAgIC0gTWFuaWZlc3QgaXMgZGlmZmVyZW50XG4gKiAtIFJlc3RhcnQgYnJvd3NlclxuICogICAtIENvbmZpZyBmaWxlIGNoYW5nZWQgKHd4dC5jb25maWcudHMsIC5lbnYsIHdlYi1leHQuY29uZmlnLnRzLCBldGMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REZXZDaGFuZ2VzKFxuICBjaGFuZ2VkRmlsZXM6IFtldmVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmddW10sXG4gIGN1cnJlbnRPdXRwdXQ6IEJ1aWxkT3V0cHV0IHwgdW5kZWZpbmVkLFxuKTogRGV2TW9kZUNoYW5nZSB7XG4gIGlmIChjdXJyZW50T3V0cHV0ID09IG51bGwpIHJldHVybiB7IHR5cGU6ICduby1jaGFuZ2UnIH07XG5cbiAgY29uc3QgY2hhbmdlZFN0ZXBzID0gbmV3IFNldChcbiAgICBjaGFuZ2VkRmlsZXMuZmxhdE1hcCgoY2hhbmdlZEZpbGUpID0+XG4gICAgICBmaW5kRWZmZWN0ZWRTdGVwcyhjaGFuZ2VkRmlsZSwgY3VycmVudE91dHB1dCksXG4gICAgKSxcbiAgKTtcbiAgaWYgKGNoYW5nZWRTdGVwcy5zaXplID09PSAwKSByZXR1cm4geyB0eXBlOiAnbm8tY2hhbmdlJyB9O1xuXG4gIGNvbnN0IHVuY2hhbmdlZE91dHB1dDogQnVpbGRPdXRwdXQgPSB7XG4gICAgbWFuaWZlc3Q6IGN1cnJlbnRPdXRwdXQubWFuaWZlc3QsXG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH07XG4gIGNvbnN0IGNoYW5nZWRPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBjdXJyZW50T3V0cHV0Lm1hbmlmZXN0LFxuICAgIHN0ZXBzOiBbXSxcbiAgICBwdWJsaWNBc3NldHM6IFtdLFxuICB9O1xuXG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjdXJyZW50T3V0cHV0LnN0ZXBzKSB7XG4gICAgaWYgKGNoYW5nZWRTdGVwcy5oYXMoc3RlcCkpIHtcbiAgICAgIGNoYW5nZWRPdXRwdXQuc3RlcHMucHVzaChzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5jaGFuZ2VkT3V0cHV0LnN0ZXBzLnB1c2goc3RlcCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgYXNzZXQgb2YgY3VycmVudE91dHB1dC5wdWJsaWNBc3NldHMpIHtcbiAgICBpZiAoY2hhbmdlZFN0ZXBzLmhhcyhhc3NldCkpIHtcbiAgICAgIGNoYW5nZWRPdXRwdXQucHVibGljQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmNoYW5nZWRPdXRwdXQucHVibGljQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzT25seUh0bWxDaGFuZ2VzID1cbiAgICBjaGFuZ2VkRmlsZXMubGVuZ3RoID4gMCAmJlxuICAgIGV2ZXJ5KGNoYW5nZWRGaWxlcywgKFtfLCBmaWxlXSkgPT4gZmlsZS5lbmRzV2l0aCgnLmh0bWwnKSk7XG4gIGlmIChpc09ubHlIdG1sQ2hhbmdlcykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaHRtbC1yZWxvYWQnLFxuICAgICAgY2FjaGVkT3V0cHV0OiB1bmNoYW5nZWRPdXRwdXQsXG4gICAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGlzT25seUNvbnRlbnRTY3JpcHRzID1cbiAgICBjaGFuZ2VkT3V0cHV0LnN0ZXBzLmxlbmd0aCA+IDAgJiZcbiAgICBldmVyeShcbiAgICAgIGNoYW5nZWRPdXRwdXQuc3RlcHMuZmxhdE1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgICAoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09ICdjb250ZW50LXNjcmlwdCcsXG4gICAgKTtcbiAgaWYgKGlzT25seUNvbnRlbnRTY3JpcHRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdjb250ZW50LXNjcmlwdC1yZWxvYWQnLFxuICAgICAgY2FjaGVkT3V0cHV0OiB1bmNoYW5nZWRPdXRwdXQsXG4gICAgICBjaGFuZ2VkU3RlcHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMsXG4gICAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2V4dGVuc2lvbi1yZWxvYWQnLFxuICAgIGNhY2hlZE91dHB1dDogdW5jaGFuZ2VkT3V0cHV0LFxuICAgIHJlYnVpbGRHcm91cHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmVudHJ5cG9pbnRzKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgYSBzaW5nbGUgY2hhbmdlLCByZXR1cm4gYWxsIHRoZSBzdGVwIG9mIHRoZSBidWlsZCBvdXRwdXQgdGhhdCB3ZXJlIGVmZmVjdGVkIGJ5IGl0LlxuICovXG5mdW5jdGlvbiBmaW5kRWZmZWN0ZWRTdGVwcyhcbiAgY2hhbmdlZEZpbGU6IFtldmVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmddLFxuICBjdXJyZW50T3V0cHV0OiBCdWlsZE91dHB1dCxcbik6IERldGVjdGVkQ2hhbmdlW10ge1xuICBjb25zdCBjaGFuZ2VzOiBEZXRlY3RlZENoYW5nZVtdID0gW107XG4gIGNvbnN0IGNoYW5nZWRQYXRoID0gbm9ybWFsaXplUGF0aChjaGFuZ2VkRmlsZVsxXSk7XG5cbiAgY29uc3QgaXNDaHVua0VmZmVjdGVkID0gKFxuICAgIGNodW5rOiB2aXRlLlJvbGx1cC5PdXRwdXRDaHVuayB8IHZpdGUuUm9sbHVwLk91dHB1dEFzc2V0LFxuICApOiBib29sZWFuID0+XG4gICAgLy8gSWYgaXQncyBhbiBIVE1MIGZpbGUgd2l0aCB0aGUgc2FtZSBwYXRoLCBpcyBpcyBlZmZlY3RlZCBiZWNhdXNlIEhUTUwgZmlsZXMgbmVlZCB0byBiZSBwcmUtcmVuZGVyZWRcbiAgICAvLyBmaWxlTmFtZSBpcyBub3JtYWxpemVkLCByZWxhdGl2ZSBidW5kbGUgcGF0aFxuICAgIChjaHVuay50eXBlID09PSAnYXNzZXQnICYmIGNoYW5nZWRQYXRoLmVuZHNXaXRoKGNodW5rLmZpbGVOYW1lKSkgfHxcbiAgICAvLyBJZiBpdCdzIGEgY2h1bmsgdGhhdCBkZXBlbmRzIG9uIHRoZSBjaGFuZ2VkIGZpbGUsIGl0IGlzIGVmZmVjdGVkXG4gICAgLy8gbW9kdWxlSWRzIGFyZSBhYnNvbHV0ZSwgbm9ybWFsaXplZCBwYXRoc1xuICAgIChjaHVuay50eXBlID09PSAnY2h1bmsnICYmIGNodW5rLm1vZHVsZUlkcy5pbmNsdWRlcyhjaGFuZ2VkUGF0aCkpO1xuXG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjdXJyZW50T3V0cHV0LnN0ZXBzKSB7XG4gICAgY29uc3QgZWZmZWN0ZWRDaHVuayA9IHN0ZXAuY2h1bmtzLmZpbmQoKGNodW5rKSA9PiBpc0NodW5rRWZmZWN0ZWQoY2h1bmspKTtcbiAgICBpZiAoZWZmZWN0ZWRDaHVuaykgY2hhbmdlcy5wdXNoKHN0ZXApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ZWRBc3NldCA9IGN1cnJlbnRPdXRwdXQucHVibGljQXNzZXRzLmZpbmQoKGNodW5rKSA9PlxuICAgIGlzQ2h1bmtFZmZlY3RlZChjaHVuayksXG4gICk7XG4gIGlmIChlZmZlY3RlZEFzc2V0KSBjaGFuZ2VzLnB1c2goZWZmZWN0ZWRBc3NldCk7XG5cbiAgcmV0dXJuIGNoYW5nZXM7XG59XG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBmaWxlcyBjaGFuZ2VkLCB3aGF0IG5lZWRzIHJlYnVpbHQsIGFuZCB0aGUgdHlwZSBvZiByZWxvYWQgdGhhdCBpc1xuICogcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERldk1vZGVDaGFuZ2UgPVxuICB8IE5vQ2hhbmdlXG4gIHwgSHRtbFJlbG9hZFxuICB8IEV4dGVuc2lvblJlbG9hZFxuICB8IENvbnRlbnRTY3JpcHRSZWxvYWQ7XG4vLyB8IEJyb3dzZXJSZXN0YXJ0XG5cbmludGVyZmFjZSBOb0NoYW5nZSB7XG4gIHR5cGU6ICduby1jaGFuZ2UnO1xufVxuXG5pbnRlcmZhY2UgUmVidWlsZENoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlbnRyeXBvaW50cyB0aGF0IG5lZWQgcmVidWlsdC5cbiAgICovXG4gIHJlYnVpbGRHcm91cHM6IEVudHJ5cG9pbnRHcm91cFtdO1xuICAvKipcbiAgICogVGhlIHByZXZpb3VzIG91dHB1dCBzdHJpcHBlZCBvZiBhbnkgZmlsZXMgYXJlIGdvaW5nIHRvIGNoYW5nZS5cbiAgICovXG4gIGNhY2hlZE91dHB1dDogQnVpbGRPdXRwdXQ7XG59XG5cbmludGVyZmFjZSBIdG1sUmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdodG1sLXJlbG9hZCc7XG59XG5cbmludGVyZmFjZSBFeHRlbnNpb25SZWxvYWQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbiAgdHlwZTogJ2V4dGVuc2lvbi1yZWxvYWQnO1xufVxuXG4vLyBpbnRlcmZhY2UgQnJvd3NlclJlc3RhcnQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbi8vICAgdHlwZTogJ2Jyb3dzZXItcmVzdGFydCc7XG4vLyB9XG5cbmludGVyZmFjZSBDb250ZW50U2NyaXB0UmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdjb250ZW50LXNjcmlwdC1yZWxvYWQnO1xuICBjaGFuZ2VkU3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdO1xufVxuXG4vKipcbiAqIFdoZW4gZmlndXJpbmcgb3V0IHdoYXQgbmVlZHMgcmVsb2FkZWQsIHRoaXMgc3RvcmVzIHRoZSBzdGVwIHRoYXQgd2FzIGNoYW5nZWQsIG9yIHRoZSBwdWJsaWNcbiAqIGRpcmVjdG9yeSBhc3NldCB0aGF0IHdhcyBjaGFuZ2VkLiBJdCBkb2Vzbid0IGtub3cgd2hhdCB0eXBlIG9mIGNoYW5nZSBpcyByZXF1aXJlZCB5ZXQuIEp1c3QgYW5cbiAqIGludGVybWVkaWF0ZSB0eXBlLlxuICovXG50eXBlIERldGVjdGVkQ2hhbmdlID0gQnVpbGRTdGVwT3V0cHV0IHwgdml0ZS5Sb2xsdXAuT3V0cHV0QXNzZXQ7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7XG4gIEJ1aWxkT3V0cHV0LFxuICBCdWlsZFN0ZXBPdXRwdXQsXG4gIEVudHJ5cG9pbnQsXG4gIEVudHJ5cG9pbnRHcm91cCxcbiAgSW50ZXJuYWxDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHd4dFBsdWdpbnMgZnJvbSAnLi4vdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IHJlbW92ZUVtcHR5RGlycyB9IGZyb20gJy4uL3V0aWxzL3JlbW92ZUVtcHR5RGlycyc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRQdWJsaWNGaWxlcyB9IGZyb20gJy4uL3V0aWxzL3B1YmxpYyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEVudHJ5cG9pbnRzKFxuICBncm91cHM6IEVudHJ5cG9pbnRHcm91cFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPj4ge1xuICBjb25zdCBzdGVwczogQnVpbGRTdGVwT3V0cHV0W10gPSBbXTtcbiAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcbiAgICBjb25zdCBzdGVwID0gQXJyYXkuaXNBcnJheShncm91cClcbiAgICAgID8gYXdhaXQgYnVpbGRNdWx0aXBsZUVudHJ5cG9pbnRzKGdyb3VwLCBjb25maWcpXG4gICAgICA6IGF3YWl0IGJ1aWxkU2luZ2xlRW50cnlwb2ludChncm91cCwgY29uZmlnKTtcbiAgICBzdGVwcy5wdXNoKHN0ZXApO1xuICB9XG4gIGNvbnN0IHB1YmxpY0Fzc2V0cyA9IGF3YWl0IGNvcHlQdWJsaWNEaXJlY3RvcnkoY29uZmlnKTtcblxuICAvLyBSZW1vdmUgYW55IGVtcHR5IGRpcmVjdG9yaWVzIGZyb20gbW92aW5nIG91dHB1dHMgYXJvdW5kXG4gIGF3YWl0IHJlbW92ZUVtcHR5RGlycyhjb25maWcub3V0RGlyKTtcblxuICByZXR1cm4geyBwdWJsaWNBc3NldHMsIHN0ZXBzIH07XG59XG5cbi8qKlxuICogVXNlIFZpdGUncyBsaWIgbW9kZSArIElJRkUgZm9ybWF0IHRvIGJ1bmRsZSB0aGUgZW50cnlwb2ludCB0byBhIHNpbmdsZSBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZFNpbmdsZUVudHJ5cG9pbnQoXG4gIGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkU3RlcE91dHB1dD4ge1xuICAvLyBTaG91bGQgdGhpcyBlbnRyeXBvaW50IGJlIHdyYXBwZWQgYnkgdGhlIHZpdGUtcGx1Z2lucy92aXJ0dWFsRW50cnlwb2ludCBwbHVnaW4/XG4gIGNvbnN0IGlzVmlydHVhbCA9IFsnYmFja2dyb3VuZCcsICdjb250ZW50LXNjcmlwdCddLmluY2x1ZGVzKGVudHJ5cG9pbnQudHlwZSk7XG4gIGNvbnN0IGVudHJ5ID0gaXNWaXJ0dWFsXG4gICAgPyBgdmlydHVhbDp3eHQtJHtlbnRyeXBvaW50LnR5cGV9PyR7ZW50cnlwb2ludC5pbnB1dFBhdGh9YFxuICAgIDogZW50cnlwb2ludC5pbnB1dFBhdGg7XG5cbiAgY29uc3QgcGx1Z2luczogTm9uTnVsbGFibGU8dml0ZS5Vc2VyQ29uZmlnWydwbHVnaW5zJ10+ID0gW107XG4gIGlmIChcbiAgICBlbnRyeXBvaW50LnR5cGUgPT09ICdjb250ZW50LXNjcmlwdC1zdHlsZScgfHxcbiAgICBlbnRyeXBvaW50LnR5cGUgPT09ICd1bmxpc3RlZC1zdHlsZSdcbiAgKSB7XG4gICAgcGx1Z2lucy5wdXNoKHd4dFBsdWdpbnMuY3NzRW50cnlwb2ludHMoZW50cnlwb2ludCwgY29uZmlnKSk7XG4gIH1cblxuICBjb25zdCBsaWJNb2RlOiB2aXRlLlVzZXJDb25maWcgPSB7XG4gICAgcGx1Z2lucyxcbiAgICBidWlsZDoge1xuICAgICAgbGliOiB7XG4gICAgICAgIGVudHJ5LFxuICAgICAgICBmb3JtYXRzOiBbJ2lpZmUnXSxcbiAgICAgICAgbmFtZTogJ18nLFxuICAgICAgICBmaWxlTmFtZTogZW50cnlwb2ludC5uYW1lLFxuICAgICAgfSxcbiAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgLy8gVGhlcmUncyBvbmx5IGEgc2luZ2xlIG91dHB1dCBmb3IgdGhpcyBidWlsZCwgc28gd2UgdXNlIHRoZSBkZXNpcmVkIGJ1bmRsZSBwYXRoIGZvciB0aGVcbiAgICAgICAgICAvLyBlbnRyeSBvdXRwdXQgKGxpa2UgXCJjb250ZW50LXNjcmlwdHMvb3ZlcmxheS5qc1wiKVxuICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICAgICAgJy5qcycsXG4gICAgICAgICAgKSxcbiAgICAgICAgICAvLyBPdXRwdXQgY29udGVudCBzY3JpcHQgQ1NTIHRvIGFzc2V0cy8gd2l0aCBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHMuIERlZmF1bHRzIHRvXG4gICAgICAgICAgLy8gXCJbbmFtZV0uW2V4dF1cIiBpbiBsaWIgbW9kZSwgd2hpY2ggdXN1YWxseSByZXN1bHRzIGluIFwic3R5bGUuY3NzXCIuIFRoYXQgbWVhbnMgbXVsdGlwbGVcbiAgICAgICAgICAvLyBjb250ZW50IHNjcmlwdHMgd2l0aCBzdHlsZXMgd291bGQgb3ZlcndyaXRlIGVhY2ggb3RoZXIgaWYgaXQgd2VyZW4ndCBjaGFuZ2VkIGJlbG93LlxuICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBgYXNzZXRzLyR7ZW50cnlwb2ludC5uYW1lfS5bZXh0XWAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGVudHJ5Q29uZmlnID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICBsaWJNb2RlLFxuICAgIGNvbmZpZy52aXRlLFxuICApIGFzIHZpdGUuSW5saW5lQ29uZmlnO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZpdGUuYnVpbGQoZW50cnlDb25maWcpO1xuICByZXR1cm4ge1xuICAgIGVudHJ5cG9pbnRzOiBlbnRyeXBvaW50LFxuICAgIGNodW5rczogZ2V0QnVpbGRPdXRwdXRDaHVua3MocmVzdWx0KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBVc2UgVml0ZSdzIG11bHRpcGFnZSBidWlsZCB0byBidW5kbGUgYWxsIHRoZSBlbnRyeXBvaW50cyBpbiBhIHNpbmdsZSBzdGVwLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZE11bHRpcGxlRW50cnlwb2ludHMoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkU3RlcE91dHB1dD4ge1xuICBjb25zdCBtdWx0aVBhZ2U6IHZpdGUuVXNlckNvbmZpZyA9IHtcbiAgICBwbHVnaW5zOiBbd3h0UGx1Z2lucy5tdWx0aXBhZ2VNb3ZlKGVudHJ5cG9pbnRzLCBjb25maWcpXSxcbiAgICBidWlsZDoge1xuICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICBpbnB1dDogZW50cnlwb2ludHMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KChpbnB1dCwgZW50cnkpID0+IHtcbiAgICAgICAgICBpbnB1dFtlbnRyeS5uYW1lXSA9IGVudHJ5LmlucHV0UGF0aDtcbiAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH0sIHt9KSxcbiAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgLy8gSW5jbHVkZSBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHNcbiAgICAgICAgICBjaHVua0ZpbGVOYW1lczogJ2NodW5rcy9bbmFtZV0tW2hhc2hdLmpzJyxcbiAgICAgICAgICAvLyBJbmNsdWRlIGEgaGFzaCB0byBwcmV2ZW50IGNvbmZsaWN0c1xuICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiAnY2h1bmtzL1tuYW1lXS1baGFzaF0uanMnLFxuICAgICAgICAgIC8vIFdlIGNhbid0IGNvbnRyb2wgdGhlIFwibmFtZVwiLCBzbyB3ZSBuZWVkIGEgaGFzaCB0byBwcmV2ZW50IGNvbmZsaWN0c1xuICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAnYXNzZXRzL1tuYW1lXS1baGFzaF0uW2V4dF0nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGVudHJ5Q29uZmlnID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICBtdWx0aVBhZ2UsXG4gICAgY29uZmlnLnZpdGUsXG4gICkgYXMgdml0ZS5Vc2VyQ29uZmlnO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZpdGUuYnVpbGQoZW50cnlDb25maWcpO1xuICByZXR1cm4ge1xuICAgIGVudHJ5cG9pbnRzLFxuICAgIGNodW5rczogZ2V0QnVpbGRPdXRwdXRDaHVua3MocmVzdWx0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QnVpbGRPdXRwdXRDaHVua3MoXG4gIHJlc3VsdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiB2aXRlLmJ1aWxkPj4sXG4pOiBCdWlsZFN0ZXBPdXRwdXRbJ2NodW5rcyddIHtcbiAgaWYgKCdvbicgaW4gcmVzdWx0KSB0aHJvdyBFcnJvcignd3h0IGRvZXMgbm90IHN1cHBvcnQgdml0ZSB3YXRjaCBtb2RlLicpO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4gcmVzdWx0LmZsYXRNYXAoKHsgb3V0cHV0IH0pID0+IG91dHB1dCk7XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5UHVibGljRGlyZWN0b3J5KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZE91dHB1dFsncHVibGljQXNzZXRzJ10+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBnZXRQdWJsaWNGaWxlcyhjb25maWcpO1xuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgcHVibGljQXNzZXRzOiBCdWlsZE91dHB1dFsncHVibGljQXNzZXRzJ10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3Qgc3JjUGF0aCA9IHJlc29sdmUoY29uZmlnLnB1YmxpY0RpciwgZmlsZSk7XG4gICAgY29uc3Qgb3V0UGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgZmlsZSk7XG5cbiAgICBhd2FpdCBmcy5lbnN1cmVEaXIoZGlybmFtZShvdXRQYXRoKSk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoc3JjUGF0aCwgb3V0UGF0aCk7XG4gICAgcHVibGljQXNzZXRzLnB1c2goe1xuICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgIGZpbGVOYW1lOiBmaWxlLFxuICAgICAgbmFtZTogZmlsZSxcbiAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICBzb3VyY2U6IGF3YWl0IGZzLnJlYWRGaWxlKHNyY1BhdGgpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHB1YmxpY0Fzc2V0cztcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVFbXB0eURpcnMoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcik7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZSk7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgYXdhaXQgcmVtb3ZlRW1wdHlEaXJzKGZpbGVQYXRoKTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGZzLnJtZGlyKGRpcik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIG5vb3Agb24gZmFpbHVyZSAtIHRoaXMgbWVhbnMgdGhlIGRpcmVjdG9yeSB3YXMgbm90IGVtcHR5LlxuICB9XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IHVubm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIEdldCBhbGwgdGhlIGZpbGVzIGluIHRoZSBwcm9qZWN0J3MgcHVibGljIGRpcmVjdG9yeS4gUmV0dXJuZWQgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZVxuICogYGNvbmZpZy5wdWJsaWNEaXJgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljRmlsZXMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGlmICghKGF3YWl0IGZzLmV4aXN0cyhjb25maWcucHVibGljRGlyKSkpIHJldHVybiBbXTtcblxuICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7IGN3ZDogY29uZmlnLnB1YmxpY0RpciB9KTtcbiAgcmV0dXJuIGZpbGVzLm1hcCh1bm5vcm1hbGl6ZVBhdGgpO1xufVxuIiwgImltcG9ydCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBCYWNrZ3JvdW5kRW50cnlwb2ludCxcbiAgQmFja2dyb3VuZFNjcmlwdERlZmludGl0aW9uLFxuICBDb250ZW50U2NyaXB0RGVmaW5pdGlvbixcbiAgQ29udGVudFNjcmlwdEVudHJ5cG9pbnQsXG4gIEVudHJ5cG9pbnQsXG4gIEludGVybmFsQ29uZmlnLFxuICBPcHRpb25zRW50cnlwb2ludCxcbiAgUG9wdXBFbnRyeXBvaW50LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgbWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IHBhcnNlSFRNTCB9IGZyb20gJ2xpbmtlZG9tJztcbmltcG9ydCBKU09ONSBmcm9tICdqc29uNSc7XG5pbXBvcnQgeyBpbXBvcnRUc0ZpbGUgfSBmcm9tICcuLi91dGlscy9pbXBvcnRUc0ZpbGUnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnROYW1lIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEIH0gZnJvbSAnLi4vdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kJztcbmltcG9ydCB7IENTU19FWFRFTlNJT05TX1BBVFRFUk4gfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogUmV0dXJuIGVudHJ5cG9pbnRzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGJ5IGxvb2tpbmcgdGhyb3VnaCB0aGUgcHJvamVjdCdzIGZpbGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEVudHJ5cG9pbnRzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxFbnRyeXBvaW50W10+IHtcbiAgY29uc3QgcmVsYXRpdmVQYXRocyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7XG4gICAgY3dkOiBjb25maWcuZW50cnlwb2ludHNEaXIsXG4gIH0pO1xuICAvLyBFbnN1cmUgY29uc2lzdGVudCBvdXRwdXRcbiAgcmVsYXRpdmVQYXRocy5zb3J0KCk7XG5cbiAgY29uc3QgcGF0aEdsb2JzID0gT2JqZWN0LmtleXMoUEFUSF9HTE9CX1RPX1RZUEVfTUFQKTtcbiAgY29uc3QgZXhpc3RpbmdOYW1lczogUmVjb3JkPHN0cmluZywgRW50cnlwb2ludCB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICBjb25zdCBlbnRyeXBvaW50czogRW50cnlwb2ludFtdID0gW107XG4gIGxldCBoYXNCYWNrZ3JvdW5kID0gZmFsc2U7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlbGF0aXZlUGF0aHMubWFwKGFzeW5jIChyZWxhdGl2ZVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcmVsYXRpdmVQYXRoKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nR2xvYiA9IHBhdGhHbG9icy5maW5kKChnbG9iKSA9PlxuICAgICAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBnbG9iKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChtYXRjaGluZ0dsb2IgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAgIGAke3JlbGF0aXZlUGF0aH0gZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGVudHJ5cG9pbnQuIEtub3duIGVudHJ5cG9pbnRzOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBQQVRIX0dMT0JfVE9fVFlQRV9NQVAsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBQQVRIX0dMT0JfVE9fVFlQRV9NQVBbbWF0Y2hpbmdHbG9iXTtcbiAgICAgIGlmICh0eXBlID09PSAnaWdub3JlZCcpIHJldHVybjtcblxuICAgICAgbGV0IGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQ7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAncG9wdXAnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRQb3B1cEVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldE9wdGlvbnNFbnRyeXBvaW50KGNvbmZpZywgcGF0aCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JhY2tncm91bmQnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRCYWNrZ3JvdW5kRW50cnlwb2ludChjb25maWcsIHBhdGgpO1xuICAgICAgICAgIGhhc0JhY2tncm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdCc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29udGVudC1zY3JpcHQtc3R5bGUnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogY29uZmlnLm91dERpcixcbiAgICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3aXRoU2FtZU5hbWUgPSBleGlzdGluZ05hbWVzW2VudHJ5cG9pbnQubmFtZV07XG4gICAgICBpZiAod2l0aFNhbWVOYW1lKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIGBNdWx0aXBsZSBlbnRyeXBvaW50cyB3aXRoIHRoZSBuYW1lIFwiJHtcbiAgICAgICAgICAgIGVudHJ5cG9pbnQubmFtZVxuICAgICAgICAgIH1cIiBkZXRlY3RlZCwgYnV0IG9ubHkgb25lIGlzIGFsbG93ZWQ6ICR7W1xuICAgICAgICAgICAgcmVsYXRpdmUoY29uZmlnLnJvb3QsIHdpdGhTYW1lTmFtZS5pbnB1dFBhdGgpLFxuICAgICAgICAgICAgcmVsYXRpdmUoY29uZmlnLnJvb3QsIGVudHJ5cG9pbnQuaW5wdXRQYXRoKSxcbiAgICAgICAgICBdLmpvaW4oJywgJyl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVudHJ5cG9pbnRzLnB1c2goZW50cnlwb2ludCk7XG4gICAgICBleGlzdGluZ05hbWVzW2VudHJ5cG9pbnQubmFtZV0gPSBlbnRyeXBvaW50O1xuICAgIH0pLFxuICApO1xuICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgJiYgIWhhc0JhY2tncm91bmQpIHtcbiAgICBlbnRyeXBvaW50cy5wdXNoKFxuICAgICAgYXdhaXQgZ2V0QmFja2dyb3VuZEVudHJ5cG9pbnQoY29uZmlnLCBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5cG9pbnRzO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwYXRoIEFic29sdXRlIHBhdGggdG8gdGhlIHBvcHVwIEhUTUwgZmlsZS5cbiAqIEBwYXJhbSBjb250ZW50IFN0cmluZyBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UG9wdXBFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPFBvcHVwRW50cnlwb2ludD4ge1xuICBjb25zdCBvcHRpb25zOiBQb3B1cEVudHJ5cG9pbnRbJ29wdGlvbnMnXSA9IHt9O1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvbnRlbnQpO1xuXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGl0bGUnKTtcbiAgaWYgKHRpdGxlICE9IG51bGwpIG9wdGlvbnMuZGVmYXVsdFRpdGxlID0gdGl0bGUudGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGRlZmF1bHRJY29uQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmRlZmF1bHRfaWNvbiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGRlZmF1bHRJY29uQ29udGVudCkge1xuICAgIHRyeSB7XG4gICAgICBvcHRpb25zLmRlZmF1bHRJY29uID0gSlNPTjUucGFyc2UoZGVmYXVsdEljb25Db250ZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZmF0YWwoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgZGVmYXVsdF9pY29uIG1ldGEgdGFnIGNvbnRlbnQgYXMgSlNPTjUuIGNvbnRlbnQ9JHtkZWZhdWx0SWNvbkNvbnRlbnR9YCxcbiAgICAgICAgZXJyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtdjJLZXlDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QudHlwZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG12MktleUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm12MktleSA9XG4gICAgICBtdjJLZXlDb250ZW50ID09PSAncGFnZV9hY3Rpb24nID8gJ3BhZ2VfYWN0aW9uJyA6ICdicm93c2VyX2FjdGlvbic7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdwb3B1cCcsXG4gICAgbmFtZTogJ3BvcHVwJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgb3B0aW9ucyBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnNFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPE9wdGlvbnNFbnRyeXBvaW50PiB7XG4gIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnNFbnRyeXBvaW50WydvcHRpb25zJ10gPSB7fTtcblxuICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aCwgJ3V0Zi04Jyk7XG4gIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHBhcnNlSFRNTChjb250ZW50KTtcblxuICBjb25zdCBvcGVuSW5UYWJDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3Qub3Blbl9pbl90YWInXVwiKVxuICAgID8uZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGlmIChvcGVuSW5UYWJDb250ZW50KSB7XG4gICAgb3B0aW9ucy5vcGVuSW5UYWIgPSBvcGVuSW5UYWJDb250ZW50ID09PSAndHJ1ZSc7XG4gIH1cblxuICBjb25zdCBjaHJvbWVTdHlsZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5jaHJvbWVfc3R5bGUnXVwiKVxuICAgID8uZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGlmIChjaHJvbWVTdHlsZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmNocm9tZVN0eWxlID0gY2hyb21lU3R5bGVDb250ZW50ID09PSAndHJ1ZSc7XG4gIH1cblxuICBjb25zdCBicm93c2VyU3R5bGVDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QuYnJvd3Nlcl9zdHlsZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGJyb3dzZXJTdHlsZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmJyb3dzZXJTdHlsZSA9IGJyb3dzZXJTdHlsZUNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ29wdGlvbnMnLFxuICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgYmFja2dyb3VuZCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEJhY2tncm91bmRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEJhY2tncm91bmRFbnRyeXBvaW50PiB7XG4gIGxldCBvcHRpb25zOiBPbWl0PEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbiwgJ21haW4nPiA9IHt9O1xuICBpZiAocGF0aCAhPT0gVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9IGF3YWl0IGltcG9ydFRzRmlsZTxCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24+KFxuICAgICAgcGF0aCxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICAgIGlmIChkZWZhdWx0RXhwb3J0ID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdCYWNrZ3JvdW5kIHNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCBleHBvcnQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBtYWluOiBfLCAuLi5tb2R1bGVPcHRpb25zIH0gPSBkZWZhdWx0RXhwb3J0O1xuICAgIG9wdGlvbnMgPSBtb2R1bGVPcHRpb25zO1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2JhY2tncm91bmQnLFxuICAgIG5hbWU6ICdiYWNrZ3JvdW5kJyxcbiAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgY29udGVudCBzY3JpcHQncyBUUyBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDb250ZW50U2NyaXB0RW50cnlwb2ludChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPENvbnRlbnRTY3JpcHRFbnRyeXBvaW50PiB7XG4gIGNvbnN0IHsgbWFpbjogXywgLi4ub3B0aW9ucyB9ID0gYXdhaXQgaW1wb3J0VHNGaWxlPENvbnRlbnRTY3JpcHREZWZpbml0aW9uPihcbiAgICBwYXRoLFxuICAgIGNvbmZpZyxcbiAgKTtcbiAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKGBDb250ZW50IHNjcmlwdCAke25hbWV9IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IGV4cG9ydGApO1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgICBuYW1lOiBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIHBhdGgpLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IHJlc29sdmUoY29uZmlnLm91dERpciwgQ09OVEVOVF9TQ1JJUFRfT1VUX0RJUiksXG4gICAgb3B0aW9ucyxcbiAgfTtcbn1cblxuY29uc3QgUEFUSF9HTE9CX1RPX1RZUEVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBFbnRyeXBvaW50Wyd0eXBlJ10gfCAnaWdub3JlZCc+ID0ge1xuICAnc2FuZGJveC5odG1sJzogJ3NhbmRib3gnLFxuICAnc2FuZGJveC9pbmRleC5odG1sJzogJ3NhbmRib3gnLFxuICAnKi5zYW5kYm94Lmh0bWwnOiAnc2FuZGJveCcsXG4gICcqLnNhbmRib3gvaW5kZXguaHRtbCc6ICdzYW5kYm94JyxcblxuICAnYm9va21hcmtzLmh0bWwnOiAnYm9va21hcmtzJyxcbiAgJ2Jvb2ttYXJrcy9pbmRleC5odG1sJzogJ2Jvb2ttYXJrcycsXG5cbiAgJ2hpc3RvcnkuaHRtbCc6ICdoaXN0b3J5JyxcbiAgJ2hpc3RvcnkvaW5kZXguaHRtbCc6ICdoaXN0b3J5JyxcblxuICAnbmV3dGFiLmh0bWwnOiAnbmV3dGFiJyxcbiAgJ25ld3RhYi9pbmRleC5odG1sJzogJ25ld3RhYicsXG5cbiAgJ3NpZGVwYW5lbC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICdzaWRlcGFuZWwvaW5kZXguaHRtbCc6ICdzaWRlcGFuZWwnLFxuICAnKi5zaWRlcGFuZWwuaHRtbCc6ICdzaWRlcGFuZWwnLFxuICAnKi5zaWRlcGFuZWwvaW5kZXguaHRtbCc6ICdzaWRlcGFuZWwnLFxuXG4gICdkZXZ0b29scy5odG1sJzogJ2RldnRvb2xzJyxcbiAgJ2RldnRvb2xzL2luZGV4Lmh0bWwnOiAnZGV2dG9vbHMnLFxuXG4gICdiYWNrZ3JvdW5kLnRzJzogJ2JhY2tncm91bmQnLFxuICBbVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEXTogJ2JhY2tncm91bmQnLFxuXG4gICdjb250ZW50LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICdjb250ZW50L2luZGV4LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICcqLmNvbnRlbnQudHM/KHgpJzogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgJyouY29udGVudC9pbmRleC50cz8oeCknOiAnY29udGVudC1zY3JpcHQnLFxuICBbYGNvbnRlbnQuJHtDU1NfRVhURU5TSU9OU19QQVRURVJOfWBdOiAnY29udGVudC1zY3JpcHQtc3R5bGUnLFxuICBbYCouY29udGVudC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgY29udGVudC9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgKi5jb250ZW50L2luZGV4LiR7Q1NTX0VYVEVOU0lPTlNfUEFUVEVSTn1gXTogJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyxcblxuICAncG9wdXAuaHRtbCc6ICdwb3B1cCcsXG4gICdwb3B1cC9pbmRleC5odG1sJzogJ3BvcHVwJyxcblxuICAnb3B0aW9ucy5odG1sJzogJ29wdGlvbnMnLFxuICAnb3B0aW9ucy9pbmRleC5odG1sJzogJ29wdGlvbnMnLFxuXG4gICcqLmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqL2luZGV4Lmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqLnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gICcqL2luZGV4LnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gIFtgKi4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG4gIFtgKi9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG5cbiAgLy8gRG9uJ3Qgd2FybiBhYm91dCBhbnkgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGxpa2UgQ1NTIG9yIEpTIGVudHJ5cG9pbnRzIGZvciBIVE1MIGZpbGVzXG4gICcqLyonOiAnaWdub3JlZCcsXG59O1xuXG5jb25zdCBDT05URU5UX1NDUklQVF9PVVRfRElSID0gJ2NvbnRlbnQtc2NyaXB0cyc7XG4iLCAiaW1wb3J0IGNyZWF0ZUpJVEkgZnJvbSAnaml0aSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVVuaW1wb3J0IH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB0cmFuc2Zvcm0gZnJvbSAnaml0aS9kaXN0L2JhYmVsJztcbmltcG9ydCB7IGdldFVuaW1wb3J0T3B0aW9ucyB9IGZyb20gJy4vYXV0by1pbXBvcnRzJztcbmltcG9ydCB7IHJlbW92ZUltcG9ydFN0YXRlbWVudHMgfSBmcm9tICcuL3N0cmluZ3MnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBleHBvcnQgb2YgYSBgcGF0aGAuXG4gKlxuICogSXQgd29ya3MgYnk6XG4gKlxuICogMS4gUmVhZGluZyB0aGUgZmlsZSB0ZXh0XG4gKiAyLiBTdHJpcHBpbmcgYWxsIGltcG9ydHMgZnJvbSBpdCB2aWEgcmVnZXhcbiAqIDMuIEF1dG8taW1wb3J0IG9ubHkgdGhlIGNsaWVudCBoZWxwZXIgZnVuY3Rpb25zXG4gKlxuICogVGhpcyBwcmV2ZW50cyByZXNvbHZpbmcgaW1wb3J0cyBvZiBpbXBvcnRzLCBzcGVlZGluZyB0aGluZ3MgdXAgYW5kIHByZXZlbnRpbmcgXCJ4eHggaXMgbm90XG4gKiBkZWZpbmVkXCIgZXJyb3JzLlxuICpcbiAqIERvd25zaWRlIGlzIHRoYXQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgbWFpbiBmdWNudGlvbiBmb3IgdGhlIGVudHJ5cG9pbnQsXG4gKiBvdGhlcndpc2UgeW91IHdpbGwgc2VlIFwieHh4IGlzIG5vdCBkZWZpbmVkXCIgZXJyb3JzIGZvciBhbnkgaW1wb3J0cyB1c2VkIG91dHNpZGUgb2YgbWFpbiBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFRzRmlsZTxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgZmlsZSBtZXRhZGF0YTonLCBwYXRoKTtcbiAgLy8gSklUSSAmIEJhYmVsIHVzZXMgbm9ybWFsaXplZCBwYXRocy5cbiAgY29uc3Qgbm9ybWFsUGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XG5cbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydCh7XG4gICAgLi4uZ2V0VW5pbXBvcnRPcHRpb25zKGNvbmZpZyksXG4gICAgLy8gT25seSBhbGxvdyBzcGVjaWZpYyBpbXBvcnRzLCBub3QgYWxsIGZyb20gdGhlIHByb2plY3RcbiAgICBkaXJzOiBbXSxcbiAgfSk7XG4gIGF3YWl0IHVuaW1wb3J0LmluaXQoKTtcblxuICBjb25zdCB0ZXh0ID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aCwgJ3V0Zi04Jyk7XG4gIGNvbnN0IHRleHROb0ltcG9ydHMgPSByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQpO1xuICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHVuaW1wb3J0LmluamVjdEltcG9ydHModGV4dE5vSW1wb3J0cyk7XG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgWydUZXh0OicsIHRleHQsICdObyBpbXBvcnRzOicsIHRleHROb0ltcG9ydHMsICdDb2RlOicsIGNvZGVdLmpvaW4oJ1xcbicpLFxuICApO1xuXG4gIGNvbnN0IGppdGkgPSBjcmVhdGVKSVRJKF9fZmlsZW5hbWUsIHtcbiAgICBjYWNoZTogZmFsc2UsXG4gICAgZXNtUmVzb2x2ZTogdHJ1ZSxcbiAgICBpbnRlcm9wRGVmYXVsdDogdHJ1ZSxcbiAgICBhbGlhczoge1xuICAgICAgJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc6IHJlc29sdmUoXG4gICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAnbm9kZV9tb2R1bGVzL3d4dC9kaXN0L3ZpcnR1YWwtbW9kdWxlcy9mYWtlLWJyb3dzZXIuanMnLFxuICAgICAgKSxcbiAgICB9LFxuICAgIHRyYW5zZm9ybShvcHRzKSB7XG4gICAgICBpZiAob3B0cy5maWxlbmFtZSA9PT0gbm9ybWFsUGF0aClcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybSh7IC4uLm9wdHMsIHNvdXJjZTogY29kZSB9KTtcbiAgICAgIGVsc2UgcmV0dXJuIHRyYW5zZm9ybShvcHRzKTtcbiAgICB9LFxuICB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBqaXRpKHBhdGgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25maWcubG9nZ2VyLmVycm9yKGVycik7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGtlYmFiQ2FzZUFscGhhbnVtZXJpYyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOS1cXHNdL2csICcnKSAvLyBSZW1vdmUgYWxsIG5vbi1hbHBoYW51bWVyaWMsIG5vbi1oeXBoZW4gY2hhcmFjdGVyc1xuICAgIC5yZXBsYWNlKC9cXHMrL2csICctJyk7IC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggaHlwaGVuc1xufVxuXG4vKipcbiAqIFJlbW92ZXMgaW1wb3J0IHN0YXRlbWVudHMgZnJvbSB0aGUgdG9wIG9mIGEgZmlsZS4gS2VlcHMgaW1wb3J0Lm1ldGEgYW5kIGlubGluZSwgYXN5bmMgYGltcG9ydCgpYFxuICogY2FsbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoXG4gICAgLyhpbXBvcnRcXHM/W3tcXHddW1xcc1xcU10qP2Zyb21cXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107P3xpbXBvcnRcXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107PykvZ20sXG4gICAgJycsXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlVW5pbXBvcnQgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFscyB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IHsgZ2V0UHVibGljRmlsZXMgfSBmcm9tICcuLi91dGlscy9wdWJsaWMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBHZW5lcmF0ZSBhbmQgd3JpdGUgYWxsIHRoZSBmaWxlcyBpbnNpZGUgdGhlIGBJbnRlcm5hbENvbmZpZy50eXBlc0RpcmAgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlc0RpcihcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLnR5cGVzRGlyKTtcblxuICBjb25zdCByZWZlcmVuY2VzOiBzdHJpbmdbXSA9IFtdO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVJbXBvcnRzRGVjbGFyYXRpb25GaWxlKGNvbmZpZykpO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVQYXRoc0RlY2xhcmF0aW9uRmlsZShlbnRyeXBvaW50cywgY29uZmlnKSk7XG4gIHJlZmVyZW5jZXMucHVzaChhd2FpdCB3cml0ZUdsb2JhbHNEZWNsYXJhdGlvbkZpbGUoY29uZmlnKSk7XG5cbiAgY29uc3QgbWFpblJlZmVyZW5jZSA9IGF3YWl0IHdyaXRlTWFpbkRlY2xhcmF0aW9uRmlsZShyZWZlcmVuY2VzLCBjb25maWcpO1xuICBhd2FpdCB3cml0ZVRzQ29uZmlnRmlsZShtYWluUmVmZXJlbmNlLCBjb25maWcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUltcG9ydHNEZWNsYXJhdGlvbkZpbGUoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAnaW1wb3J0cy5kLnRzJyk7XG4gIGNvbnN0IHVuaW1wb3J0ID0gY3JlYXRlVW5pbXBvcnQoZ2V0VW5pbXBvcnRPcHRpb25zKGNvbmZpZykpO1xuXG4gIC8vIExvYWQgcHJvamVjdCBpbXBvcnRzIGludG8gdW5pbXBvcnQgbWVtb3J5IHNvIHRoZXkgYXJlIG91dHB1dCB2aWEgZ2VuZXJhdGVUeXBlRGVjbGFyYXRpb25zXG4gIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuXG4gIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICBbJy8vIEdlbmVyYXRlZCBieSB3eHQnLCBhd2FpdCB1bmltcG9ydC5nZW5lcmF0ZVR5cGVEZWNsYXJhdGlvbnMoKV0uam9pbihcbiAgICAgICdcXG4nLFxuICAgICkgKyAnXFxuJyxcbiAgKTtcblxuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlUGF0aHNEZWNsYXJhdGlvbkZpbGUoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAncGF0aHMuZC50cycpO1xuICBjb25zdCB1bmlvbnMgPSBlbnRyeXBvaW50c1xuICAgIC5tYXAoKGVudHJ5KSA9PlxuICAgICAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGVudHJ5LFxuICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICBlbnRyeS5pbnB1dFBhdGguZW5kc1dpdGgoJy5odG1sJykgPyAnLmh0bWwnIDogJy5qcycsXG4gICAgICApLFxuICAgIClcbiAgICAuY29uY2F0KGF3YWl0IGdldFB1YmxpY0ZpbGVzKGNvbmZpZykpXG4gICAgLm1hcChub3JtYWxpemVQYXRoKVxuICAgIC5tYXAoKHBhdGgpID0+IGAgICAgfCBcIi8ke3BhdGh9XCJgKVxuICAgIC5zb3J0KClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBgLy8gR2VuZXJhdGVkIGJ5IHd4dFxuaW1wb3J0IFwid3h0L2Jyb3dzZXJcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJ3eHQvYnJvd3NlclwiIHtcbiAgdHlwZSBQdWJsaWNQYXRoID1cbnt7IHVuaW9uIH19XG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lLlN0YXRpYyB7XG4gICAgZ2V0VVJMKHBhdGg6IFB1YmxpY1BhdGgpOiBzdHJpbmc7XG4gIH1cbn1cbmA7XG5cbiAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIHRlbXBsYXRlLnJlcGxhY2UoJ3t7IHVuaW9uIH19JywgdW5pb25zIHx8ICcgICAgfCBuZXZlcicpLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHbG9iYWxzRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ2dsb2JhbHMuZC50cycpO1xuICBjb25zdCBnbG9iYWxzID0gZ2V0R2xvYmFscyhjb25maWcpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgZmlsZVBhdGgsXG4gICAgW1xuICAgICAgJy8vIEdlbmVyYXRlZCBieSB3eHQnLFxuICAgICAgJ2V4cG9ydCB7fScsXG4gICAgICAnZGVjbGFyZSBnbG9iYWwgeycsXG4gICAgICAuLi5nbG9iYWxzLm1hcCgoZ2xvYmFsKSA9PiBgICBjb25zdCAke2dsb2JhbC5uYW1lfTogJHtnbG9iYWwudHlwZX07YCksXG4gICAgICAnfScsXG4gICAgXS5qb2luKCdcXG4nKSArICdcXG4nLFxuICAgICd1dGYtOCcsXG4gICk7XG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVNYWluRGVjbGFyYXRpb25GaWxlKFxuICByZWZlcmVuY2VzOiBzdHJpbmdbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRpciA9IGNvbmZpZy53eHREaXI7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShkaXIsICd3eHQuZC50cycpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgZmlsZVBhdGgsXG4gICAgW1xuICAgICAgJy8vIEdlbmVyYXRlZCBieSB3eHQnLFxuICAgICAgYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZS9jbGllbnRcIiAvPmAsXG4gICAgICAuLi5yZWZlcmVuY2VzLm1hcChcbiAgICAgICAgKHJlZikgPT5cbiAgICAgICAgICBgLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuLyR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIHJlZikpfVwiIC8+YCxcbiAgICAgICksXG4gICAgXS5qb2luKCdcXG4nKSArICdcXG4nLFxuICApO1xuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlVHNDb25maWdGaWxlKFxuICBtYWluUmVmZXJlbmNlOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgY29uc3QgZGlyID0gY29uZmlnLnd4dERpcjtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgIHJlc29sdmUoZGlyLCAndHNjb25maWcuanNvbicpLFxuICAgIGB7XG4gIFwiY29tcGlsZXJPcHRpb25zXCI6IHtcbiAgICBcInRhcmdldFwiOiBcIkVTTmV4dFwiLFxuICAgIFwibW9kdWxlXCI6IFwiRVNOZXh0XCIsXG4gICAgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwiQnVuZGxlclwiLFxuICAgIFwibm9FbWl0XCI6IHRydWUsXG4gICAgXCJlc01vZHVsZUludGVyb3BcIjogdHJ1ZSxcbiAgICBcImZvcmNlQ29uc2lzdGVudENhc2luZ0luRmlsZU5hbWVzXCI6IHRydWUsXG4gICAgXCJyZXNvbHZlSnNvbk1vZHVsZVwiOiB0cnVlLFxuICAgIFwic3RyaWN0XCI6IHRydWUsXG4gICAgXCJsaWJcIjogW1wiRE9NXCIsIFwiV2ViV29ya2VyXCJdLFxuICAgIFwic2tpcExpYkNoZWNrXCI6IHRydWUsXG4gICAgXCJiYXNlVXJsXCI6IFwiJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLnJvb3QpKX1cIixcbiAgICBcInBhdGhzXCI6IHtcbiAgICAgIFwiQEBcIjogW1wiLlwiXSxcbiAgICAgIFwiQEAvKlwiOiBbXCIuLypcIl0sXG4gICAgICBcIn5+XCI6IFtcIi5cIl0sXG4gICAgICBcIn5+LypcIjogW1wiLi8qXCJdLFxuICAgICAgXCJAXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfVwiXSxcbiAgICAgIFwiQC8qXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfS8qXCJdLFxuICAgICAgXCJ+XCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfVwiXSxcbiAgICAgIFwifi8qXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfS8qXCJdXG4gICAgfVxuICB9LFxuICBcImluY2x1ZGVcIjogW1xuICAgIFwiJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLnJvb3QpKX0vKiovKlwiLFxuICAgIFwiLi8ke25vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBtYWluUmVmZXJlbmNlKSl9XCJcbiAgXSxcbiAgXCJleGNsdWRlXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIGNvbmZpZy5vdXRCYXNlRGlyKSl9XCJdXG59YCxcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBFbnRyeXBvaW50IH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgTWFuaWZlc3QgfSBmcm9tICd3ZWJleHRlbnNpb24tcG9seWZpbGwnO1xuaW1wb3J0IHtcbiAgQmFja2dyb3VuZEVudHJ5cG9pbnQsXG4gIEJ1aWxkT3V0cHV0LFxuICBDb250ZW50U2NyaXB0RW50cnlwb2ludCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIE9wdGlvbnNFbnRyeXBvaW50LFxuICBQb3B1cEVudHJ5cG9pbnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4vZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgQ29udGVudFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi9Db250ZW50U2VjdXJpdHlQb2xpY3knO1xuaW1wb3J0IHtcbiAgaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zLFxuICBtYXBXeHRPcHRpb25zVG9Db250ZW50U2NyaXB0LFxufSBmcm9tICcuL2NvbnRlbnQtc2NyaXB0cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlSnNvbiB9IGZyb20gJy4vcGFja2FnZSc7XG5cbi8qKlxuICogV3JpdGVzIHRoZSBtYW5pZmVzdCB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeSBhbmQgdGhlIGJ1aWxkIG91dHB1dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlTWFuaWZlc3QoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgb3V0cHV0OiBCdWlsZE91dHB1dCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdHIgPVxuICAgIGNvbmZpZy5tb2RlID09PSAncHJvZHVjdGlvbidcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpXG4gICAgICA6IEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0LCBudWxsLCAyKTtcblxuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLm91dERpcik7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShyZXNvbHZlKGNvbmZpZy5vdXREaXIsICdtYW5pZmVzdC5qc29uJyksIHN0ciwgJ3V0Zi04Jyk7XG5cbiAgb3V0cHV0LnB1YmxpY0Fzc2V0cy51bnNoaWZ0KHtcbiAgICB0eXBlOiAnYXNzZXQnLFxuICAgIGZpbGVOYW1lOiAnbWFuaWZlc3QuanNvbicsXG4gICAgbmFtZTogJ21hbmlmZXN0JyxcbiAgICBuZWVkc0NvZGVSZWZlcmVuY2U6IGZhbHNlLFxuICAgIHNvdXJjZTogc3RyLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIG1hbmlmZXN0IGJhc2VkIG9uIHRoZSBjb25maWcgYW5kIGVudHJ5cG9pbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNYWluZmVzdChcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgYnVpbGRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdD4ge1xuICBjb25zdCBwa2cgPSBhd2FpdCBnZXRQYWNrYWdlSnNvbihjb25maWcpO1xuXG4gIGNvbnN0IG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgbWFuaWZlc3RfdmVyc2lvbjogY29uZmlnLm1hbmlmZXN0VmVyc2lvbixcbiAgICAgIG5hbWU6IHBrZz8ubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwa2c/LmRlc2NyaXB0aW9uLFxuICAgICAgdmVyc2lvbjogcGtnPy52ZXJzaW9uICYmIHNpbXBsaWZ5VmVyc2lvbihwa2cudmVyc2lvbiksXG4gICAgICAvLyBPbmx5IGFkZCB0aGUgdmVyc2lvbiBuYW1lIHRvIGNocm9taXVtIGFuZCBpZiB0aGUgdXNlciBoYXNuJ3Qgc3BlY2lmaWVkIGEgY3VzdG9tIHZlcnNpb24uXG4gICAgICB2ZXJzaW9uX25hbWU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyICE9PSAnZmlyZWZveCcgJiYgIWNvbmZpZy5tYW5pZmVzdC52ZXJzaW9uXG4gICAgICAgICAgPyBwa2c/LnZlcnNpb25cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHNob3J0X25hbWU6IHBrZz8uc2hvcnROYW1lLFxuICAgIH0sXG4gICAgY29uZmlnLm1hbmlmZXN0LFxuICApO1xuXG4gIGFkZEVudHJ5cG9pbnRzKG1hbmlmZXN0LCBlbnRyeXBvaW50cywgYnVpbGRPdXRwdXQsIGNvbmZpZyk7XG5cbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnKSBhZGREZXZNb2RlQ3NwKG1hbmlmZXN0LCBjb25maWcpO1xuICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScpIGFkZERldk1vZGVQZXJtaXNzaW9ucyhtYW5pZmVzdCwgY29uZmlnKTtcblxuICAvLyBUT0RPOiB0cmFuc2Zvcm0gbWFuaWZlc3QgaGVyZS5cblxuICBpZiAobWFuaWZlc3QubmFtZSA9PSBudWxsKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJNYW5pZmVzdCAnbmFtZScgaXMgbWlzc2luZy4gRWl0aGVyOlxcbjEuIFNldCB0aGUgbmFtZSBpbiB5b3VyIDxyb290RGlyPi9wYWNrYWdlLmpzb25cXG4yLiBTZXQgYSBuYW1lIHZpYSB0aGUgbWFuaWZlc3Qgb3B0aW9uIGluIHlvdXIgd3h0LmNvbmZpZy50c1wiLFxuICAgICk7XG4gIGlmIChtYW5pZmVzdC52ZXJzaW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiTWFuaWZlc3QgJ3ZlcnNpb24nIGlzIG1pc3NpbmcuIEVpdGhlcjpcXG4xLiBBZGQgYSB2ZXJzaW9uIGluIHlvdXIgPHJvb3REaXI+L3BhY2thZ2UuanNvblxcbjIuIFBhc3MgdGhlIHZlcnNpb24gdmlhIHRoZSBtYW5pZmVzdCBvcHRpb24gaW4geW91ciB3eHQuY29uZmlnLnRzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHN1ZmZpeGVzIGZyb20gdGhlIHZlcnNpb24sIGxpa2UgWC5ZLlotYWxwaGExICh3aGljaCBicm9zZXJzIGRvbid0IGFsbG93KSwgc28gaXQncyBhXG4gKiBzaW1wbGUgdmVyc2lvbiBudW1iZXIsIGxpa2UgWCBvciBYLlkgb3IgWC5ZLlosIHdoaWNoIGJyb3dzZXJzIGFsbG93LlxuICovXG5mdW5jdGlvbiBzaW1wbGlmeVZlcnNpb24odmVyc2lvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlZ2V4IGFkYXB0ZWQgZnJvbSBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvQWRkLW9ucy9XZWJFeHRlbnNpb25zL21hbmlmZXN0Lmpzb24vdmVyc2lvbiN2ZXJzaW9uX2Zvcm1hdFxuICBjb25zdCB2ZXJzaW9uID0gL14oKDB8WzEtOV1bMC05XXswLDh9KShbLl0oMHxbMS05XVswLTldezAsOH0pKXswLDN9KS4qJC8uZXhlYyhcbiAgICB2ZXJzaW9uTmFtZSxcbiAgKT8uWzFdO1xuXG4gIGlmICh2ZXJzaW9uID09IG51bGwpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNpbXBsaWZ5IHBhY2thZ2UuanNvbiB2ZXJzaW9uIFwiJHt2ZXJzaW9uTmFtZX1cIiB0byBhIHZhbGlkIGV4dGVuc2lvbiB2ZXJzaW9uLCBcIlguWS5aXCJgLFxuICAgICk7XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmZ1bmN0aW9uIGFkZEVudHJ5cG9pbnRzKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBlbnRyaWVzQnlUeXBlID0gZW50cnlwb2ludHMucmVkdWNlPFxuICAgIFBhcnRpYWw8UmVjb3JkPEVudHJ5cG9pbnRbJ3R5cGUnXSwgRW50cnlwb2ludFtdPj5cbiAgPigobWFwLCBlbnRyeXBvaW50KSA9PiB7XG4gICAgbWFwW2VudHJ5cG9pbnQudHlwZV0gPz89IFtdO1xuICAgIG1hcFtlbnRyeXBvaW50LnR5cGVdPy5wdXNoKGVudHJ5cG9pbnQpO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcblxuICBjb25zdCBiYWNrZ3JvdW5kID0gZW50cmllc0J5VHlwZVsnYmFja2dyb3VuZCddPy5bMF0gYXNcbiAgICB8IEJhY2tncm91bmRFbnRyeXBvaW50XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvb2ttYXJrcyA9IGVudHJpZXNCeVR5cGVbJ2Jvb2ttYXJrcyddPy5bMF07XG4gIGNvbnN0IGNvbnRlbnRTY3JpcHRzID0gZW50cmllc0J5VHlwZVsnY29udGVudC1zY3JpcHQnXSBhc1xuICAgIHwgQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbXVxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXZ0b29scyA9IGVudHJpZXNCeVR5cGVbJ2RldnRvb2xzJ10/LlswXTtcbiAgY29uc3QgaGlzdG9yeSA9IGVudHJpZXNCeVR5cGVbJ2hpc3RvcnknXT8uWzBdO1xuICBjb25zdCBuZXd0YWIgPSBlbnRyaWVzQnlUeXBlWyduZXd0YWInXT8uWzBdO1xuICBjb25zdCBvcHRpb25zID0gZW50cmllc0J5VHlwZVsnb3B0aW9ucyddPy5bMF0gYXNcbiAgICB8IE9wdGlvbnNFbnRyeXBvaW50XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHBvcHVwID0gZW50cmllc0J5VHlwZVsncG9wdXAnXT8uWzBdIGFzIFBvcHVwRW50cnlwb2ludCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2FuZGJveGVzID0gZW50cmllc0J5VHlwZVsnc2FuZGJveCddO1xuICBjb25zdCBzaWRlcGFuZWxzID0gZW50cmllc0J5VHlwZVsnc2lkZXBhbmVsJ107XG5cbiAgaWYgKGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBzY3JpcHQgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChiYWNrZ3JvdW5kLCBjb25maWcub3V0RGlyLCAnLmpzJyk7XG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0X3ZlcnNpb24gPT09IDMpIHtcbiAgICAgIG1hbmlmZXN0LmJhY2tncm91bmQgPSB7XG4gICAgICAgIHR5cGU6IGJhY2tncm91bmQub3B0aW9ucy50eXBlLFxuICAgICAgICBzZXJ2aWNlX3dvcmtlcjogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuYmFja2dyb3VuZCA9IHtcbiAgICAgICAgcGVyc2lzdGVudDogYmFja2dyb3VuZC5vcHRpb25zLnBlcnNpc3RlbnQsXG4gICAgICAgIHNjcmlwdHM6IFtzY3JpcHRdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoYm9va21hcmtzKSB7XG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ0Jvb2ttYXJrcyBhcmUgbm90IHN1cHBvcnRlZCBieSBGaXJlZm94LiBjaHJvbWVfdXJsX292ZXJyaWRlcy5ib29rbWFya3Mgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMgPz89IHt9O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYm9va21hcmtzIGlzIHVudHlwZWQgaW4gd2ViZXh0ZW5zaW9uLXBvbHlmaWxsLCBidXQgc3VwcG9ydGVkIGJ5IGNocm9tZVxuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMuYm9va21hcmtzID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGJvb2ttYXJrcyxcbiAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgJy5odG1sJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhpc3RvcnkpIHtcbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnQm9va21hcmtzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IEZpcmVmb3guIGNocm9tZV91cmxfb3ZlcnJpZGVzLmhpc3Rvcnkgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMgPz89IHt9O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogaGlzdG9yeSBpcyB1bnR5cGVkIGluIHdlYmV4dGVuc2lvbi1wb2x5ZmlsbCwgYnV0IHN1cHBvcnRlZCBieSBjaHJvbWVcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzLmhpc3RvcnkgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgJy5odG1sJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5ld3RhYikge1xuICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzID8/PSB7fTtcbiAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcy5uZXd0YWIgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIG5ld3RhYixcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG4gIH1cblxuICBpZiAocG9wdXApIHtcbiAgICBjb25zdCBkZWZhdWx0X3BvcHVwID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICBwb3B1cCxcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uczogTWFuaWZlc3QuQWN0aW9uTWFuaWZlc3QgPSB7XG4gICAgICBkZWZhdWx0X2ljb246IHBvcHVwLm9wdGlvbnMuZGVmYXVsdEljb24sXG4gICAgICBkZWZhdWx0X3RpdGxlOiBwb3B1cC5vcHRpb25zLmRlZmF1bHRUaXRsZSxcbiAgICB9O1xuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgICBtYW5pZmVzdC5hY3Rpb24gPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRfcG9wdXAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5pZmVzdFtwb3B1cC5vcHRpb25zLm12MktleSA/PyAnYnJvd3Nlcl9hY3Rpb24nXSA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVmYXVsdF9wb3B1cCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGRldnRvb2xzKSB7XG4gICAgbWFuaWZlc3QuZGV2dG9vbHNfcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgZGV2dG9vbHMsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYWdlID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgob3B0aW9ucywgY29uZmlnLm91dERpciwgJy5odG1sJyk7XG4gICAgbWFuaWZlc3Qub3B0aW9uc191aSA9IHtcbiAgICAgIG9wZW5faW5fdGFiOiBvcHRpb25zLm9wdGlvbnMub3BlbkluVGFiLFxuICAgICAgYnJvd3Nlcl9zdHlsZTpcbiAgICAgICAgY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyA/IG9wdGlvbnMub3B0aW9ucy5icm93c2VyU3R5bGUgOiB1bmRlZmluZWQsXG4gICAgICBjaHJvbWVfc3R5bGU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyICE9PSAnZmlyZWZveCcgPyBvcHRpb25zLm9wdGlvbnMuY2hyb21lU3R5bGUgOiB1bmRlZmluZWQsXG4gICAgICBwYWdlLFxuICAgIH07XG4gIH1cblxuICBpZiAoc2FuZGJveGVzPy5sZW5ndGgpIHtcbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnU2FuZGJveGVkIHBhZ2VzIG5vdCBzdXBwb3J0ZWQgYnkgRmlyZWZveC4gc2FuZGJveC5wYWdlcyB3YXMgbm90IGFkZGVkIHRvIHRoZSBtYW5pZmVzdCcsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBzYW5kYm94IG5vdCB0eXBlZFxuICAgICAgbWFuaWZlc3Quc2FuZGJveCA9IHtcbiAgICAgICAgcGFnZXM6IHNhbmRib3hlcy5tYXAoKGVudHJ5KSA9PlxuICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmh0bWwnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHNpZGVwYW5lbHM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRTaWRlcGFuZWwgPVxuICAgICAgc2lkZXBhbmVscy5maW5kKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gJ3NpZGVwYW5lbCcpID8/IHNpZGVwYW5lbHNbMF07XG4gICAgY29uc3QgcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgZGVmYXVsdFNpZGVwYW5lbCxcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG5cbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgbWFuaWZlc3Quc2lkZWJhcl9hY3Rpb24gPSB7XG4gICAgICAgIC8vIFRPRE86IEFkZCBvcHRpb25zIHRvIHNpZGUgcGFuZWxcbiAgICAgICAgLy8gLi4uZGVmYXVsdFNpZGVwYW5lbC5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0X3BhbmVsOiBwYWdlLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPT09IDMpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IFVudHlwZWRcbiAgICAgIG1hbmlmZXN0LnNpZGVfcGFuZWwgPSB7XG4gICAgICAgIGRlZmF1bHRfcGF0aDogcGFnZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ1NpZGUgcGFuZWwgbm90IHN1cHBvcnRlZCBieSBDaHJvbWl1bSB1c2luZyBNVjIuIHNpZGVfcGFuZWwuZGVmYXVsdF9wYXRoIHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRlbnRTY3JpcHRzPy5sZW5ndGgpIHtcbiAgICAvLyBEb24ndCBhZGQgY29udGVudCBzY3JpcHRzIHRvIHRoZSBtYW5pZmVzdCBpbiBkZXYgbW9kZSBmb3IgTVYzIC0gdGhleSdyZSBtYW5hZ2VkIGFuZCByZWxvYWRlZFxuICAgIC8vIGF0IHJ1bnRpbWVcbiAgICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgJiYgY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgICAgY29uc3QgaG9zdFBlcm1pc3Npb25zID0gbmV3IFNldDxzdHJpbmc+KG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz8gW10pO1xuICAgICAgY29udGVudFNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgIHNjcmlwdC5vcHRpb25zLm1hdGNoZXMuZm9yRWFjaCgobWF0Y2hQYXR0ZXJuKSA9PiB7XG4gICAgICAgICAgaG9zdFBlcm1pc3Npb25zLmFkZChtYXRjaFBhdHRlcm4pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaG9zdFBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+XG4gICAgICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhc2hUb0VudHJ5cG9pbnRzTWFwID0gY29udGVudFNjcmlwdHMucmVkdWNlKChtYXAsIHNjcmlwdCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoID0gaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zKHNjcmlwdC5vcHRpb25zKTtcbiAgICAgICAgaWYgKG1hcC5oYXMoaGFzaCkpIG1hcC5nZXQoaGFzaCk/LnB1c2goc2NyaXB0KTtcbiAgICAgICAgZWxzZSBtYXAuc2V0KGhhc2gsIFtzY3JpcHRdKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sIG5ldyBNYXA8c3RyaW5nLCBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdPigpKTtcblxuICAgICAgbWFuaWZlc3QuY29udGVudF9zY3JpcHRzID0gQXJyYXkuZnJvbShoYXNoVG9FbnRyeXBvaW50c01hcC5lbnRyaWVzKCkpLm1hcChcbiAgICAgICAgKFssIHNjcmlwdHNdKSA9PiAoe1xuICAgICAgICAgIC4uLm1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQoc2NyaXB0c1swXS5vcHRpb25zKSxcbiAgICAgICAgICAvLyBUT09EOiBTb3J0aW5nIGNzcyBhbmQganMgYXJyYXlzIGhlcmUgc28gd2UgZ2V0IGNvbnNpc3RlbnQgdGVzdCByZXN1bHRzLi4uIGJ1dCB3ZVxuICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvLiBXaGVyZSBpcyB0aGUgaW5jb25zaXN0ZW5jeSBjb21pbmcgZnJvbT9cbiAgICAgICAgICBjc3M6IGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhzY3JpcHRzLCBidWlsZE91dHB1dCk/LnNvcnQoKSxcbiAgICAgICAgICBqczogc2NyaXB0c1xuICAgICAgICAgICAgLm1hcCgoZW50cnkpID0+XG4gICAgICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmpzJyksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc29ydCgpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVDc3AoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBwZXJtaXNzaW9uID0gYGh0dHA6Ly8ke2NvbmZpZy5zZXJ2ZXI/Lmhvc3RuYW1lID8/ICcnfS8qYDtcbiAgY29uc3QgYWxsb3dlZENzcCA9IGNvbmZpZy5zZXJ2ZXI/Lm9yaWdpbiA/PyAnaHR0cDovL2xvY2FsaG9zdDoqJztcblxuICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIGNvbnN0IGNzcCA9IG5ldyBDb250ZW50U2VjdXJpdHlQb2xpY3koXG4gICAgbWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gM1xuICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yOiBleHRlbnNpb25fcGFnZXMgaXMgbm90IHR5cGVkXG4gICAgICAgIG1hbmlmZXN0LmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5Py5leHRlbnNpb25fcGFnZXMgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJyAnd2FzbS11bnNhZmUtZXZhbCc7IG9iamVjdC1zcmMgJ3NlbGYnO1wiIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjNcbiAgICAgIDogbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJzsgb2JqZWN0LXNyYyAnc2VsZic7XCIsIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjJcbiAgKTtcblxuICBpZiAoY29uZmlnLnNlcnZlcikgY3NwLmFkZCgnc2NyaXB0LXNyYycsIGFsbG93ZWRDc3ApO1xuXG4gIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz89IHt9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGV4dGVuc2lvbl9wYWdlcyBpcyBub3QgdHlwZWRcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeS5leHRlbnNpb25fcGFnZXMgPSBjc3AudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeSA9IGNzcC50b1N0cmluZygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVQZXJtaXNzaW9ucyhcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIC8vIEZvciByZWxvYWRpbmcgdGhlIHBhZ2VcbiAgYWRkUGVybWlzc2lvbihtYW5pZmVzdCwgJ3RhYnMnKTtcblxuICAvLyBGb3IgcmVnaXN0ZXJpbmcgY29udGVudCBzY3JpcHRzXG4gIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCAnc2NyaXB0aW5nJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYnVuZGxlIHBhdGhzIHRvIENTUyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYSBsaXN0IG9mIGNvbnRlbnQgc2NyaXB0cywgb3IgdW5kZWZpbmVkIGlmXG4gKiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIENTUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhcbiAgY29udGVudFNjcmlwdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY3NzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IGFsbENodW5rcyA9IGJ1aWxkT3V0cHV0LnN0ZXBzLmZsYXRNYXAoKHN0ZXApID0+IHN0ZXAuY2h1bmtzKTtcblxuICBjb250ZW50U2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICAvLyBUT0RPOiBvcHRpbWl6ZSBhbmQgcmVtb3ZlIGxvb3Agd2l0aCBhIG1hcFxuICAgIGNvbnN0IHJlbGF0ZWRDc3MgPSBhbGxDaHVua3MuZmluZChcbiAgICAgIChjaHVuaykgPT4gY2h1bmsuZmlsZU5hbWUgPT09IGBhc3NldHMvJHtzY3JpcHQubmFtZX0uY3NzYCxcbiAgICApO1xuICAgIGlmIChyZWxhdGVkQ3NzKSBjc3MucHVzaChyZWxhdGVkQ3NzLmZpbGVOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKGNzcy5sZW5ndGggPiAwKSByZXR1cm4gY3NzO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhZGRQZXJtaXNzaW9uKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIHBlcm1pc3Npb246IHN0cmluZyxcbik6IHZvaWQge1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucyA/Pz0gW107XG4gIGlmIChtYW5pZmVzdC5wZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKSkgcmV0dXJuO1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucy5wdXNoKHBlcm1pc3Npb24pO1xufVxuXG5mdW5jdGlvbiBhZGRIb3N0UGVybWlzc2lvbihcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBob3N0UGVybWlzc2lvbjogc3RyaW5nLFxuKTogdm9pZCB7XG4gIG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz89IFtdO1xuICBpZiAobWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5pbmNsdWRlcyhob3N0UGVybWlzc2lvbikpIHJldHVybjtcbiAgbWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5wdXNoKGhvc3RQZXJtaXNzaW9uKTtcbn1cbiIsICIvKipcbiAqIERpcmVjdGl2ZSBuYW1lcyB0aGF0IG1ha2UgdXAgQ1NQcy4gVGhlcmUgYXJlIG1vcmUsIHRoaXMgaXMgYWxsIEkgbmVlZCBmb3IgdGhlIHBsdWdpbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NwRGlyZWN0aXZlID0gJ2RlZmF1bHQtc3JjJyB8ICdzY3JpcHQtc3JjJyB8ICdvYmplY3Qtc3JjJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7XG4gIHByaXZhdGUgc3RhdGljIERJUkVDVElWRV9PUkRFUjogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHtcbiAgICAnZGVmYXVsdC1zcmMnOiAwLFxuICAgICdzY3JpcHQtc3JjJzogMSxcbiAgICAnb2JqZWN0LXNyYyc6IDIsXG4gIH07XG5cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG4gIGNvbnN0cnVjdG9yKGNzcD86IHN0cmluZykge1xuICAgIGlmIChjc3ApIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gY3NwLnNwbGl0KCc7JykubWFwKChzZWN0aW9uKSA9PiBzZWN0aW9uLnRyaW0oKSk7XG4gICAgICB0aGlzLmRhdGEgPSBzZWN0aW9ucy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nW10+PigoZGF0YSwgc2VjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCAuLi52YWx1ZXNdID0gc2VjdGlvbi5zcGxpdCgnICcpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpO1xuICAgICAgICBpZiAoa2V5KSBkYXRhW2tleV0gPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGEgc2V0IG9mIHZhbHVlcyBhcmUgbGlzdGVkIHVuZGVyIGEgZGlyZWN0aXZlLlxuICAgKi9cbiAgYWRkKGRpcmVjdGl2ZTogQ3NwRGlyZWN0aXZlLCAuLi5uZXdWYWx1ZXM6IHN0cmluZ1tdKTogQ29udGVudFNlY3VyaXR5UG9saWN5IHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmRhdGFbZGlyZWN0aXZlXSA/PyBbXTtcbiAgICBuZXdWYWx1ZXMuZm9yRWFjaCgobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKG5ld1ZhbHVlKSkgdmFsdWVzLnB1c2gobmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YVtkaXJlY3RpdmVdID0gdmFsdWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXJlY3RpdmVzID0gT2JqZWN0LmVudHJpZXModGhpcy5kYXRhKS5zb3J0KChbbF0sIFtyXSkgPT4ge1xuICAgICAgY29uc3QgbG8gPSBDb250ZW50U2VjdXJpdHlQb2xpY3kuRElSRUNUSVZFX09SREVSW2xdID8/IDI7XG4gICAgICBjb25zdCBybyA9IENvbnRlbnRTZWN1cml0eVBvbGljeS5ESVJFQ1RJVkVfT1JERVJbcl0gPz8gMjtcbiAgICAgIHJldHVybiBsbyAtIHJvO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3RpdmVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmZsYXQoKS5qb2luKCcgJykpLmpvaW4oJzsgJykgKyAnOyc7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBDb250ZW50U2NyaXB0RW50cnlwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgdW5pcXVlIGFuZCBjb25zaXN0ZW50IHN0cmluZyBoYXNoIGJhc2VkIG9uIGEgY29udGVudCBzY3JpcHRzIG9wdGlvbnMuXG4gKlxuICogSXQgaXMgYWJsZSB0byByZWNvZ25pemUgZGVmYXVsdCB2YWx1ZXMsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoQ29udGVudFNjcmlwdE9wdGlvbnMoXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10sXG4pOiBzdHJpbmcge1xuICBjb25zdCB3aXRoRGVmYXVsdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10gPSB7XG4gICAgZXhjbHVkZUdsb2JzOiBbXSxcbiAgICBleGNsdWRlTWF0Y2hlczogW10sXG4gICAgaW5jbHVkZUdsb2JzOiBbXSxcbiAgICBtYXRjaEFib3V0Qmxhbms6IGZhbHNlLFxuICAgIG1hdGNoT3JpZ2luQXNGYWxsYmFjazogZmFsc2UsXG4gICAgcnVuQXQ6ICdkb2N1bWVudF9pZGxlJyxcbiAgICBhbGxGcmFtZXM6IGZhbHNlLFxuICAgIHdvcmxkOiAnSVNPTEFURUQnLFxuICAgIC8vIFRPRE86IHN0cmlwIHVuZGVmaW5lZCBmaWVsZHMgZnJvbSBvcHRpb25zIG9iamVjdCB0byBpbXByb3ZlIGNvbnRlbnQgc2NyaXB0IGdyb3VwaW5nLlxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBPYmplY3QuZW50cmllcyh3aXRoRGVmYXVsdHMpXG4gICAgICAvLyBTb3J0IGFueSBhcnJheXMgc28gdGhlaXIgdmFsdWVzIGFyZSBjb25zaXN0ZW50XG4gICAgICAubWFwPFtzdHJpbmcsIHVua25vd25dPigoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFtrZXksIHZhbHVlLnNvcnQoKV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtrZXksIHZhbHVlXTtcbiAgICAgIH0pXG4gICAgICAvLyBTb3J0IGFsbCB0aGUgZmllbGRzIGFscGhhYmV0aWNhbGx5XG4gICAgICAuc29ydCgobCwgcikgPT4gbFswXS5sb2NhbGVDb21wYXJlKHJbMF0pKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQoXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10sXG4pOiBPbWl0PE1hbmlmZXN0LkNvbnRlbnRTY3JpcHQsICdqcycgfCAnY3NzJz4ge1xuICByZXR1cm4ge1xuICAgIG1hdGNoZXM6IG9wdGlvbnMubWF0Y2hlcyxcbiAgICBhbGxfZnJhbWVzOiBvcHRpb25zLmFsbEZyYW1lcyxcbiAgICBtYXRjaF9hYm91dF9ibGFuazogb3B0aW9ucy5tYXRjaEFib3V0QmxhbmssXG4gICAgZXhjbHVkZV9nbG9iczogb3B0aW9ucy5leGNsdWRlR2xvYnMsXG4gICAgZXhjbHVkZV9tYXRjaGVzOiBvcHRpb25zLmV4Y2x1ZGVNYXRjaGVzLFxuICAgIGluY2x1ZGVfZ2xvYnM6IG9wdGlvbnMuaW5jbHVkZUdsb2JzLFxuICAgIHJ1bl9hdDogb3B0aW9ucy5ydW5BdCxcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHVudHlwZWQgY2hyb21lIG9wdGlvbnNcbiAgICBtYXRjaF9vcmlnaW5fYXNfZmFsbGJhY2s6IG9wdGlvbnMubWF0Y2hPcmlnaW5Bc0ZhbGxiYWNrLFxuICAgIHdvcmxkOiBvcHRpb25zLndvcmxkLFxuICB9O1xufVxuIiwgImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG4vKipcbiAqIFJlYWQgdGhlIHByb2plY3QncyBwYWNrYWdlLmpzb24uXG4gKlxuICogVE9ETzogbG9vayBpbiByb290IGFuZCB1cCBkaXJlY3RvcmllcyB1bnRpbCBpdCdzIGZvdW5kXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWNrYWdlSnNvbihcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8UGFydGlhbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBmaWxlID0gcmVzb2x2ZShjb25maWcucm9vdCwgJ3BhY2thZ2UuanNvbicpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmcy5yZWFkSnNvbihmaWxlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBGYWlsZWQgdG8gcmVhZCBwYWNrYWdlLmpzb24gYXQ6ICR7ZmlsZX0uIFJldHVybmluZyB1bmRlZmluZWQuYCxcbiAgICApO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7IEJ1aWxkT3V0cHV0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi9idWlsZC9idWlsZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZpbmRFbnRyeXBvaW50cyB9IGZyb20gJy4vYnVpbGQvZmluZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGdlbmVyYXRlVHlwZXNEaXIgfSBmcm9tICcuL2J1aWxkL2dlbmVyYXRlVHlwZXNEaXInO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcsIEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYWluZmVzdCwgd3JpdGVNYW5pZmVzdCB9IGZyb20gJy4vdXRpbHMvbWFuaWZlc3QnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBncm91cEVudHJ5cG9pbnRzIH0gZnJvbSAnLi91dGlscy9ncm91cEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXREdXJhdGlvbic7XG5pbXBvcnQgeyBwcmludEJ1aWxkU3VtbWFyeSB9IGZyb20gJy4vbG9nL3ByaW50QnVpbGRTdW1tYXJ5JztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGV4dGVuc2lvbiBiYXNlZCBvbiBhbiBpbnRlcm5hbCBjb25maWcuXG4gKlxuICogVGhpcyBmdW5jdGlvbjpcbiAqIDEuIENsZWFucyB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICogMi4gRXhlY3V0ZXMgdGhlIHJlYnVpbGQgZnVuY3Rpb24gd2l0aCBhIGJsYW5rIHByZXZpb3VzIG91dHB1dCBzbyBldmVyeXRoaW5nIGlzIGJ1aWx0IChzZWVcbiAqICAgIGByZWJ1aWxkYCBmb3IgbW9yZSBkZXRhaWxzKVxuICogMy4gUHJpbnRzIHRoZSBzdW1tYXJ5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEludGVybmFsKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZE91dHB1dD4ge1xuICBjb25zdCB2ZXJiID0gY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgPyAnUHJlLXJlbmRlcmluZycgOiAnQnVpbGRpbmcnO1xuICBjb25zdCB0YXJnZXQgPSBgJHtjb25maWcuYnJvd3Nlcn0tbXYke2NvbmZpZy5tYW5pZmVzdFZlcnNpb259YDtcbiAgY29uZmlnLmxvZ2dlci5pbmZvKFxuICAgIGAke3ZlcmJ9ICR7cGMuY3lhbih0YXJnZXQpfSBmb3IgJHtwYy5jeWFuKGNvbmZpZy5tb2RlKX0gd2l0aCAke3BjLmdyZWVuKFxuICAgICAgYFZpdGUgJHt2aXRlLnZlcnNpb259YCxcbiAgICApfWAsXG4gICk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgLy8gQ2xlYW51cFxuICBhd2FpdCBmcy5ybShjb25maWcub3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcub3V0RGlyKTtcblxuICBjb25zdCBlbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBjb25zdCBncm91cHMgPSBncm91cEVudHJ5cG9pbnRzKGVudHJ5cG9pbnRzKTtcbiAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHJlYnVpbGQoY29uZmlnLCBncm91cHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9zdC1idWlsZFxuICBjb25maWcubG9nZ2VyLnN1Y2Nlc3MoXG4gICAgYEJ1aWx0IGV4dGVuc2lvbiBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICk7XG4gIGF3YWl0IHByaW50QnVpbGRTdW1tYXJ5KG91dHB1dCwgY29uZmlnKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEdpdmVuIGEgY29uZmlndXJhdGlvbiwgbGlzdCBvZiBlbnRyeXBvaW50cywgYW5kIGFuIGV4aXN0aW5nLCBwYXJ0aWFsIG91dHB1dCwgYnVpbGQgdGhlXG4gKiBlbnRyeXBvaW50cyBhbmQgbWVyZ2UgdGhlIG5ldyBvdXRwdXQgd2l0aCB0aGUgZXhpc3Rpbmcgb3V0cHV0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbDpcbiAqIDEuIEdlbmVyYXRlIHRoZSAud3h0IGRpcmVjdG9yeSdzIHR5cGVzXG4gKiAyLiBCdWlsZCB0aGUgYGVudHJ5cG9pbnRHcm91cHNgIChhbmQgY29waWVzIHB1YmxpYyBmaWxlcylcbiAqIDMuIEdlbmVyYXRlIHRoZSBsYXRlc3QgbWFuaWZlc3QgZm9yIGFsbCBlbnRyeXBvaW50c1xuICogNC4gV3JpdGUgdGhlIG5ldyBtYW5pZmVzdCB0byB0aGUgZmlsZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYnVpbGQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIGVudHJ5cG9pbnRHcm91cHM6IEVudHJ5cG9pbnRHcm91cFtdLFxuICBleGlzdGluZ091dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4gPSB7XG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH0sXG4pOiBQcm9taXNlPHsgb3V0cHV0OiBCdWlsZE91dHB1dDsgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0IH0+IHtcbiAgLy8gVXBkYXRlIHR5cGVzIGRpcmVjdG9yeSB3aXRoIG5ldyBmaWxlcyBhbmQgdHlwZXNcbiAgY29uc3QgYWxsRW50cnlwb2ludHMgPSBhd2FpdCBmaW5kRW50cnlwb2ludHMoY29uZmlnKTtcbiAgYXdhaXQgZ2VuZXJhdGVUeXBlc0RpcihhbGxFbnRyeXBvaW50cywgY29uZmlnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgY29uZmlnLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gdXBkYXRlIC53eHQgZGlyZWN0b3J5OicsIGVycik7XG4gICAgLy8gVGhyb3cgdGhlIGVycm9yIGlmIGRvaW5nIGEgcmVndWxhciBidWlsZCwgZG9uJ3QgZm9yIGRldiBtb2RlLlxuICAgIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ2J1aWxkJykgdGhyb3cgZXJyO1xuICB9KTtcblxuICAvLyBCdWlsZCBhbmQgbWVyZ2UgdGhlIG91dHB1dHNcbiAgY29uc3QgbmV3T3V0cHV0ID0gYXdhaXQgYnVpbGRFbnRyeXBvaW50cyhlbnRyeXBvaW50R3JvdXBzLCBjb25maWcpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+ID0ge1xuICAgIHN0ZXBzOiBbLi4uZXhpc3RpbmdPdXRwdXQuc3RlcHMsIC4uLm5ld091dHB1dC5zdGVwc10sXG4gICAgcHVibGljQXNzZXRzOiBbLi4uZXhpc3RpbmdPdXRwdXQucHVibGljQXNzZXRzLCAuLi5uZXdPdXRwdXQucHVibGljQXNzZXRzXSxcbiAgfTtcblxuICBjb25zdCBuZXdNYW5pZmVzdCA9IGF3YWl0IGdlbmVyYXRlTWFpbmZlc3QoXG4gICAgYWxsRW50cnlwb2ludHMsXG4gICAgbWVyZ2VkT3V0cHV0LFxuICAgIGNvbmZpZyxcbiAgKTtcbiAgY29uc3QgZmluYWxPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgICAuLi5uZXdPdXRwdXQsXG4gIH07XG5cbiAgLy8gV3JpdGUgbWFuaWZlc3RcbiAgYXdhaXQgd3JpdGVNYW5pZmVzdChuZXdNYW5pZmVzdCwgZmluYWxPdXRwdXQsIGNvbmZpZyk7XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXQ6IHtcbiAgICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgICAgIHN0ZXBzOiBbLi4uZXhpc3RpbmdPdXRwdXQuc3RlcHMsIC4uLmZpbmFsT3V0cHV0LnN0ZXBzXSxcbiAgICAgIHB1YmxpY0Fzc2V0czogW1xuICAgICAgICAuLi5leGlzdGluZ091dHB1dC5wdWJsaWNBc3NldHMsXG4gICAgICAgIC4uLmZpbmFsT3V0cHV0LnB1YmxpY0Fzc2V0cyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBtYW5pZmVzdDogbmV3TWFuaWZlc3QsXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBFbnRyeXBvaW50cyBjYW4gYmUgYnVpbGQgaW4gZ3JvdXBzLiBIVE1MIHBhZ2VzIGNhbiBhbGwgYmUgYnVpbHQgdG9nZXRoZXIgaW4gYSBzaW5nbGUgc3RlcCwgd2hpbGVcbiAqIGNvbnRlbnQgc2NyaXB0cyBtdXN0IGJlIGJ1aWxkIGluZGl2aWR1YWxseS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVudHJ5cG9pbnRzIHB1dCBpbnRvIHRoZXNlIHR5cGVzIG9mIGdyb3Vwcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwRW50cnlwb2ludHMoZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSk6IEVudHJ5cG9pbnRHcm91cFtdIHtcbiAgY29uc3QgZ3JvdXBJbmRleE1hcDogUGFydGlhbDxSZWNvcmQ8R3JvdXAsIG51bWJlcj4+ID0ge307XG4gIGNvbnN0IGdyb3VwczogRW50cnlwb2ludEdyb3VwW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJ5cG9pbnRzKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBFTlRSWV9UWVBFX1RPX0dST1VQX01BUFtlbnRyeS50eXBlXTtcbiAgICBpZiAoZ3JvdXAgPT09ICduby1ncm91cCcpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKGVudHJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGdyb3VwSW5kZXggPSBncm91cEluZGV4TWFwW2dyb3VwXTtcbiAgICAgIGlmIChncm91cEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgZ3JvdXBJbmRleCA9IGdyb3Vwcy5wdXNoKFtdKSAtIDE7XG4gICAgICAgIGdyb3VwSW5kZXhNYXBbZ3JvdXBdID0gZ3JvdXBJbmRleDtcbiAgICAgIH1cbiAgICAgIChncm91cHNbZ3JvdXBJbmRleF0gYXMgRW50cnlwb2ludFtdKS5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG5jb25zdCBFTlRSWV9UWVBFX1RPX0dST1VQX01BUDogUmVjb3JkPEVudHJ5cG9pbnRbJ3R5cGUnXSwgR3JvdXA+ID0ge1xuICBzYW5kYm94OiAnc2FuZGJveC1wYWdlJyxcblxuICBwb3B1cDogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgbmV3dGFiOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBoaXN0b3J5OiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBvcHRpb25zOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBkZXZ0b29sczogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgYm9va21hcmtzOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBzaWRlcGFuZWw6ICdleHRlbnNpb24tcGFnZScsXG4gICd1bmxpc3RlZC1wYWdlJzogJ2V4dGVuc2lvbi1wYWdlJyxcblxuICBiYWNrZ3JvdW5kOiAnbm8tZ3JvdXAnLFxuICAnY29udGVudC1zY3JpcHQnOiAnbm8tZ3JvdXAnLFxuICAndW5saXN0ZWQtc2NyaXB0JzogJ25vLWdyb3VwJyxcbiAgJ3VubGlzdGVkLXN0eWxlJzogJ25vLWdyb3VwJyxcbiAgJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJzogJ25vLWdyb3VwJyxcbn07XG5cbnR5cGUgR3JvdXAgPSAnZXh0ZW5zaW9uLXBhZ2UnIHwgJ3NhbmRib3gtcGFnZScgfCAnbm8tZ3JvdXAnO1xuIiwgImV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGR1cmF0aW9uIDwgMWUzKSByZXR1cm4gYCR7ZHVyYXRpb259IG1zYDtcbiAgaWYgKGR1cmF0aW9uIDwgMTBlMykgcmV0dXJuIGAkeyhkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgzKX0gc2A7XG4gIGlmIChkdXJhdGlvbiA8IDYwZTMpIHJldHVybiBgJHsoZHVyYXRpb24gLyAxZTMpLnRvRml4ZWQoMSl9IHNgO1xuICByZXR1cm4gYCR7KGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDApfSBzYDtcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBCdWlsZE91dHB1dCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwcmludEZpbGVMaXN0IH0gZnJvbSAnLi9wcmludEZpbGVMaXN0JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByaW50QnVpbGRTdW1tYXJ5KFxuICBvdXRwdXQ6IEJ1aWxkT3V0cHV0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGNvbnN0IGNodW5rcyA9IFtcbiAgICAuLi5vdXRwdXQuc3RlcHMuZmxhdE1hcCgoc3RlcCkgPT4gc3RlcC5jaHVua3MpLFxuICAgIC4uLm91dHB1dC5wdWJsaWNBc3NldHMsXG4gIF0uc29ydCgobCwgcikgPT4ge1xuICAgIGNvbnN0IGxXZWlnaHQgPSBnZXRDaHVua1NvcnRXZWlnaHQobC5maWxlTmFtZSk7XG4gICAgY29uc3QgcldlaWdodCA9IGdldENodW5rU29ydFdlaWdodChyLmZpbGVOYW1lKTtcbiAgICBjb25zdCBkaWZmID0gbFdlaWdodCAtIHJXZWlnaHQ7XG4gICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xuICAgIHJldHVybiBsLmZpbGVOYW1lLmxvY2FsZUNvbXBhcmUoci5maWxlTmFtZSk7XG4gIH0pO1xuXG4gIGNvbnN0IGZpbGVzID0gY2h1bmtzLm1hcCgoY2h1bmspID0+IHJlc29sdmUoY29uZmlnLm91dERpciwgY2h1bmsuZmlsZU5hbWUpKTtcbiAgYXdhaXQgcHJpbnRGaWxlTGlzdChjb25maWcubG9nZ2VyLmxvZywgY29uZmlnLm91dERpciwgZmlsZXMpO1xufVxuXG5jb25zdCBERUZBVUxUX1NPUlRfV0VJR0hUID0gMTAwO1xuY29uc3QgQ0hVTktfU09SVF9XRUlHSFRTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICAnbWFuaWZlc3QuanNvbic6IDAsXG4gICcuaHRtbCc6IDEsXG4gICcuanMubWFwJzogMixcbiAgJy5qcyc6IDIsXG4gICcuY3NzJzogMyxcbn07XG5mdW5jdGlvbiBnZXRDaHVua1NvcnRXZWlnaHQoZmlsZW5hbWU6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5lbnRyaWVzKENIVU5LX1NPUlRfV0VJR0hUUykuZmluZCgoW2tleV0pID0+XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aChrZXkpLFxuICAgICk/LlsxXSA/PyBERUZBVUxUX1NPUlRfV0VJR0hUXG4gICk7XG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJztcbmltcG9ydCB7IHByaW50VGFibGUgfSBmcm9tICcuL3ByaW50VGFibGUnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJpbnRGaWxlTGlzdChcbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICBiYXNlRGlyOiBzdHJpbmcsXG4gIGZpbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgdG90YWxTaXplID0gMDtcblxuICBjb25zdCBmaWxlUm93czogc3RyaW5nW11bXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVzLm1hcChhc3luYyAoZmlsZSwgaSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgYmFzZURpcikgKyBwYXRoLnNlcCxcbiAgICAgICAgcGF0aC5yZWxhdGl2ZShiYXNlRGlyLCBmaWxlKSxcbiAgICAgIF07XG4gICAgICBjb25zdCBwcmVmaXggPSBpID09PSBmaWxlcy5sZW5ndGggLSAxID8gJyAgXHUyNTE0XHUyNTAwJyA6ICcgIFx1MjUxQ1x1MjUwMCc7XG4gICAgICBjb25zdCBjb2xvciA9IGdldENodW5rQ29sb3IoZmlsZSk7XG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLmxzdGF0KGZpbGUpO1xuICAgICAgdG90YWxTaXplICs9IHN0YXRzLnNpemU7XG4gICAgICBjb25zdCBzaXplID0gU3RyaW5nKGZpbGVzaXplKHN0YXRzLnNpemUpKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke3BjLmdyYXkocHJlZml4KX0gJHtwYy5kaW0ocGFydHNbMF0pfSR7Y29sb3IocGFydHNbMV0pfWAsXG4gICAgICAgIHBjLmRpbShzaXplKSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG5cbiAgcHJpbnRUYWJsZShsb2csIGZpbGVSb3dzKTtcblxuICBsb2coYCR7cGMuY3lhbignXHUwM0EzIFRvdGFsIHNpemU6Jyl9ICR7U3RyaW5nKGZpbGVzaXplKHRvdGFsU2l6ZSkpfWApO1xufVxuXG5jb25zdCBERUZBVUxUX0NPTE9SID0gcGMuYmx1ZTtcbmNvbnN0IENIVU5LX0NPTE9SUzogUmVjb3JkPHN0cmluZywgKHRleHQ6IHN0cmluZykgPT4gc3RyaW5nPiA9IHtcbiAgJy5qcy5tYXAnOiBwYy5ncmF5LFxuICAnLmh0bWwnOiBwYy5ncmVlbixcbiAgJy5jc3MnOiBwYy5tYWdlbnRhLFxuICAnLmpzJzogcGMuY3lhbixcbiAgJy56aXAnOiBwYy55ZWxsb3csXG59O1xuZnVuY3Rpb24gZ2V0Q2h1bmtDb2xvcihmaWxlbmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LmVudHJpZXMoQ0hVTktfQ09MT1JTKS5maW5kKChba2V5XSkgPT4gZmlsZW5hbWUuZW5kc1dpdGgoa2V5KSk/LlsxXSA/P1xuICAgIERFRkFVTFRfQ09MT1JcbiAgKTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gcHJpbnRUYWJsZShcbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICByb3dzOiBzdHJpbmdbXVtdLFxuICBnYXAgPSAyLFxuKTogdm9pZCB7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGNvbHVtbldpZHRocyA9IHJvd3MucmVkdWNlKFxuICAgICh3aWR0aHMsIHJvdykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh3aWR0aHMubGVuZ3RoLCByb3cubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgIHdpZHRoc1tpXSA9IE1hdGgubWF4KHJvd1tpXT8ubGVuZ3RoID8/IDAsIHdpZHRoc1tpXSA/PyAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aWR0aHM7XG4gICAgfSxcbiAgICByb3dzWzBdLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubGVuZ3RoKSxcbiAgKTtcblxuICBsZXQgc3RyID0gJyc7XG4gIHJvd3MuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgcm93LmZvckVhY2goKGNvbCwgaikgPT4ge1xuICAgICAgc3RyICs9IGNvbC5wYWRFbmQoY29sdW1uV2lkdGhzW2pdLCAnICcpO1xuICAgICAgaWYgKGogIT09IHJvdy5sZW5ndGggLSAxKSBzdHIgKz0gJycucGFkRW5kKGdhcCwgJyAnKTtcbiAgICB9KTtcbiAgICBpZiAoaSAhPT0gcm93cy5sZW5ndGggLSAxKSBzdHIgKz0gJ1xcbic7XG4gIH0pO1xuXG4gIGxvZyhzdHIpO1xufVxuIiwgImltcG9ydCB7XG4gIEJ1aWxkU3RlcE91dHB1dCxcbiAgRW50cnlwb2ludEdyb3VwLFxuICBJbnRlcm5hbENvbmZpZyxcbiAgV3h0RGV2U2VydmVyLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBTY3JpcHRpbmcgfSBmcm9tICd3ZWJleHRlbnNpb24tcG9seWZpbGwnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCB7IGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyB9IGZyb20gJy4vdXRpbHMvbWFuaWZlc3QnO1xuaW1wb3J0IHsgY3JlYXRlV2ViRXh0UnVubmVyIH0gZnJvbSAnLi9ydW5uZXJzL2NyZWF0ZVdlYkV4dFJ1bm5lcic7XG5pbXBvcnQgeyBidWlsZEludGVybmFsIH0gZnJvbSAnLi9idWlsZCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZXJ2ZXJJbmZvKCk6IFByb21pc2U8U2VydmVySW5mbz4ge1xuICBjb25zdCB7IGRlZmF1bHQ6IGdldFBvcnQsIHBvcnROdW1iZXJzIH0gPSBhd2FpdCBpbXBvcnQoJ2dldC1wb3J0Jyk7XG4gIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KHsgcG9ydDogcG9ydE51bWJlcnMoMzAwMCwgMzAxMCkgfSk7XG4gIGNvbnN0IGhvc3RuYW1lID0gJ2xvY2FsaG9zdCc7XG4gIGNvbnN0IG9yaWdpbiA9IGBodHRwOi8vJHtob3N0bmFtZX06JHtwb3J0fWA7XG4gIGNvbnN0IHNlcnZlckNvbmZpZzogdml0ZS5JbmxpbmVDb25maWcgPSB7XG4gICAgc2VydmVyOiB7XG4gICAgICBvcmlnaW4sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHBvcnQsXG4gICAgaG9zdG5hbWUsXG4gICAgb3JpZ2luLFxuICAgIHZpdGVTZXJ2ZXJDb25maWc6IHNlcnZlckNvbmZpZyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwU2VydmVyKFxuICBzZXJ2ZXJJbmZvOiBTZXJ2ZXJJbmZvLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxXeHREZXZTZXJ2ZXI+IHtcbiAgY29uc3QgcnVubmVyID0gY3JlYXRlV2ViRXh0UnVubmVyKCk7XG5cbiAgY29uc3Qgdml0ZVNlcnZlciA9IGF3YWl0IHZpdGUuY3JlYXRlU2VydmVyKFxuICAgIHZpdGUubWVyZ2VDb25maWcoc2VydmVySW5mbywgY29uZmlnLnZpdGUpLFxuICApO1xuXG4gIGNvbnN0IHN0YXJ0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHZpdGVTZXJ2ZXIubGlzdGVuKHNlcnZlci5wb3J0KTtcbiAgICBjb25maWcubG9nZ2VyLnN1Y2Nlc3MoYFN0YXJ0ZWQgZGV2IHNlcnZlciBAICR7c2VydmVySW5mby5vcmlnaW59YCk7XG5cbiAgICBzZXJ2ZXIuY3VycmVudE91dHB1dCA9IGF3YWl0IGJ1aWxkSW50ZXJuYWwoY29uZmlnKTtcbiAgICBjb25maWcubG9nZ2VyLmluZm8oJ09wZW5pbmcgYnJvd3Nlci4uLicpO1xuICAgIGF3YWl0IHJ1bm5lci5vcGVuQnJvd3Nlcihjb25maWcpO1xuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcygnT3BlbmVkIScpO1xuICB9O1xuXG4gIGNvbnN0IHJlbG9hZEV4dGVuc2lvbiA9ICgpID0+IHtcbiAgICB2aXRlU2VydmVyLndzLnNlbmQoJ3d4dDpyZWxvYWQtZXh0ZW5zaW9uJyk7XG4gIH07XG4gIGNvbnN0IHJlbG9hZFBhZ2UgPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgLy8gQ2FuJ3QgdXNlIFZpdGUncyBidWlsdC1pbiBcImZ1bGwtcmVsb2FkXCIgZXZlbnQgYmVjYXVzZSBpdCBkb2Vzbid0IGxpa2Ugb3VyIHBhdGhzLCBpdCBleHBlY3RzXG4gICAgLy8gcGF0aHMgZW5kaW5nIGluIFwiL2luZGV4Lmh0bWxcIlxuICAgIHZpdGVTZXJ2ZXIud3Muc2VuZCgnd3h0OnJlbG9hZC1wYWdlJywgcGF0aCk7XG4gIH07XG4gIGNvbnN0IHJlbG9hZENvbnRlbnRTY3JpcHQgPSAoXG4gICAgY29udGVudFNjcmlwdDogT21pdDxTY3JpcHRpbmcuUmVnaXN0ZXJlZENvbnRlbnRTY3JpcHQsICdpZCc+LFxuICApID0+IHtcbiAgICB2aXRlU2VydmVyLndzLnNlbmQoJ3d4dDpyZWxvYWQtY29udGVudC1zY3JpcHQnLCBjb250ZW50U2NyaXB0KTtcbiAgfTtcblxuICBjb25zdCBzZXJ2ZXI6IFd4dERldlNlcnZlciA9IHtcbiAgICAuLi52aXRlU2VydmVyLFxuICAgIHN0YXJ0LFxuICAgIGN1cnJlbnRPdXRwdXQ6IHtcbiAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgIG1hbmlmZXN0X3ZlcnNpb246IDMsXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2ZXJzaW9uOiAnJyxcbiAgICAgIH0sXG4gICAgICBwdWJsaWNBc3NldHM6IFtdLFxuICAgICAgc3RlcHM6IFtdLFxuICAgIH0sXG4gICAgcG9ydDogc2VydmVySW5mby5wb3J0LFxuICAgIGhvc3RuYW1lOiBzZXJ2ZXJJbmZvLmhvc3RuYW1lLFxuICAgIG9yaWdpbjogc2VydmVySW5mby5vcmlnaW4sXG4gICAgcmVsb2FkRXh0ZW5zaW9uLFxuICAgIHJlbG9hZFBhZ2UsXG4gICAgcmVsb2FkQ29udGVudFNjcmlwdCxcbiAgfTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuXG4vKipcbiAqIEZyb20gdGhlIHNlcnZlciwgdGVsbCB0aGUgY2xpZW50IHRvIHJlbG9hZCBjb250ZW50IHNjcmlwdHMgZnJvbSB0aGUgcHJvdmlkZWQgYnVpbGQgc3RlcCBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkQ29udGVudFNjcmlwdHMoXG4gIHN0ZXBzOiBCdWlsZFN0ZXBPdXRwdXRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgc2VydmVyOiBXeHREZXZTZXJ2ZXIsXG4pIHtcbiAgaWYgKGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPT09IDMpIHtcbiAgICBzdGVwcy5mb3JFYWNoKChzdGVwKSA9PiB7XG4gICAgICBjb25zdCBlbnRyeSA9IHN0ZXAuZW50cnlwb2ludHM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkgfHwgZW50cnkudHlwZSAhPT0gJ2NvbnRlbnQtc2NyaXB0JykgcmV0dXJuO1xuXG4gICAgICBjb25zdCBqcyA9IFtnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChlbnRyeSwgY29uZmlnLm91dERpciwgJy5qcycpXTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhbZW50cnldLCBzZXJ2ZXIuY3VycmVudE91dHB1dCk7XG5cbiAgICAgIHNlcnZlci5yZWxvYWRDb250ZW50U2NyaXB0KHtcbiAgICAgICAgLi4uZW50cnkub3B0aW9ucyxcbiAgICAgICAganMsXG4gICAgICAgIGNzcyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNlcnZlci5yZWxvYWRFeHRlbnNpb24oKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkSHRtbFBhZ2VzKFxuICBncm91cHM6IEVudHJ5cG9pbnRHcm91cFtdLFxuICBzZXJ2ZXI6IFd4dERldlNlcnZlcixcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbikge1xuICBncm91cHMuZmxhdCgpLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmh0bWwnKTtcbiAgICBzZXJ2ZXIucmVsb2FkUGFnZShwYXRoKTtcbiAgfSk7XG59XG5cbmludGVyZmFjZSBTZXJ2ZXJJbmZvIHtcbiAgcG9ydDogbnVtYmVyO1xuICBob3N0bmFtZTogc3RyaW5nO1xuICBvcmlnaW46IHN0cmluZztcbiAgdml0ZVNlcnZlckNvbmZpZzogdml0ZS5JbmxpbmVDb25maWc7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBXZWJFeHRSdW5JbnN0YW5jZSB9IGZyb20gJ3dlYi1leHQnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uUnVubmVyIH0gZnJvbSAnLi9FeHRlbnNpb25SdW5uZXInO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBgRXh0ZW5zaW9uUnVubmVyYCBiYWNrZWQgYnkgYHdlYi1leHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViRXh0UnVubmVyKCk6IEV4dGVuc2lvblJ1bm5lciB7XG4gIGxldCBydW5uZXI6IFdlYkV4dFJ1bkluc3RhbmNlIHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgb3BlbkJyb3dzZXIoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdzYWZhcmknKSB7XG4gICAgICAgIGNvbmZpZy5sb2dnZXIud2FybignQ2Fubm90IG9wZW4gc2FmYXJpIGF1dG9tYXRpY2FsbHkuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoZSBwbHVnaW4ncyBsb2dnZXIgaW5zdGVhZCBvZiB3ZWItZXh0J3MgYnVpbHQtaW4gb25lLlxuICAgICAgY29uc3Qgd2ViRXh0TG9nZ2VyID0gYXdhaXQgaW1wb3J0KCd3ZWItZXh0L3V0aWwvbG9nZ2VyJyk7XG4gICAgICB3ZWJFeHRMb2dnZXIuY29uc29sZVN0cmVhbS53cml0ZSA9ICh7IGxldmVsLCBtc2csIG5hbWUgfSkgPT4ge1xuICAgICAgICBpZiAobGV2ZWwgPj0gRVJST1JfTE9HX0xFVkVMKSBjb25maWcubG9nZ2VyLmVycm9yKG5hbWUsIG1zZyk7XG4gICAgICAgIGlmIChsZXZlbCA+PSBXQVJOX0xPR19MRVZFTCkgY29uZmlnLmxvZ2dlci53YXJuKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3eHRVc2VyQ29uZmlnID0gY29uZmlnLnJ1bm5lckNvbmZpZy5jb25maWc7XG4gICAgICBjb25zdCB1c2VyQ29uZmlnID0ge1xuICAgICAgICBjb25zb2xlOiB3eHRVc2VyQ29uZmlnPy5vcGVuQ29uc29sZSxcbiAgICAgICAgZGV2dG9vbHM6IHd4dFVzZXJDb25maWc/Lm9wZW5EZXZ0b29scyxcbiAgICAgICAgc3RhcnRVcmw6IHd4dFVzZXJDb25maWc/LnN0YXJ0VXJscyxcbiAgICAgICAgLi4uKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZmlyZWZveDogd3h0VXNlckNvbmZpZz8uYmluYXJpZXM/LmZpcmVmb3gsXG4gICAgICAgICAgICAgIGZpcmVmb3hQcm9maWxlOiB3eHRVc2VyQ29uZmlnPy5maXJlZm94UHJvZmlsZSxcbiAgICAgICAgICAgICAgcHJlZnM6IHd4dFVzZXJDb25maWc/LmZpcmVmb3hQcmVmcyxcbiAgICAgICAgICAgICAgYXJnczogd3h0VXNlckNvbmZpZz8uZmlyZWZveEFyZ3MsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGNocm9taXVtQmluYXJ5OiB3eHRVc2VyQ29uZmlnPy5iaW5hcmllcz8uW2NvbmZpZy5icm93c2VyXSxcbiAgICAgICAgICAgICAgY2hyb21pdW1Qcm9maWxlOiB3eHRVc2VyQ29uZmlnPy5jaHJvbWl1bVByb2ZpbGUsXG4gICAgICAgICAgICAgIGFyZ3M6IHd4dFVzZXJDb25maWc/LmNocm9taXVtQXJncyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluYWxDb25maWcgPSB7XG4gICAgICAgIC4uLnVzZXJDb25maWcsXG4gICAgICAgIHRhcmdldDogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyA/ICdmaXJlZm94LWRlc2t0b3AnIDogJ2Nocm9taXVtJyxcbiAgICAgICAgc291cmNlRGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICAvLyBXWFQgaGFuZGxlcyByZWxvYWRzLCBzbyBkaXNhYmxlIGF1dG8tcmVsb2FkIGJlaGF2aW9ycyBpbiB3ZWItZXh0XG4gICAgICAgIG5vUmVsb2FkOiB0cnVlLFxuICAgICAgICBub0lucHV0OiB0cnVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIC8vIERvbid0IGNhbGwgYHByb2Nlc3MuZXhpdCgwKWAgYWZ0ZXIgc3RhcnRpbmcgd2ViLWV4dFxuICAgICAgICBzaG91bGRFeGl0UHJvZ3JhbTogZmFsc2UsXG4gICAgICB9O1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1Zygnd2ViLWV4dCBjb25maWc6JywgZmluYWxDb25maWcpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1Zygnd2ViLWV4dCBvcHRpb25zOicsIG9wdGlvbnMpO1xuXG4gICAgICBjb25zdCB3ZWJFeHQgPSBhd2FpdCBpbXBvcnQoJ3dlYi1leHQnKTtcbiAgICAgIHJ1bm5lciA9IGF3YWl0IHdlYkV4dC5kZWZhdWx0LmNtZC5ydW4oZmluYWxDb25maWcsIG9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJyb3dzZXIoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcnVubmVyPy5leGl0KCk7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvd2ViLWV4dC9ibG9iL2UzN2U2MGEyNzM4NDc4ZjUxMmYxMjU1YzUzNzEzMzMyMWYzMDE3NzEvc3JjL3V0aWwvbG9nZ2VyLmpzI0wxMlxuY29uc3QgV0FSTl9MT0dfTEVWRUwgPSA0MDtcbmNvbnN0IEVSUk9SX0xPR19MRVZFTCA9IDUwO1xuIiwgImltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IHByaW50SGVhZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9sb2cvcHJpbnRIZWFkZXInO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2Zvcm1hdER1cmF0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbW1hbmQ8VEFyZ3MgZXh0ZW5kcyBhbnlbXT4oXG4gIGNiOiAoLi4uYXJnczogVEFyZ3MpID0+IHZvaWQgfCBib29sZWFuIHwgUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4sXG4gIG9wdGlvbnM/OiB7XG4gICAgZGlzYWJsZUZpbmlzaGVkTG9nPzogYm9vbGVhbjtcbiAgfSxcbikge1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IFRBcmdzKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0cnkge1xuICAgICAgcHJpbnRIZWFkZXIoKTtcblxuICAgICAgY29uc3Qgb25nb2luZyA9IGF3YWl0IGNiKC4uLmFyZ3MpO1xuXG4gICAgICBpZiAoIW9uZ29pbmcgJiYgIW9wdGlvbnM/LmRpc2FibGVGaW5pc2hlZExvZylcbiAgICAgICAgY29uc29sYS5zdWNjZXNzKFxuICAgICAgICAgIGBGaW5pc2hlZCBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xhLmZhaWwoXG4gICAgICAgIGBDb21tYW5kIGZhaWxlZCBhZnRlciAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sYS5lcnJvcihlcnIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRIZWFkZXIoKSB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGEubG9nKGAke3BjLmdyYXkoJ1dYVCcpfSAke3BjLmdyYXkocGMuYm9sZCh2ZXJzaW9uKSl9YCk7XG59XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGJyb3dzZXI/OiB3eHQuVGFyZ2V0QnJvd3NlcjtcbiAgICAgIG12Mz86IGJvb2xlYW47XG4gICAgICBtdjI/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IG1vZGUgPSBmbGFncy5tb2RlID8/ICdwcm9kdWN0aW9uJztcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgbW9kZSxcbiAgICBicm93c2VyOiBmbGFncy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogZmxhZ3MubXYzID8gMyA6IGZsYWdzLm12MiA/IDIgOiB1bmRlZmluZWQsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICB9O1xuXG4gIGF3YWl0IHd4dC5idWlsZChjbGlDb25maWcpO1xufSk7XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IGRldiA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgICBjb25maWc/OiBzdHJpbmc7XG4gICAgICBicm93c2VyPzogd3h0LlRhcmdldEJyb3dzZXI7XG4gICAgICBtdjM/OiBib29sZWFuO1xuICAgICAgbXYyPzogYm9vbGVhbjtcbiAgICB9LFxuICBdXG4+KGFzeW5jIChyb290LCBmbGFncykgPT4ge1xuICBjb25zdCBtb2RlID0gZmxhZ3MubW9kZSA/PyAnZGV2ZWxvcG1lbnQnO1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBtb2RlLFxuICAgIGJyb3dzZXI6IGZsYWdzLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBmbGFncy5tdjMgPyAzIDogZmxhZ3MubXYyID8gMiA6IHVuZGVmaW5lZCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gIH07XG5cbiAgY29uc3Qgc2VydmVyID0gYXdhaXQgd3h0LmNyZWF0ZVNlcnZlcihjbGlDb25maWcpO1xuICBhd2FpdCBzZXJ2ZXIuc3RhcnQoKTtcblxuICByZXR1cm4gdHJ1ZTtcbn0pO1xuIiwgImltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcbmltcG9ydCBwcm9tcHRzIGZyb20gJ3Byb21wdHMnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgZG93bmxvYWRUZW1wbGF0ZSB9IGZyb20gJ2dpZ2V0JztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSAncGljb2NvbG9ycy90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpbml0ID0gZGVmaW5lQ29tbWFuZDxcbiAgW2RpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb25zOiB7IHRlbXBsYXRlPzogc3RyaW5nOyBwbT86IHN0cmluZyB9XVxuPihcbiAgYXN5bmMgKHVzZXJEaXJlY3RvcnksIGZsYWdzKSA9PiB7XG4gICAgY29uc29sYS5pbmZvKCdJbml0YWxpemluZyBuZXcgcHJvamVjdCcpO1xuXG4gICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgbGlzdFRlbXBsYXRlcygpO1xuICAgIGNvbnN0IGRlZmF1bHRUZW1wbGF0ZSA9IHRlbXBsYXRlcy5maW5kKFxuICAgICAgKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZS5uYW1lID09PSBmbGFncy50ZW1wbGF0ZT8udG9Mb3dlckNhc2UoKS50cmltKCksXG4gICAgKTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgcHJvbXB0cyhcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdkaXJlY3RvcnknLFxuICAgICAgICAgIHR5cGU6ICgpID0+ICh1c2VyRGlyZWN0b3J5ID09IG51bGwgPyAndGV4dCcgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIG1lc3NhZ2U6ICdQcm9qZWN0IERpcmVjdG9yeScsXG4gICAgICAgICAgaW5pdGlhbDogdXNlckRpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0ZW1wbGF0ZScsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKGRlZmF1bHRUZW1wbGF0ZSA9PSBudWxsID8gJ3NlbGVjdCcgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSB0ZW1wbGF0ZScsXG4gICAgICAgICAgY2hvaWNlczogdGVtcGxhdGVzLm1hcCgodGVtcGxhdGUpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgVEVNUExBVEVfQ09MT1JTW3RlbXBsYXRlLm5hbWVdPy4odGVtcGxhdGUubmFtZSkgPz8gdGVtcGxhdGUubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB0ZW1wbGF0ZSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncGFja2FnZU1hbmFnZXInLFxuICAgICAgICAgIHR5cGU6ICgpID0+IChmbGFncy5wbSA9PSBudWxsID8gJ3NlbGVjdCcgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIG1lc3NhZ2U6ICdQYWNrYWdlIE1hbmFnZXInLFxuICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgdGl0bGU6ICducG0nLCB2YWx1ZTogJ25wbScgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6ICdwbnBtJywgdmFsdWU6ICdwbnBtJyB9LFxuICAgICAgICAgICAgeyB0aXRsZTogJ3lhcm4nLCB2YWx1ZTogJ3lhcm4nIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBwcm9jZXNzLmV4aXQoMSksXG4gICAgICB9LFxuICAgICk7XG4gICAgaW5wdXQuZGlyZWN0b3J5ID8/PSB1c2VyRGlyZWN0b3J5O1xuICAgIGlucHV0LnRlbXBsYXRlID8/PSBkZWZhdWx0VGVtcGxhdGU7XG4gICAgaW5wdXQucGFja2FnZU1hbmFnZXIgPz89IGZsYWdzLnBtO1xuXG4gICAgYXdhaXQgY2xvbmVQcm9qZWN0KGlucHV0KTtcblxuICAgIGNvbnN0IGNkUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgcGF0aC5yZXNvbHZlKGlucHV0LmRpcmVjdG9yeSkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sYS5sb2coXG4gICAgICBgXHUyNzI4IFdYVCBwcm9qZWN0IGNyZWF0ZWQgd2l0aCB0aGUgJHtcbiAgICAgICAgVEVNUExBVEVfQ09MT1JTW2lucHV0LnRlbXBsYXRlLm5hbWVdPy4oaW5wdXQudGVtcGxhdGUubmFtZSkgPz9cbiAgICAgICAgaW5wdXQudGVtcGxhdGUubmFtZVxuICAgICAgfSB0ZW1wbGF0ZS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xhLmxvZygnTmV4dCBzdGVwczonKTtcbiAgICBsZXQgc3RlcCA9IDA7XG4gICAgaWYgKGNkUGF0aCAhPT0gJy4nKSBjb25zb2xhLmxvZyhgICAkeysrc3RlcH0uYCwgcGMuY3lhbihgY2QgJHtjZFBhdGh9YCkpO1xuICAgIGNvbnNvbGEubG9nKGAgICR7KytzdGVwfS5gLCBwYy5jeWFuKGAke2lucHV0LnBhY2thZ2VNYW5hZ2VyfSBpbnN0YWxsYCkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH0sXG4gIHsgZGlzYWJsZUZpbmlzaGVkTG9nOiB0cnVlIH0sXG4pO1xuXG5pbnRlcmZhY2UgVGVtcGxhdGUge1xuICAvKipcbiAgICogVGVtcGxhdGUncyBuYW1lLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogUGF0aCB0byB0ZW1wbGF0ZSBkaXJlY3RvcnkgaW4gZ2l0aHViIHJlcG8uXG4gICAqL1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RUZW1wbGF0ZXMoKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ha2xpbmtlcjEvd3h0L2NvbnRlbnRzL3RlbXBsYXRlcycsXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLFxuICAgICAgICAgICdYLUdpdEh1Yi1BcGktVmVyc2lvbic6ICcyMDIyLTExLTI4JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBpZiAocmVzLnN0YXR1cyA+PSAzMDApXG4gICAgICB0aHJvdyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fWApO1xuXG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBBcnJheTx7XG4gICAgICB0eXBlOiAnZmlsZScgfCAnZGlyJztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9PjtcbiAgICByZXR1cm4gZGF0YVxuICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgPT09ICdkaXInKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gKHsgbmFtZTogaXRlbS5uYW1lLCBwYXRoOiBpdGVtLnBhdGggfSkpXG4gICAgICAuc29ydCgobCwgcikgPT4ge1xuICAgICAgICBjb25zdCBsV2VpZ2h0ID0gVEVNUExBVEVfU09SVF9XRUlHSFRbbC5uYW1lXSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgY29uc3QgcldlaWdodCA9IFRFTVBMQVRFX1NPUlRfV0VJR0hUW3IubmFtZV0gPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBsV2VpZ2h0IC0gcldlaWdodDtcbiAgICAgICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xuICAgICAgICByZXR1cm4gbC5uYW1lLmxvY2FsZUNvbXBhcmUoci5uYW1lKTtcbiAgICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBFcnJvcihgQ2Fubm90IGxvYWQgdGVtcGxhdGVzOiAke0pTT04uc3RyaW5naWZ5KGVyciwgbnVsbCwgMil9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xvbmVQcm9qZWN0KHtcbiAgZGlyZWN0b3J5LFxuICB0ZW1wbGF0ZSxcbiAgcGFja2FnZU1hbmFnZXIsXG59OiB7XG4gIGRpcmVjdG9yeTogc3RyaW5nO1xuICB0ZW1wbGF0ZTogVGVtcGxhdGU7XG4gIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG59KSB7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0Rvd25sb2FkaW5nIHRlbXBsYXRlJykuc3RhcnQoKTtcbiAgdHJ5IHtcbiAgICAvLyAxLiBDbG9uZSByZXBvXG4gICAgYXdhaXQgZG93bmxvYWRUZW1wbGF0ZShgZ2g6YWtsaW5rZXIxL3d4dC8ke3RlbXBsYXRlLnBhdGh9YCwge1xuICAgICAgZGlyOiBkaXJlY3RvcnksXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIDIuIE1vdmUgX2dpdGlnbm9yZSAtPiAuZ2l0aWdub3JlXG4gICAgYXdhaXQgZnNcbiAgICAgIC5tb3ZlKFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnX2dpdGlnbm9yZScpLFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnLmdpdGlnbm9yZScpLFxuICAgICAgKVxuICAgICAgLmNhdGNoKChlcnIpID0+XG4gICAgICAgIGNvbnNvbGEud2FybignRmFpbGVkIHRvIG1vdmUgX2dpdGlnbm9yZSB0byAuZ2l0aWdub3JlOicsIGVyciksXG4gICAgICApO1xuXG4gICAgLy8gMy4gQWRkIC5ucG1yYyBmb3IgcG5wbVxuICAgIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gJ3BucG0nKSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICAgIHBhdGguam9pbihkaXJlY3RvcnksICcubnBtcmMnKSxcbiAgICAgICAgJ3NoYW1lZnVsbHktaG9pc3Q9dHJ1ZVxcbicsXG4gICAgICApO1xuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBFcnJvcihgRmFpbGVkIHRvIHNldHVwIG5ldyBwcm9qZWN0OiAke0pTT04uc3RyaW5naWZ5KGVyciwgbnVsbCwgMil9YCk7XG4gIH1cbn1cblxuY29uc3QgVEVNUExBVEVfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBGb3JtYXR0ZXI+ID0ge1xuICB2YW5pbGxhOiBwYy5ibHVlLFxuICB2dWU6IHBjLmdyZWVuLFxuICByZWFjdDogcGMuY3lhbixcbiAgc3ZlbHRlOiBwYy5yZWQsXG4gIHNvbGlkOiBwYy5ibHVlLFxufTtcblxuY29uc3QgVEVNUExBVEVfU09SVF9XRUlHSFQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIHZhbmlsbGE6IDAsXG4gIHZ1ZTogMSxcbiAgcmVhY3Q6IDIsXG59O1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGNsaUN1cnNvciBmcm9tICdjbGktY3Vyc29yJztcbmltcG9ydCBjbGlTcGlubmVycyBmcm9tICdjbGktc3Bpbm5lcnMnO1xuaW1wb3J0IGxvZ1N5bWJvbHMgZnJvbSAnbG9nLXN5bWJvbHMnO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tICdzdHJpcC1hbnNpJztcbmltcG9ydCB3Y3dpZHRoIGZyb20gJ3djd2lkdGgnO1xuaW1wb3J0IGlzSW50ZXJhY3RpdmUgZnJvbSAnaXMtaW50ZXJhY3RpdmUnO1xuaW1wb3J0IGlzVW5pY29kZVN1cHBvcnRlZCBmcm9tICdpcy11bmljb2RlLXN1cHBvcnRlZCc7XG5pbXBvcnQgc3RkaW5EaXNjYXJkZXIgZnJvbSAnc3RkaW4tZGlzY2FyZGVyJztcblxuY2xhc3MgT3JhIHtcblx0I2xpbmVzVG9DbGVhciA9IDA7XG5cdCNpc0Rpc2NhcmRpbmdTdGRpbiA9IGZhbHNlO1xuXHQjbGluZUNvdW50ID0gMDtcblx0I2ZyYW1lSW5kZXggPSAwO1xuXHQjb3B0aW9ucztcblx0I3NwaW5uZXI7XG5cdCNzdHJlYW07XG5cdCNpZDtcblx0I2luaXRpYWxJbnRlcnZhbDtcblx0I2lzRW5hYmxlZDtcblx0I2lzU2lsZW50O1xuXHQjaW5kZW50O1xuXHQjdGV4dDtcblx0I3ByZWZpeFRleHQ7XG5cdCNzdWZmaXhUZXh0O1xuXG5cdGNvbG9yO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRvcHRpb25zID0ge1xuXHRcdFx0XHR0ZXh0OiBvcHRpb25zLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLiNvcHRpb25zID0ge1xuXHRcdFx0Y29sb3I6ICdjeWFuJyxcblx0XHRcdHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG5cdFx0XHRkaXNjYXJkU3RkaW46IHRydWUsXG5cdFx0XHRoaWRlQ3Vyc29yOiB0cnVlLFxuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHR9O1xuXG5cdFx0Ly8gUHVibGljXG5cdFx0dGhpcy5jb2xvciA9IHRoaXMuI29wdGlvbnMuY29sb3I7XG5cblx0XHQvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZXNlIHVzZSB0aGUgcHVibGljIHNldHRlcnMuXG5cdFx0dGhpcy5zcGlubmVyID0gdGhpcy4jb3B0aW9ucy5zcGlubmVyO1xuXG5cdFx0dGhpcy4jaW5pdGlhbEludGVydmFsID0gdGhpcy4jb3B0aW9ucy5pbnRlcnZhbDtcblx0XHR0aGlzLiNzdHJlYW0gPSB0aGlzLiNvcHRpb25zLnN0cmVhbTtcblx0XHR0aGlzLiNpc0VuYWJsZWQgPSB0eXBlb2YgdGhpcy4jb3B0aW9ucy5pc0VuYWJsZWQgPT09ICdib29sZWFuJyA/IHRoaXMuI29wdGlvbnMuaXNFbmFibGVkIDogaXNJbnRlcmFjdGl2ZSh7c3RyZWFtOiB0aGlzLiNzdHJlYW19KTtcblx0XHR0aGlzLiNpc1NpbGVudCA9IHR5cGVvZiB0aGlzLiNvcHRpb25zLmlzU2lsZW50ID09PSAnYm9vbGVhbicgPyB0aGlzLiNvcHRpb25zLmlzU2lsZW50IDogZmFsc2U7XG5cblx0XHQvLyBTZXQgKmFmdGVyKiBgdGhpcy4jc3RyZWFtYC5cblx0XHQvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZXNlIHVzZSB0aGUgcHVibGljIHNldHRlcnMuXG5cdFx0dGhpcy50ZXh0ID0gdGhpcy4jb3B0aW9ucy50ZXh0O1xuXHRcdHRoaXMucHJlZml4VGV4dCA9IHRoaXMuI29wdGlvbnMucHJlZml4VGV4dDtcblx0XHR0aGlzLnN1ZmZpeFRleHQgPSB0aGlzLiNvcHRpb25zLnN1ZmZpeFRleHQ7XG5cdFx0dGhpcy5pbmRlbnQgPSB0aGlzLiNvcHRpb25zLmluZGVudDtcblxuXHRcdGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG5cdFx0XHR0aGlzLl9zdHJlYW0gPSB0aGlzLiNzdHJlYW07XG5cdFx0XHR0aGlzLl9pc0VuYWJsZWQgPSB0aGlzLiNpc0VuYWJsZWQ7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2xpbmVzVG9DbGVhcicsIHtcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLiNsaW5lc1RvQ2xlYXI7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldChuZXdWYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuI2xpbmVzVG9DbGVhciA9IG5ld1ZhbHVlO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2ZyYW1lSW5kZXgnLCB7XG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy4jZnJhbWVJbmRleDtcblx0XHRcdFx0fSxcblx0XHRcdH0pO1xuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19saW5lQ291bnQnLCB7XG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy4jbGluZUNvdW50O1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IGluZGVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaW5kZW50O1xuXHR9XG5cblx0c2V0IGluZGVudChpbmRlbnQgPSAwKSB7XG5cdFx0aWYgKCEoaW5kZW50ID49IDAgJiYgTnVtYmVyLmlzSW50ZWdlcihpbmRlbnQpKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgYGluZGVudGAgb3B0aW9uIG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDAgYW5kIHVwJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jaW5kZW50ID0gaW5kZW50O1xuXHRcdHRoaXMudXBkYXRlTGluZUNvdW50KCk7XG5cdH1cblxuXHRnZXQgaW50ZXJ2YWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2luaXRpYWxJbnRlcnZhbCB8fCB0aGlzLiNzcGlubmVyLmludGVydmFsIHx8IDEwMDtcblx0fVxuXG5cdGdldCBzcGlubmVyKCkge1xuXHRcdHJldHVybiB0aGlzLiNzcGlubmVyO1xuXHR9XG5cblx0c2V0IHNwaW5uZXIoc3Bpbm5lcikge1xuXHRcdHRoaXMuI2ZyYW1lSW5kZXggPSAwO1xuXHRcdHRoaXMuI2luaXRpYWxJbnRlcnZhbCA9IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0eXBlb2Ygc3Bpbm5lciA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGlmIChzcGlubmVyLmZyYW1lcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIHNwaW5uZXIgbXVzdCBoYXZlIGEgYGZyYW1lc2AgcHJvcGVydHknKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy4jc3Bpbm5lciA9IHNwaW5uZXI7XG5cdFx0fSBlbHNlIGlmICghaXNVbmljb2RlU3VwcG9ydGVkKCkpIHtcblx0XHRcdHRoaXMuI3NwaW5uZXIgPSBjbGlTcGlubmVycy5saW5lO1xuXHRcdH0gZWxzZSBpZiAoc3Bpbm5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTZXQgZGVmYXVsdCBzcGlubmVyXG5cdFx0XHR0aGlzLiNzcGlubmVyID0gY2xpU3Bpbm5lcnMuZG90cztcblx0XHR9IGVsc2UgaWYgKHNwaW5uZXIgIT09ICdkZWZhdWx0JyAmJiBjbGlTcGlubmVyc1tzcGlubmVyXSkge1xuXHRcdFx0dGhpcy4jc3Bpbm5lciA9IGNsaVNwaW5uZXJzW3NwaW5uZXJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIGJ1aWx0LWluIHNwaW5uZXIgbmFtZWQgJyR7c3Bpbm5lcn0nLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9jbGktc3Bpbm5lcnMvYmxvYi9tYWluL3NwaW5uZXJzLmpzb24gZm9yIGEgZnVsbCBsaXN0LmApO1xuXHRcdH1cblx0fVxuXG5cdGdldCB0ZXh0KCkge1xuXHRcdHJldHVybiB0aGlzLiN0ZXh0O1xuXHR9XG5cblx0c2V0IHRleHQodmFsdWUpIHtcblx0XHR0aGlzLiN0ZXh0ID0gdmFsdWUgfHwgJyc7XG5cdFx0dGhpcy51cGRhdGVMaW5lQ291bnQoKTtcblx0fVxuXG5cdGdldCBwcmVmaXhUZXh0KCkge1xuXHRcdHJldHVybiB0aGlzLiNwcmVmaXhUZXh0O1xuXHR9XG5cblx0c2V0IHByZWZpeFRleHQodmFsdWUpIHtcblx0XHR0aGlzLiNwcmVmaXhUZXh0ID0gdmFsdWUgfHwgJyc7XG5cdFx0dGhpcy51cGRhdGVMaW5lQ291bnQoKTtcblx0fVxuXG5cdGdldCBzdWZmaXhUZXh0KCkge1xuXHRcdHJldHVybiB0aGlzLiNzdWZmaXhUZXh0O1xuXHR9XG5cblx0c2V0IHN1ZmZpeFRleHQodmFsdWUpIHtcblx0XHR0aGlzLiNzdWZmaXhUZXh0ID0gdmFsdWUgfHwgJyc7XG5cdFx0dGhpcy51cGRhdGVMaW5lQ291bnQoKTtcblx0fVxuXG5cdGdldCBpc1NwaW5uaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLiNpZCAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gVE9ETzogVXNlIHByaXZhdGUgbWV0aG9kcyB3aGVuIHRhcmdldGluZyBOb2RlLmpzIDE0LlxuXHRnZXRGdWxsUHJlZml4VGV4dChwcmVmaXhUZXh0ID0gdGhpcy4jcHJlZml4VGV4dCwgcG9zdGZpeCA9ICcgJykge1xuXHRcdGlmICh0eXBlb2YgcHJlZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgcHJlZml4VGV4dCAhPT0gJycpIHtcblx0XHRcdHJldHVybiBwcmVmaXhUZXh0ICsgcG9zdGZpeDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHByZWZpeFRleHQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBwcmVmaXhUZXh0KCkgKyBwb3N0Zml4O1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGdldEZ1bGxTdWZmaXhUZXh0KHN1ZmZpeFRleHQgPSB0aGlzLiNzdWZmaXhUZXh0LCBwcmVmaXggPSAnICcpIHtcblx0XHRpZiAodHlwZW9mIHN1ZmZpeFRleHQgPT09ICdzdHJpbmcnICYmIHN1ZmZpeFRleHQgIT09ICcnKSB7XG5cdFx0XHRyZXR1cm4gcHJlZml4ICsgc3VmZml4VGV4dDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHN1ZmZpeFRleHQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBwcmVmaXggKyBzdWZmaXhUZXh0KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0dXBkYXRlTGluZUNvdW50KCkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLiNzdHJlYW0uY29sdW1ucyB8fCA4MDtcblx0XHRjb25zdCBmdWxsUHJlZml4VGV4dCA9IHRoaXMuZ2V0RnVsbFByZWZpeFRleHQodGhpcy4jcHJlZml4VGV4dCwgJy0nKTtcblx0XHRjb25zdCBmdWxsU3VmZml4VGV4dCA9IHRoaXMuZ2V0RnVsbFN1ZmZpeFRleHQodGhpcy4jc3VmZml4VGV4dCwgJy0nKTtcblx0XHRjb25zdCBmdWxsVGV4dCA9ICcgJy5yZXBlYXQodGhpcy4jaW5kZW50KSArIGZ1bGxQcmVmaXhUZXh0ICsgJy0tJyArIHRoaXMuI3RleHQgKyAnLS0nICsgZnVsbFN1ZmZpeFRleHQ7XG5cblx0XHR0aGlzLiNsaW5lQ291bnQgPSAwO1xuXHRcdGZvciAoY29uc3QgbGluZSBvZiBzdHJpcEFuc2koZnVsbFRleHQpLnNwbGl0KCdcXG4nKSkge1xuXHRcdFx0dGhpcy4jbGluZUNvdW50ICs9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh3Y3dpZHRoKGxpbmUpIC8gY29sdW1ucykpO1xuXHRcdH1cblx0fVxuXG5cdGdldCBpc0VuYWJsZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2lzRW5hYmxlZCAmJiAhdGhpcy4jaXNTaWxlbnQ7XG5cdH1cblxuXHRzZXQgaXNFbmFibGVkKHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzRW5hYmxlZGAgb3B0aW9uIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jaXNFbmFibGVkID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgaXNTaWxlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2lzU2lsZW50O1xuXHR9XG5cblx0c2V0IGlzU2lsZW50KHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzU2lsZW50YCBvcHRpb24gbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0XHR9XG5cblx0XHR0aGlzLiNpc1NpbGVudCA9IHZhbHVlO1xuXHR9XG5cblx0ZnJhbWUoKSB7XG5cdFx0Y29uc3Qge2ZyYW1lc30gPSB0aGlzLiNzcGlubmVyO1xuXHRcdGxldCBmcmFtZSA9IGZyYW1lc1t0aGlzLiNmcmFtZUluZGV4XTtcblxuXHRcdGlmICh0aGlzLmNvbG9yKSB7XG5cdFx0XHRmcmFtZSA9IGNoYWxrW3RoaXMuY29sb3JdKGZyYW1lKTtcblx0XHR9XG5cblx0XHR0aGlzLiNmcmFtZUluZGV4ID0gKyt0aGlzLiNmcmFtZUluZGV4ICUgZnJhbWVzLmxlbmd0aDtcblx0XHRjb25zdCBmdWxsUHJlZml4VGV4dCA9ICh0eXBlb2YgdGhpcy4jcHJlZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgdGhpcy4jcHJlZml4VGV4dCAhPT0gJycpID8gdGhpcy4jcHJlZml4VGV4dCArICcgJyA6ICcnO1xuXHRcdGNvbnN0IGZ1bGxUZXh0ID0gdHlwZW9mIHRoaXMudGV4dCA9PT0gJ3N0cmluZycgPyAnICcgKyB0aGlzLnRleHQgOiAnJztcblx0XHRjb25zdCBmdWxsU3VmZml4VGV4dCA9ICh0eXBlb2YgdGhpcy4jc3VmZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgdGhpcy4jc3VmZml4VGV4dCAhPT0gJycpID8gJyAnICsgdGhpcy4jc3VmZml4VGV4dCA6ICcnO1xuXG5cdFx0cmV0dXJuIGZ1bGxQcmVmaXhUZXh0ICsgZnJhbWUgKyBmdWxsVGV4dCArIGZ1bGxTdWZmaXhUZXh0O1xuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0aWYgKCF0aGlzLiNpc0VuYWJsZWQgfHwgIXRoaXMuI3N0cmVhbS5pc1RUWSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhpcy4jc3RyZWFtLmN1cnNvclRvKDApO1xuXG5cdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuI2xpbmVzVG9DbGVhcjsgaW5kZXgrKykge1xuXHRcdFx0aWYgKGluZGV4ID4gMCkge1xuXHRcdFx0XHR0aGlzLiNzdHJlYW0ubW92ZUN1cnNvcigwLCAtMSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuI3N0cmVhbS5jbGVhckxpbmUoMSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuI2luZGVudCB8fCB0aGlzLmxhc3RJbmRlbnQgIT09IHRoaXMuI2luZGVudCkge1xuXHRcdFx0dGhpcy4jc3RyZWFtLmN1cnNvclRvKHRoaXMuI2luZGVudCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sYXN0SW5kZW50ID0gdGhpcy4jaW5kZW50O1xuXHRcdHRoaXMuI2xpbmVzVG9DbGVhciA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlbmRlcigpIHtcblx0XHRpZiAodGhpcy4jaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHR0aGlzLiNzdHJlYW0ud3JpdGUodGhpcy5mcmFtZSgpKTtcblx0XHR0aGlzLiNsaW5lc1RvQ2xlYXIgPSB0aGlzLiNsaW5lQ291bnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0YXJ0KHRleHQpIHtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0dGhpcy50ZXh0ID0gdGV4dDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy4jaXNFbmFibGVkKSB7XG5cdFx0XHRpZiAodGhpcy50ZXh0KSB7XG5cdFx0XHRcdHRoaXMuI3N0cmVhbS53cml0ZShgLSAke3RoaXMudGV4dH1cXG5gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNTcGlubmluZykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuI29wdGlvbnMuaGlkZUN1cnNvcikge1xuXHRcdFx0Y2xpQ3Vyc29yLmhpZGUodGhpcy4jc3RyZWFtKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jb3B0aW9ucy5kaXNjYXJkU3RkaW4gJiYgcHJvY2Vzcy5zdGRpbi5pc1RUWSkge1xuXHRcdFx0dGhpcy4jaXNEaXNjYXJkaW5nU3RkaW4gPSB0cnVlO1xuXHRcdFx0c3RkaW5EaXNjYXJkZXIuc3RhcnQoKTtcblx0XHR9XG5cblx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdHRoaXMuI2lkID0gc2V0SW50ZXJ2YWwodGhpcy5yZW5kZXIuYmluZCh0aGlzKSwgdGhpcy5pbnRlcnZhbCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCF0aGlzLiNpc0VuYWJsZWQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy4jaWQpO1xuXHRcdHRoaXMuI2lkID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuI2ZyYW1lSW5kZXggPSAwO1xuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHRpZiAodGhpcy4jb3B0aW9ucy5oaWRlQ3Vyc29yKSB7XG5cdFx0XHRjbGlDdXJzb3Iuc2hvdyh0aGlzLiNzdHJlYW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvcHRpb25zLmRpc2NhcmRTdGRpbiAmJiBwcm9jZXNzLnN0ZGluLmlzVFRZICYmIHRoaXMuI2lzRGlzY2FyZGluZ1N0ZGluKSB7XG5cdFx0XHRzdGRpbkRpc2NhcmRlci5zdG9wKCk7XG5cdFx0XHR0aGlzLiNpc0Rpc2NhcmRpbmdTdGRpbiA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3VjY2VlZCh0ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcEFuZFBlcnNpc3Qoe3N5bWJvbDogbG9nU3ltYm9scy5zdWNjZXNzLCB0ZXh0fSk7XG5cdH1cblxuXHRmYWlsKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLmVycm9yLCB0ZXh0fSk7XG5cdH1cblxuXHR3YXJuKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLndhcm5pbmcsIHRleHR9KTtcblx0fVxuXG5cdGluZm8odGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMuaW5mbywgdGV4dH0pO1xuXHR9XG5cblx0c3RvcEFuZFBlcnNpc3Qob3B0aW9ucyA9IHt9KSB7XG5cdFx0aWYgKHRoaXMuI2lzU2lsZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBwcmVmaXhUZXh0ID0gb3B0aW9ucy5wcmVmaXhUZXh0IHx8IHRoaXMuI3ByZWZpeFRleHQ7XG5cdFx0Y29uc3QgZnVsbFByZWZpeFRleHQgPSB0aGlzLmdldEZ1bGxQcmVmaXhUZXh0KHByZWZpeFRleHQsICcgJyk7XG5cblx0XHRjb25zdCBzeW1ib2xUZXh0ID0gb3B0aW9ucy5zeW1ib2wgfHwgJyAnO1xuXG5cdFx0Y29uc3QgdGV4dCA9IG9wdGlvbnMudGV4dCB8fCB0aGlzLnRleHQ7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSA/ICcgJyArIHRleHQgOiAnJztcblxuXHRcdGNvbnN0IHN1ZmZpeFRleHQgPSBvcHRpb25zLnN1ZmZpeFRleHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuc3VmZml4VGV4dCA6IHRoaXMuI3N1ZmZpeFRleHQ7XG5cdFx0Y29uc3QgZnVsbFN1ZmZpeFRleHQgPSB0aGlzLmdldEZ1bGxTdWZmaXhUZXh0KHN1ZmZpeFRleHQsICcgJyk7XG5cblx0XHRjb25zdCB0ZXh0VG9Xcml0ZSA9IGZ1bGxQcmVmaXhUZXh0ICsgc3ltYm9sVGV4dCArIGZ1bGxUZXh0ICsgZnVsbFN1ZmZpeFRleHQgKyAnXFxuJztcblxuXHRcdHRoaXMuc3RvcCgpO1xuXHRcdHRoaXMuI3N0cmVhbS53cml0ZSh0ZXh0VG9Xcml0ZSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmEob3B0aW9ucykge1xuXHRyZXR1cm4gbmV3IE9yYShvcHRpb25zKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9yYVByb21pc2UoYWN0aW9uLCBvcHRpb25zKSB7XG5cdGNvbnN0IGFjdGlvbklzRnVuY3Rpb24gPSB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nO1xuXHRjb25zdCBhY3Rpb25Jc1Byb21pc2UgPSB0eXBlb2YgYWN0aW9uLnRoZW4gPT09ICdmdW5jdGlvbic7XG5cblx0aWYgKCFhY3Rpb25Jc0Z1bmN0aW9uICYmICFhY3Rpb25Jc1Byb21pc2UpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgYGFjdGlvbmAgbXVzdCBiZSBhIEZ1bmN0aW9uIG9yIGEgUHJvbWlzZScpO1xuXHR9XG5cblx0Y29uc3Qge3N1Y2Nlc3NUZXh0LCBmYWlsVGV4dH0gPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCdcblx0XHQ/IG9wdGlvbnNcblx0XHQ6IHtzdWNjZXNzVGV4dDogdW5kZWZpbmVkLCBmYWlsVGV4dDogdW5kZWZpbmVkfTtcblxuXHRjb25zdCBzcGlubmVyID0gb3JhKG9wdGlvbnMpLnN0YXJ0KCk7XG5cblx0dHJ5IHtcblx0XHRjb25zdCBwcm9taXNlID0gYWN0aW9uSXNGdW5jdGlvbiA/IGFjdGlvbihzcGlubmVyKSA6IGFjdGlvbjtcblx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuXG5cdFx0c3Bpbm5lci5zdWNjZWVkKFxuXHRcdFx0c3VjY2Vzc1RleHQgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHQ6ICh0eXBlb2Ygc3VjY2Vzc1RleHQgPT09ICdzdHJpbmcnID8gc3VjY2Vzc1RleHQgOiBzdWNjZXNzVGV4dChyZXN1bHQpKSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRzcGlubmVyLmZhaWwoXG5cdFx0XHRmYWlsVGV4dCA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogKHR5cGVvZiBmYWlsVGV4dCA9PT0gJ3N0cmluZycgPyBmYWlsVGV4dCA6IGZhaWxUZXh0KGVycm9yKSksXG5cdFx0KTtcblxuXHRcdHRocm93IGVycm9yO1xuXHR9XG59XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzcGlubmVyc30gZnJvbSAnY2xpLXNwaW5uZXJzJztcbiIsICJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWUocmVkLCBncmVlbiwgYmx1ZSkge1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHRcdFx0XHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0XHRcdFx0aWYgKHJlZCA9PT0gZ3JlZW4gJiYgZ3JlZW4gPT09IGJsdWUpIHtcblx0XHRcdFx0XHRpZiAocmVkIDwgOCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDE2O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZWQgPiAyNDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAyMzE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoKChyZWQgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTZcblx0XHRcdFx0XHQrICgzNiAqIE1hdGgucm91bmQocmVkIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyAoNiAqIE1hdGgucm91bmQoZ3JlZW4gLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrIE1hdGgucm91bmQoYmx1ZSAvIDI1NSAqIDUpO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9SZ2I6IHtcblx0XHRcdHZhbHVlKGhleCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaGVzID0gL1thLWZcXGRdezZ9fFthLWZcXGRdezN9L2kuZXhlYyhoZXgudG9TdHJpbmcoMTYpKTtcblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBbY29sb3JTdHJpbmddID0gbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBbLi4uY29sb3JTdHJpbmddLm1hcChjaGFyYWN0ZXIgPT4gY2hhcmFjdGVyICsgY2hhcmFjdGVyKS5qb2luKCcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGludGVnZXIgPSBOdW1iZXIucGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XHQoaW50ZWdlciA+PiAxNikgJiAweEZGLFxuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDgpICYgMHhGRixcblx0XHRcdFx0XHRpbnRlZ2VyICYgMHhGRixcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMucmdiVG9BbnNpMjU2KC4uLnN0eWxlcy5oZXhUb1JnYihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0YW5zaTI1NlRvQW5zaToge1xuXHRcdFx0dmFsdWUoY29kZSkge1xuXHRcdFx0XHRpZiAoY29kZSA8IDgpIHtcblx0XHRcdFx0XHRyZXR1cm4gMzAgKyBjb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvZGUgPCAxNikge1xuXHRcdFx0XHRcdHJldHVybiA5MCArIChjb2RlIC0gOCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVkO1xuXHRcdFx0XHRsZXQgZ3JlZW47XG5cdFx0XHRcdGxldCBibHVlO1xuXG5cdFx0XHRcdGlmIChjb2RlID49IDIzMikge1xuXHRcdFx0XHRcdHJlZCA9ICgoKGNvZGUgLSAyMzIpICogMTApICsgOCkgLyAyNTU7XG5cdFx0XHRcdFx0Z3JlZW4gPSByZWQ7XG5cdFx0XHRcdFx0Ymx1ZSA9IHJlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2RlIC09IDE2O1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluZGVyID0gY29kZSAlIDM2O1xuXG5cdFx0XHRcdFx0cmVkID0gTWF0aC5mbG9vcihjb2RlIC8gMzYpIC8gNTtcblx0XHRcdFx0XHRncmVlbiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gNikgLyA1O1xuXHRcdFx0XHRcdGJsdWUgPSAocmVtYWluZGVyICUgNikgLyA1O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSAqIDI7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdFx0bGV0IHJlc3VsdCA9IDMwICsgKChNYXRoLnJvdW5kKGJsdWUpIDw8IDIpIHwgKE1hdGgucm91bmQoZ3JlZW4pIDw8IDEpIHwgTWF0aC5yb3VuZChyZWQpKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gNjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0cmdiVG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5yZ2JUb0Fuc2kyNTYocmVkLCBncmVlbiwgYmx1ZSkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLmhleFRvQW5zaTI1NihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmNvbnN0IGFuc2lTdHlsZXMgPSBhc3NlbWJsZVN0eWxlcygpO1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpU3R5bGVzO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgdHR5IGZyb20gJ25vZGU6dHR5JztcblxuLy8gRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9oYXMtZmxhZy9ibG9iL21haW4vaW5kZXguanNcbmZ1bmN0aW9uIGhhc0ZsYWcoZmxhZywgYXJndiA9IGdsb2JhbFRoaXMuRGVubyA/IGdsb2JhbFRoaXMuRGVuby5hcmdzIDogcHJvY2Vzcy5hcmd2KSB7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zaXRpb24gPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvc2l0aW9uICE9PSAtMSAmJiAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbik7XG59XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZsYWdGb3JjZUNvbG9yO1xuaWYgKFxuXHRoYXNGbGFnKCduby1jb2xvcicpXG5cdHx8IGhhc0ZsYWcoJ25vLWNvbG9ycycpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJylcblx0fHwgaGFzRmxhZygnY29sb3I9bmV2ZXInKVxuKSB7XG5cdGZsYWdGb3JjZUNvbG9yID0gMDtcbn0gZWxzZSBpZiAoXG5cdGhhc0ZsYWcoJ2NvbG9yJylcblx0fHwgaGFzRmxhZygnY29sb3JzJylcblx0fHwgaGFzRmxhZygnY29sb3I9dHJ1ZScpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpXG4pIHtcblx0ZmxhZ0ZvcmNlQ29sb3IgPSAxO1xufVxuXG5mdW5jdGlvbiBlbnZGb3JjZUNvbG9yKCkge1xuXHRpZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0XHRpZiAoZW52LkZPUkNFX0NPTE9SID09PSAndHJ1ZScpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICdmYWxzZScpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKE51bWJlci5wYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSwgMyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzLFxuXHR9O1xufVxuXG5mdW5jdGlvbiBfc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCB7c3RyZWFtSXNUVFksIHNuaWZmRmxhZ3MgPSB0cnVlfSA9IHt9KSB7XG5cdGNvbnN0IG5vRmxhZ0ZvcmNlQ29sb3IgPSBlbnZGb3JjZUNvbG9yKCk7XG5cdGlmIChub0ZsYWdGb3JjZUNvbG9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRmbGFnRm9yY2VDb2xvciA9IG5vRmxhZ0ZvcmNlQ29sb3I7XG5cdH1cblxuXHRjb25zdCBmb3JjZUNvbG9yID0gc25pZmZGbGFncyA/IGZsYWdGb3JjZUNvbG9yIDogbm9GbGFnRm9yY2VDb2xvcjtcblxuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKHNuaWZmRmxhZ3MpIHtcblx0XHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJylcblx0XHRcdHx8IGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKVxuXHRcdFx0fHwgaGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRcdHJldHVybiAzO1xuXHRcdH1cblxuXHRcdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdFx0cmV0dXJuIDI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgZm9yIEF6dXJlIERldk9wcyBwaXBlbGluZXMuXG5cdC8vIEhhcyB0byBiZSBhYm92ZSB0aGUgYCFzdHJlYW1Jc1RUWWAgY2hlY2suXG5cdGlmICgnVEZfQlVJTEQnIGluIGVudiAmJiAnQUdFTlRfTkFNRScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwXG5cdFx0XHQmJiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMF81ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNF85MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmICgnR0lUSFVCX0FDVElPTlMnIGluIGVudikge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdCVUlMREtJVEUnLCAnRFJPTkUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ3h0ZXJtLWtpdHR5Jykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBOdW1iZXIucGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOiB7XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdH1cblxuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOiB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgbGV2ZWwgPSBfc3VwcG9ydHNDb2xvcihzdHJlYW0sIHtcblx0XHRzdHJlYW1Jc1RUWTogc3RyZWFtICYmIHN0cmVhbS5pc1RUWSxcblx0XHQuLi5vcHRpb25zLFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5jb25zdCBzdXBwb3J0c0NvbG9yID0ge1xuXHRzdGRvdXQ6IGNyZWF0ZVN1cHBvcnRzQ29sb3Ioe2lzVFRZOiB0dHkuaXNhdHR5KDEpfSksXG5cdHN0ZGVycjogY3JlYXRlU3VwcG9ydHNDb2xvcih7aXNUVFk6IHR0eS5pc2F0dHkoMil9KSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN1cHBvcnRzQ29sb3I7XG4iLCAiLy8gVE9ETzogV2hlbiB0YXJnZXRpbmcgTm9kZS5qcyAxNiwgdXNlIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgLlxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgsIGluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnNsaWNlKGVuZEluZGV4LCAoZ290Q1IgPyBpbmRleCAtIDEgOiBpbmRleCkpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG4iLCAiaW1wb3J0IGFuc2lTdHlsZXMgZnJvbSAnI2Fuc2ktc3R5bGVzJztcbmltcG9ydCBzdXBwb3J0c0NvbG9yIGZyb20gJyNzdXBwb3J0cy1jb2xvcic7XG5pbXBvcnQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9vcmRlclxuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgsXG59IGZyb20gJy4vdXRpbGl0aWVzLmpzJztcblxuY29uc3Qge3N0ZG91dDogc3Rkb3V0Q29sb3IsIHN0ZGVycjogc3RkZXJyQ29sb3J9ID0gc3VwcG9ydHNDb2xvcjtcblxuY29uc3QgR0VORVJBVE9SID0gU3ltYm9sKCdHRU5FUkFUT1InKTtcbmNvbnN0IFNUWUxFUiA9IFN5bWJvbCgnU1RZTEVSJyk7XG5jb25zdCBJU19FTVBUWSA9IFN5bWJvbCgnSVNfRU1QVFknKTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIFx1MjE5MiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bScsXG5dO1xuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5jb25zdCBhcHBseU9wdGlvbnMgPSAob2JqZWN0LCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMubGV2ZWwgJiYgIShOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMubGV2ZWwpICYmIG9wdGlvbnMubGV2ZWwgPj0gMCAmJiBvcHRpb25zLmxldmVsIDw9IDMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgYGxldmVsYCBvcHRpb24gc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSAwIHRvIDMnKTtcblx0fVxuXG5cdC8vIERldGVjdCBsZXZlbCBpZiBub3Qgc2V0IG1hbnVhbGx5XG5cdGNvbnN0IGNvbG9yTGV2ZWwgPSBzdGRvdXRDb2xvciA/IHN0ZG91dENvbG9yLmxldmVsIDogMDtcblx0b2JqZWN0LmxldmVsID0gb3B0aW9ucy5sZXZlbCA9PT0gdW5kZWZpbmVkID8gY29sb3JMZXZlbCA6IG9wdGlvbnMubGV2ZWw7XG59O1xuXG5leHBvcnQgY2xhc3MgQ2hhbGsge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0gKC4uLnN0cmluZ3MpID0+IHN0cmluZ3Muam9pbignICcpO1xuXHRhcHBseU9wdGlvbnMoY2hhbGssIG9wdGlvbnMpO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgY3JlYXRlQ2hhbGsucHJvdG90eXBlKTtcblxuXHRyZXR1cm4gY2hhbGs7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFsayhvcHRpb25zKSB7XG5cdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG59XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihjcmVhdGVDaGFsay5wcm90b3R5cGUsIEZ1bmN0aW9uLnByb3RvdHlwZSk7XG5cbmZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGFuc2lTdHlsZXMpKSB7XG5cdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIGNyZWF0ZVN0eWxlcihzdHlsZS5vcGVuLCBzdHlsZS5jbG9zZSwgdGhpc1tTVFlMRVJdKSwgdGhpc1tJU19FTVBUWV0pO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9LFxuXHR9O1xufVxuXG5zdHlsZXMudmlzaWJsZSA9IHtcblx0Z2V0KCkge1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIHRoaXNbU1RZTEVSXSwgdHJ1ZSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd2aXNpYmxlJywge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdH0sXG59O1xuXG5jb25zdCBnZXRNb2RlbEFuc2kgPSAobW9kZWwsIGxldmVsLCB0eXBlLCAuLi5hcmd1bWVudHNfKSA9PiB7XG5cdGlmIChtb2RlbCA9PT0gJ3JnYicpIHtcblx0XHRpZiAobGV2ZWwgPT09ICdhbnNpMTZtJykge1xuXHRcdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaTE2bSguLi5hcmd1bWVudHNfKTtcblx0XHR9XG5cblx0XHRpZiAobGV2ZWwgPT09ICdhbnNpMjU2Jykge1xuXHRcdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaTI1NihhbnNpU3R5bGVzLnJnYlRvQW5zaTI1NiguLi5hcmd1bWVudHNfKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaShhbnNpU3R5bGVzLnJnYlRvQW5zaSguLi5hcmd1bWVudHNfKSk7XG5cdH1cblxuXHRpZiAobW9kZWwgPT09ICdoZXgnKSB7XG5cdFx0cmV0dXJuIGdldE1vZGVsQW5zaSgncmdiJywgbGV2ZWwsIHR5cGUsIC4uLmFuc2lTdHlsZXMuaGV4VG9SZ2IoLi4uYXJndW1lbnRzXykpO1xuXHR9XG5cblx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV1bbW9kZWxdKC4uLmFyZ3VtZW50c18pO1xufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdhbnNpMjU2J107XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRzdHlsZXNbbW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihnZXRNb2RlbEFuc2kobW9kZWwsIGxldmVsTWFwcGluZ1tsZXZlbF0sICdjb2xvcicsIC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmNvbG9yLmNsb3NlLCB0aGlzW1NUWUxFUl0pO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXNbSVNfRU1QVFldKTtcblx0XHRcdH07XG5cdFx0fSxcblx0fTtcblxuXHRjb25zdCBiZ01vZGVsID0gJ2JnJyArIG1vZGVsWzBdLnRvVXBwZXJDYXNlKCkgKyBtb2RlbC5zbGljZSgxKTtcblx0c3R5bGVzW2JnTW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihnZXRNb2RlbEFuc2kobW9kZWwsIGxldmVsTWFwcGluZ1tsZXZlbF0sICdiZ0NvbG9yJywgLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpc1tTVFlMRVJdKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzW0lTX0VNUFRZXSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdH07XG59XG5cbmNvbnN0IHByb3RvID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoKCkgPT4ge30sIHtcblx0Li4uc3R5bGVzLFxuXHRsZXZlbDoge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbR0VORVJBVE9SXS5sZXZlbDtcblx0XHR9LFxuXHRcdHNldChsZXZlbCkge1xuXHRcdFx0dGhpc1tHRU5FUkFUT1JdLmxldmVsID0gbGV2ZWw7XG5cdFx0fSxcblx0fSxcbn0pO1xuXG5jb25zdCBjcmVhdGVTdHlsZXIgPSAob3BlbiwgY2xvc2UsIHBhcmVudCkgPT4ge1xuXHRsZXQgb3BlbkFsbDtcblx0bGV0IGNsb3NlQWxsO1xuXHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRvcGVuQWxsID0gb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlO1xuXHR9IGVsc2Uge1xuXHRcdG9wZW5BbGwgPSBwYXJlbnQub3BlbkFsbCArIG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZSArIHBhcmVudC5jbG9zZUFsbDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0b3Blbixcblx0XHRjbG9zZSxcblx0XHRvcGVuQWxsLFxuXHRcdGNsb3NlQWxsLFxuXHRcdHBhcmVudCxcblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZUJ1aWxkZXIgPSAoc2VsZiwgX3N0eWxlciwgX2lzRW1wdHkpID0+IHtcblx0Ly8gU2luZ2xlIGFyZ3VtZW50IGlzIGhvdCBwYXRoLCBpbXBsaWNpdCBjb2VyY2lvbiBpcyBmYXN0ZXIgdGhhbiBhbnl0aGluZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0Y29uc3QgYnVpbGRlciA9ICguLi5hcmd1bWVudHNfKSA9PiBhcHBseVN0eWxlKGJ1aWxkZXIsIChhcmd1bWVudHNfLmxlbmd0aCA9PT0gMSkgPyAoJycgKyBhcmd1bWVudHNfWzBdKSA6IGFyZ3VtZW50c18uam9pbignICcpKTtcblxuXHQvLyBXZSBhbHRlciB0aGUgcHJvdG90eXBlIGJlY2F1c2Ugd2UgbXVzdCByZXR1cm4gYSBmdW5jdGlvbiwgYnV0IHRoZXJlIGlzXG5cdC8vIG5vIHdheSB0byBjcmVhdGUgYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IHByb3RvdHlwZVxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVpbGRlciwgcHJvdG8pO1xuXG5cdGJ1aWxkZXJbR0VORVJBVE9SXSA9IHNlbGY7XG5cdGJ1aWxkZXJbU1RZTEVSXSA9IF9zdHlsZXI7XG5cdGJ1aWxkZXJbSVNfRU1QVFldID0gX2lzRW1wdHk7XG5cblx0cmV0dXJuIGJ1aWxkZXI7XG59O1xuXG5jb25zdCBhcHBseVN0eWxlID0gKHNlbGYsIHN0cmluZykgPT4ge1xuXHRpZiAoc2VsZi5sZXZlbCA8PSAwIHx8ICFzdHJpbmcpIHtcblx0XHRyZXR1cm4gc2VsZltJU19FTVBUWV0gPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmW1NUWUxFUl07XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5jbHVkZXMoJ1xcdTAwMUInKSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNyZWF0ZUNoYWxrLnByb3RvdHlwZSwgc3R5bGVzKTtcblxuY29uc3QgY2hhbGsgPSBjcmVhdGVDaGFsaygpO1xuZXhwb3J0IGNvbnN0IGNoYWxrU3RkZXJyID0gY3JlYXRlQ2hhbGsoe2xldmVsOiBzdGRlcnJDb2xvciA/IHN0ZGVyckNvbG9yLmxldmVsIDogMH0pO1xuXG5leHBvcnQge1xuXHRtb2RpZmllck5hbWVzLFxuXHRmb3JlZ3JvdW5kQ29sb3JOYW1lcyxcblx0YmFja2dyb3VuZENvbG9yTmFtZXMsXG5cdGNvbG9yTmFtZXMsXG5cblx0Ly8gVE9ETzogUmVtb3ZlIHRoZXNlIGFsaWFzZXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxuXHRtb2RpZmllck5hbWVzIGFzIG1vZGlmaWVycyxcblx0Zm9yZWdyb3VuZENvbG9yTmFtZXMgYXMgZm9yZWdyb3VuZENvbG9ycyxcblx0YmFja2dyb3VuZENvbG9yTmFtZXMgYXMgYmFja2dyb3VuZENvbG9ycyxcblx0Y29sb3JOYW1lcyBhcyBjb2xvcnMsXG59IGZyb20gJy4vdmVuZG9yL2Fuc2ktc3R5bGVzL2luZGV4LmpzJztcblxuZXhwb3J0IHtcblx0c3Rkb3V0Q29sb3IgYXMgc3VwcG9ydHNDb2xvcixcblx0c3RkZXJyQ29sb3IgYXMgc3VwcG9ydHNDb2xvclN0ZGVycixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNoYWxrO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcmVzdG9yZUN1cnNvciBmcm9tICdyZXN0b3JlLWN1cnNvcic7XG5cbmxldCBpc0hpZGRlbiA9IGZhbHNlO1xuXG5jb25zdCBjbGlDdXJzb3IgPSB7fTtcblxuY2xpQ3Vyc29yLnNob3cgPSAod3JpdGFibGVTdHJlYW0gPSBwcm9jZXNzLnN0ZGVycikgPT4ge1xuXHRpZiAoIXdyaXRhYmxlU3RyZWFtLmlzVFRZKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aXNIaWRkZW4gPSBmYWxzZTtcblx0d3JpdGFibGVTdHJlYW0ud3JpdGUoJ1xcdTAwMUJbPzI1aCcpO1xufTtcblxuY2xpQ3Vyc29yLmhpZGUgPSAod3JpdGFibGVTdHJlYW0gPSBwcm9jZXNzLnN0ZGVycikgPT4ge1xuXHRpZiAoIXdyaXRhYmxlU3RyZWFtLmlzVFRZKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cmVzdG9yZUN1cnNvcigpO1xuXHRpc0hpZGRlbiA9IHRydWU7XG5cdHdyaXRhYmxlU3RyZWFtLndyaXRlKCdcXHUwMDFCWz8yNWwnKTtcbn07XG5cbmNsaUN1cnNvci50b2dnbGUgPSAoZm9yY2UsIHdyaXRhYmxlU3RyZWFtKSA9PiB7XG5cdGlmIChmb3JjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aXNIaWRkZW4gPSBmb3JjZTtcblx0fVxuXG5cdGlmIChpc0hpZGRlbikge1xuXHRcdGNsaUN1cnNvci5zaG93KHdyaXRhYmxlU3RyZWFtKTtcblx0fSBlbHNlIHtcblx0XHRjbGlDdXJzb3IuaGlkZSh3cml0YWJsZVN0cmVhbSk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsaUN1cnNvcjtcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IG9uZXRpbWUgZnJvbSAnb25ldGltZSc7XG5pbXBvcnQgc2lnbmFsRXhpdCBmcm9tICdzaWduYWwtZXhpdCc7XG5cbmNvbnN0IHJlc3RvcmVDdXJzb3IgPSBvbmV0aW1lKCgpID0+IHtcblx0c2lnbmFsRXhpdCgoKSA9PiB7XG5cdFx0cHJvY2Vzcy5zdGRlcnIud3JpdGUoJ1xcdTAwMUJbPzI1aCcpO1xuXHR9LCB7YWx3YXlzTGFzdDogdHJ1ZX0pO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3RvcmVDdXJzb3I7XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNVbmljb2RlU3VwcG9ydGVkKCkge1xuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuXHRcdHJldHVybiBwcm9jZXNzLmVudi5URVJNICE9PSAnbGludXgnOyAvLyBMaW51eCBjb25zb2xlIChrZXJuZWwpXG5cdH1cblxuXHRyZXR1cm4gQm9vbGVhbihwcm9jZXNzLmVudi5DSSlcblx0XHR8fCBCb29sZWFuKHByb2Nlc3MuZW52LldUX1NFU1NJT04pIC8vIFdpbmRvd3MgVGVybWluYWxcblx0XHR8fCBCb29sZWFuKHByb2Nlc3MuZW52LlRFUk1JTlVTX1NVQkxJTUUpIC8vIFRlcm1pbnVzICg8MC4yLjI3KVxuXHRcdHx8IHByb2Nlc3MuZW52LkNvbkVtdVRhc2sgPT09ICd7Y21kOjpDbWRlcn0nIC8vIENvbkVtdSBhbmQgY21kZXJcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNX1BST0dSQU0gPT09ICdUZXJtaW51cy1TdWJsaW1lJ1xuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk1fUFJPR1JBTSA9PT0gJ3ZzY29kZSdcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNID09PSAneHRlcm0tMjU2Y29sb3InXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTSA9PT0gJ2FsYWNyaXR0eSdcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNSU5BTF9FTVVMQVRPUiA9PT0gJ0pldEJyYWlucy1KZWRpVGVybSc7XG59XG4iLCAiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBpc1VuaWNvZGVTdXBwb3J0ZWQgZnJvbSAnaXMtdW5pY29kZS1zdXBwb3J0ZWQnO1xuXG5jb25zdCBtYWluID0ge1xuXHRpbmZvOiBjaGFsay5ibHVlKCdcdTIxMzknKSxcblx0c3VjY2VzczogY2hhbGsuZ3JlZW4oJ1x1MjcxNCcpLFxuXHR3YXJuaW5nOiBjaGFsay55ZWxsb3coJ1x1MjZBMCcpLFxuXHRlcnJvcjogY2hhbGsucmVkKCdcdTI3MTYnKSxcbn07XG5cbmNvbnN0IGZhbGxiYWNrID0ge1xuXHRpbmZvOiBjaGFsay5ibHVlKCdpJyksXG5cdHN1Y2Nlc3M6IGNoYWxrLmdyZWVuKCdcdTIyMUEnKSxcblx0d2FybmluZzogY2hhbGsueWVsbG93KCdcdTIwM0MnKSxcblx0ZXJyb3I6IGNoYWxrLnJlZCgnXHUwMEQ3JyksXG59O1xuXG5jb25zdCBsb2dTeW1ib2xzID0gaXNVbmljb2RlU3VwcG9ydGVkKCkgPyBtYWluIDogZmFsbGJhY2s7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ1N5bWJvbHM7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW5zaVJlZ2V4KHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkge1xuXHRjb25zdCBwYXR0ZXJuID0gW1xuXHQgICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuXHRcdCcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKSdcblx0XS5qb2luKCd8Jyk7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgb25seUZpcnN0ID8gdW5kZWZpbmVkIDogJ2cnKTtcbn1cbiIsICJpbXBvcnQgYW5zaVJlZ2V4IGZyb20gJ2Fuc2ktcmVnZXgnO1xuXG5jb25zdCByZWdleCA9IGFuc2lSZWdleCgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpcEFuc2koc3RyaW5nKSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgXFxgc3RyaW5nXFxgLCBnb3QgXFxgJHt0eXBlb2Ygc3RyaW5nfVxcYGApO1xuXHR9XG5cblx0Ly8gRXZlbiB0aG91Z2ggdGhlIHJlZ2V4IGlzIGdsb2JhbCwgd2UgZG9uJ3QgbmVlZCB0byByZXNldCB0aGUgYC5sYXN0SW5kZXhgXG5cdC8vIGJlY2F1c2UgdW5saWtlIGAuZXhlYygpYCBhbmQgYC50ZXN0KClgLCBgLnJlcGxhY2UoKWAgZG9lcyBpdCBhdXRvbWF0aWNhbGx5XG5cdC8vIGFuZCBkb2luZyBpdCBtYW51YWxseSBoYXMgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LlxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVnZXgsICcnKTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0ludGVyYWN0aXZlKHtzdHJlYW0gPSBwcm9jZXNzLnN0ZG91dH0gPSB7fSkge1xuXHRyZXR1cm4gQm9vbGVhbihcblx0XHRzdHJlYW0gJiYgc3RyZWFtLmlzVFRZICYmXG5cdFx0cHJvY2Vzcy5lbnYuVEVSTSAhPT0gJ2R1bWInICYmXG5cdFx0ISgnQ0knIGluIHByb2Nlc3MuZW52KVxuXHQpO1xufVxuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZSc7XG5pbXBvcnQge0J1ZmZlckxpc3RTdHJlYW19IGZyb20gJ2JsJztcblxuY29uc3QgQVNDSUlfRVRYX0NPREUgPSAweDAzOyAvLyBDdHJsK0MgZW1pdHMgdGhpcyBjb2RlXG5cbmNsYXNzIFN0ZGluRGlzY2FyZGVyIHtcblx0I3JlcXVlc3RzID0gMDtcblx0I211dGVkU3RyZWFtID0gbmV3IEJ1ZmZlckxpc3RTdHJlYW0oKTtcblx0I291ckVtaXQ7XG5cdCNybDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLiNtdXRlZFN0cmVhbS5waXBlKHByb2Nlc3Muc3Rkb3V0KTtcblxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHVuaWNvcm4vbm8tdGhpcy1hc3NpZ25tZW50XG5cdFx0dGhpcy4jb3VyRW1pdCA9IGZ1bmN0aW9uIChldmVudCwgZGF0YSwgLi4uYXJndW1lbnRzXykge1xuXHRcdFx0Y29uc3Qge3N0ZGlufSA9IHByb2Nlc3M7XG5cdFx0XHRpZiAoc2VsZi4jcmVxdWVzdHMgPiAwIHx8IHN0ZGluLmVtaXQgPT09IHNlbGYuI291ckVtaXQpIHtcblx0XHRcdFx0aWYgKGV2ZW50ID09PSAna2V5cHJlc3MnKSB7IC8vIEZpeGVzIHJlYWRsaW5lIGJlaGF2aW9yXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGV2ZW50ID09PSAnZGF0YScgJiYgZGF0YS5pbmNsdWRlcyhBU0NJSV9FVFhfQ09ERSkpIHtcblx0XHRcdFx0XHRwcm9jZXNzLmVtaXQoJ1NJR0lOVCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0UmVmbGVjdC5hcHBseShzZWxmLiNvdXJFbWl0LCB0aGlzLCBbZXZlbnQsIGRhdGEsIC4uLmFyZ3VtZW50c19dKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFJlZmxlY3QuYXBwbHkocHJvY2Vzcy5zdGRpbi5lbWl0LCB0aGlzLCBbZXZlbnQsIGRhdGEsIC4uLmFyZ3VtZW50c19dKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0c3RhcnQoKSB7XG5cdFx0dGhpcy4jcmVxdWVzdHMrKztcblxuXHRcdGlmICh0aGlzLiNyZXF1ZXN0cyA9PT0gMSkge1xuXHRcdFx0dGhpcy5fcmVhbFN0YXJ0KCk7XG5cdFx0fVxuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAodGhpcy4jcmVxdWVzdHMgPD0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdgc3RvcGAgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiBgc3RhcnRgJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jcmVxdWVzdHMtLTtcblxuXHRcdGlmICh0aGlzLiNyZXF1ZXN0cyA9PT0gMCkge1xuXHRcdFx0dGhpcy5fcmVhbFN0b3AoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBUT0RPOiBVc2UgcHJpdmF0ZSBtZXRob2RzIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMTQuXG5cdF9yZWFsU3RhcnQoKSB7XG5cdFx0Ly8gTm8ga25vd24gd2F5IHRvIG1ha2UgaXQgd29yayByZWxpYWJseSBvbiBXaW5kb3dzXG5cdFx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLiNybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRpbnB1dDogcHJvY2Vzcy5zdGRpbixcblx0XHRcdG91dHB1dDogdGhpcy4jbXV0ZWRTdHJlYW0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLiNybC5vbignU0lHSU5UJywgKCkgPT4ge1xuXHRcdFx0aWYgKHByb2Nlc3MubGlzdGVuZXJDb3VudCgnU0lHSU5UJykgPT09IDApIHtcblx0XHRcdFx0cHJvY2Vzcy5lbWl0KCdTSUdJTlQnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuI3JsLmNsb3NlKCk7XG5cdFx0XHRcdHByb2Nlc3Mua2lsbChwcm9jZXNzLnBpZCwgJ1NJR0lOVCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0X3JlYWxTdG9wKCkge1xuXHRcdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy4jcmwuY2xvc2UoKTtcblx0XHR0aGlzLiNybCA9IHVuZGVmaW5lZDtcblx0fVxufVxuXG5jb25zdCBzdGRpbkRpc2NhcmRlciA9IG5ldyBTdGRpbkRpc2NhcmRlcigpO1xuXG5leHBvcnQgZGVmYXVsdCBzdGRpbkRpc2NhcmRlcjtcbiIsICJpbXBvcnQgeyBnZXRJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcnO1xuaW1wb3J0IHsgZmluZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi4vLi4vY29yZS9idWlsZC9maW5kRW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUeXBlc0RpciB9IGZyb20gJy4uLy4uL2NvcmUvYnVpbGQvZ2VuZXJhdGVUeXBlc0Rpcic7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5pbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY29uc3QgcHJlcGFyZSA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICB9LFxuICBdXG4+KGFzeW5jIChyb290LCBmbGFncykgPT4ge1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldEludGVybmFsQ29uZmlnKGNsaUNvbmZpZywgJ2J1aWxkJyk7XG5cbiAgY29uZmlnLmxvZ2dlci5pbmZvKCdHZW5lcmF0aW5nIHR5cGVzLi4uJyk7XG5cbiAgY29uc3QgZW50cnlwb2ludHMgPSBhd2FpdCBmaW5kRW50cnlwb2ludHMoY29uZmlnKTtcbiAgYXdhaXQgZ2VuZXJhdGVUeXBlc0RpcihlbnRyeXBvaW50cywgY29uZmlnKTtcbn0pO1xuIiwgImltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IHB1Ymxpc2ggPSBkZWZpbmVDb21tYW5kKFxuICBhc3luYyAocm9vdDogYW55LCB7IGNvbmZpZzogY29uZmlnRmlsZSB9OiBhbnkpID0+IHtcbiAgICBjb25zb2xhLndhcm4oJ3d4dCBwdWJsaXNoOiBOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfSxcbik7XG4iLCAiaW1wb3J0IHsgQnVpbGRPdXRwdXQsIEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgemlwZGlyIGZyb20gJ3ppcC1kaXInO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGtlYmFiQ2FzZUFscGhhbnVtZXJpYyB9IGZyb20gJy4vdXRpbHMvc3RyaW5ncyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlSnNvbiB9IGZyb20gJy4vdXRpbHMvcGFja2FnZSc7XG5pbXBvcnQgeyBtaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24gfSBmcm9tICcuL3V0aWxzL2Zvcm1hdER1cmF0aW9uJztcbmltcG9ydCB7IHByaW50RmlsZUxpc3QgfSBmcm9tICcuL2xvZy9wcmludEZpbGVMaXN0JztcblxuLyoqXG4gKiBaaXAgdGhlIGV4dGVuc2lvbiBmb3IgZGlzdHJpYnV0aW9uLiBEb2VzIG5vdCBidWlsZCwganVzdCB6aXBzIHRoZSBvdXRwdXQgdGhhdCBzaG91bGQgZXhpc3QgZm9yXG4gKiB0aGUgZ2l2ZW4gY29uZmlnLlxuICpcbiAqIFJldHVybnMgYSBsaXN0IG9mIFpJUCBmaWxlcyB0aGF0IHdlcmUgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHppcEV4dGVuc2lvbihcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgYnVpbGRPdXRwdXQ6IEJ1aWxkT3V0cHV0LFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIGNvbmZpZy5sb2dnZXIuaW5mbygnWmlwcGluZyBleHRlbnNpb24uLi4nKTtcbiAgY29uc3QgemlwRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgcHJvamVjdE5hbWUgPVxuICAgIGNvbmZpZy56aXAubmFtZSA/P1xuICAgIGtlYmFiQ2FzZUFscGhhbnVtZXJpYyhcbiAgICAgIChhd2FpdCBnZXRQYWNrYWdlSnNvbihjb25maWcpKT8ubmFtZSB8fCBkaXJuYW1lKHByb2Nlc3MuY3dkKCkpLFxuICAgICk7XG4gIGNvbnN0IGFwcGx5VGVtcGxhdGUgPSAodGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIHRlbXBsYXRlXG4gICAgICAucmVwbGFjZUFsbCgne3tuYW1lfX0nLCBwcm9qZWN0TmFtZSlcbiAgICAgIC5yZXBsYWNlQWxsKCd7e2Jyb3dzZXJ9fScsIGNvbmZpZy5icm93c2VyKVxuICAgICAgLnJlcGxhY2VBbGwoXG4gICAgICAgICd7e3ZlcnNpb259fScsXG4gICAgICAgIGJ1aWxkT3V0cHV0Lm1hbmlmZXN0LnZlcnNpb25fbmFtZSA/PyBidWlsZE91dHB1dC5tYW5pZmVzdC52ZXJzaW9uLFxuICAgICAgKVxuICAgICAgLnJlcGxhY2VBbGwoJ3t7bWFuaWZlc3RWZXJzaW9ufX0nLCBgbXYke2NvbmZpZy5tYW5pZmVzdFZlcnNpb259YCk7XG5cbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGNvbmZpZy5vdXRCYXNlRGlyKTtcblxuICAvLyBaSVAgb3V0cHV0IGRpcmVjdG9yeVxuXG4gIGNvbnN0IG91dFppcEZpbGVuYW1lID0gYXBwbHlUZW1wbGF0ZShjb25maWcuemlwLmFydGlmYWN0VGVtcGxhdGUpO1xuICBjb25zdCBvdXRaaXBQYXRoID0gcmVzb2x2ZShjb25maWcub3V0QmFzZURpciwgb3V0WmlwRmlsZW5hbWUpO1xuICBhd2FpdCB6aXBkaXIoY29uZmlnLm91dERpciwge1xuICAgIHNhdmVUbzogb3V0WmlwUGF0aCxcbiAgfSk7XG4gIHppcEZpbGVzLnB1c2gob3V0WmlwUGF0aCk7XG5cbiAgLy8gWklQIHNvdXJjZXMgZm9yIEZpcmVmb3hcblxuICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgIGNvbnN0IHNvdXJjZXNaaXBGaWxlbmFtZSA9IGFwcGx5VGVtcGxhdGUoY29uZmlnLnppcC5zb3VyY2VzVGVtcGxhdGUpO1xuICAgIGNvbnN0IHNvdXJjZXNaaXBQYXRoID0gcmVzb2x2ZShjb25maWcub3V0QmFzZURpciwgc291cmNlc1ppcEZpbGVuYW1lKTtcbiAgICBhd2FpdCB6aXBkaXIoY29uZmlnLnppcC5zb3VyY2VzUm9vdCwge1xuICAgICAgc2F2ZVRvOiBzb3VyY2VzWmlwUGF0aCxcbiAgICAgIGZpbHRlcihwYXRoKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKGNvbmZpZy56aXAuc291cmNlc1Jvb3QsIHBhdGgpO1xuICAgICAgICBjb25zdCBtYXRjaGVkUGF0dGVybiA9IGNvbmZpZy56aXAuaWdub3JlZFNvdXJjZXMuZmluZCgocGF0dGVybikgPT5cbiAgICAgICAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBwYXR0ZXJuKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRQYXR0ZXJuID09IG51bGw7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHppcEZpbGVzLnB1c2goc291cmNlc1ppcFBhdGgpO1xuICB9XG5cbiAgY29uZmlnLmxvZ2dlci5zdWNjZXNzKFxuICAgIGBaaXBwZWQgZXh0ZW5zaW9uIGluICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0KX1gLFxuICApO1xuICBhd2FpdCBwcmludEZpbGVMaXN0KGNvbmZpZy5sb2dnZXIubG9nLCBjb25maWcub3V0QmFzZURpciwgemlwRmlsZXMpO1xuXG4gIHJldHVybiB6aXBGaWxlcztcbn1cbiIsICJpbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgYnVpbGRJbnRlcm5hbCB9IGZyb20gJy4uLy4uL2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgZ2V0SW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2dldEludGVybmFsQ29uZmlnJztcbmltcG9ydCB7IHppcEV4dGVuc2lvbiB9IGZyb20gJy4uLy4uL2NvcmUvemlwJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IHppcCA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgICBjb25maWc/OiBzdHJpbmc7XG4gICAgICBicm93c2VyPzogd3h0LlRhcmdldEJyb3dzZXI7XG4gICAgICBtdjM/OiBib29sZWFuO1xuICAgICAgbXYyPzogYm9vbGVhbjtcbiAgICB9LFxuICBdXG4+KGFzeW5jIChyb290LCBmbGFncykgPT4ge1xuICBjb25zdCBtb2RlID0gZmxhZ3MubW9kZSA/PyAncHJvZHVjdGlvbic7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIG1vZGUsXG4gICAgYnJvd3NlcjogZmxhZ3MuYnJvd3NlcixcbiAgICBtYW5pZmVzdFZlcnNpb246IGZsYWdzLm12MyA/IDMgOiBmbGFncy5tdjIgPyAyIDogdW5kZWZpbmVkLFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgfTtcblxuICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRJbnRlcm5hbENvbmZpZyhjbGlDb25maWcsICdidWlsZCcpO1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBidWlsZEludGVybmFsKGNvbmZpZyk7XG4gIGF3YWl0IHppcEV4dGVuc2lvbihjb25maWcsIG91dHB1dCk7XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDhFQUFBQSxTQUFBO0FBQUE7QUFFQSxRQUFNLFVBQVUsQ0FBQyxJQUFJLFNBQVM7QUFDN0IsaUJBQVcsUUFBUSxRQUFRLFFBQVEsSUFBSSxHQUFHO0FBQ3pDLGVBQU8sZUFBZSxJQUFJLE1BQU0sT0FBTyx5QkFBeUIsTUFBTSxJQUFJLENBQUM7QUFBQSxNQUM1RTtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBRWpCLElBQUFBLFFBQU8sUUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDWnpCO0FBQUEsNEVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQU0sVUFBVTtBQUVoQixRQUFNLGtCQUFrQixvQkFBSSxRQUFRO0FBRXBDLFFBQU1DLFdBQVUsQ0FBQyxXQUFXLFVBQVUsQ0FBQyxNQUFNO0FBQzVDLFVBQUksT0FBTyxjQUFjLFlBQVk7QUFDcEMsY0FBTSxJQUFJLFVBQVUscUJBQXFCO0FBQUEsTUFDMUM7QUFFQSxVQUFJO0FBQ0osVUFBSSxZQUFZO0FBQ2hCLFlBQU0sZUFBZSxVQUFVLGVBQWUsVUFBVSxRQUFRO0FBRWhFLFlBQU1BLFdBQVUsWUFBYSxZQUFZO0FBQ3hDLHdCQUFnQixJQUFJQSxVQUFTLEVBQUUsU0FBUztBQUV4QyxZQUFJLGNBQWMsR0FBRztBQUNwQix3QkFBYyxVQUFVLE1BQU0sTUFBTSxVQUFVO0FBQzlDLHNCQUFZO0FBQUEs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LFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFlBQWM7QUFBQSxRQUNiLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLHFCQUF1QjtBQUFBLFFBQ3RCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsV0FBYTtBQUFBLFFBQ1osVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxjQUFnQjtBQUFBLFFBQ2YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsZ0JBQWtCO0FBQUEsUUFDakIsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFlBQWM7QUFBQSxRQUNiLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDUztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLEtBQU87QUFBQSxRQUNOLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxlQUFpQjtBQUFBLFFBQ2hCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGdCQUFrQjtBQUFBLFFBQ2pCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGNBQWdCO0FBQUEsUUFDZixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsYUFBZTtBQUFBLFFBQ2QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxjQUFnQjtBQUFBLFFBQ2YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsYUFBZTtBQUFBLFFBQ2QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxjQUFnQjtBQUFBLFFBQ2YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxXQUFhO0FBQUEsUUFDWixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsYUFBZTtBQUFBLFFBQ2QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxpQkFBbUI7QUFBQSxRQUNsQixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxZQUFjO0FBQUEsUUFDYixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxlQUFpQjtBQUFBLFFBQ2hCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUE7QUFBQTs7O0FDcGxEQTtBQUFBLHNGQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLFdBQVcsT0FBTyxPQUFPLENBQUMsR0FBRyxrQkFBMEI7QUFFN0QsUUFBTSxlQUFlLE9BQU8sS0FBSyxRQUFRO0FBRXpDLFdBQU8sZUFBZSxVQUFVLFVBQVU7QUFBQSxNQUN6QyxNQUFNO0FBQ0wsY0FB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USxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE9BQVEsS0FBTztBQUFBLE1BQ3pELENBQUUsT0FBUSxLQUFPO0FBQUEsTUFBRyxDQUFFLE9BQVEsS0FBTztBQUFBLE1BQUcsQ0FBRSxPQUFRLEtBQU87QUFBQSxNQUN6RCxDQUFFLE9BQVEsS0FBTztBQUFBLE1BQUcsQ0FBRSxPQUFRLEtBQU87QUFBQSxNQUFHLENBQUUsT0FBUSxLQUFPO0FBQUEsTUFDekQsQ0FBRSxPQUFRLEtBQU87QUFBQSxNQUFHLENBQUUsT0FBUSxLQUFPO0FBQUEsTUFBRyxDQUFFLE9BQVEsS0FBTztBQUFBLE1BQ3pELENBQUUsT0FBUyxLQUFRO0FBQUEsTUFBRyxDQUFFLE9BQVMsS0FBUTtBQUFBLE1BQUcsQ0FBRSxPQUFTLEtBQVE7QUFBQSxNQUMvRCxDQUFFLE9BQVMsS0FBUTtBQUFBLE1BQUcsQ0FBRSxPQUFTLEtBQVE7QUFBQSxNQUFHLENBQUUsUUFBUyxNQUFRO0FBQUEsTUFDL0QsQ0FBRSxRQUFTLE1BQVE7QUFBQSxNQUFHLENBQUUsUUFBUyxNQUFRO0FBQUEsTUFB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MkJBQTJCLG1CQUFtQixFQUNyRCxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBZ0JDLE1BQUs7QUFHeEIsSUFDRyxRQUFRLGNBQWMscUNBQXFDLEVBQzNELE9BQU8sdUJBQXVCLDJCQUEyQixFQUN6RCxPQUFPLHFCQUFxQixjQUFjLEVBQzFDLE9BQU8sMkJBQTJCLG1CQUFtQixFQUNyRCxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBZ0IsR0FBRztBQUd0QixJQUNHLFFBQVEsa0JBQWtCLFNBQVMsRUFDbkMsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQWdCLE9BQU87QUFHMUIsSUFBSSxRQUFRLGtCQUFrQixtQkFBbUIsRUFBRSxPQUFnQixPQUFPO0FBRzFFLElBQ0csUUFBUSxvQkFBb0IsMEJBQTBCLEVBQ3RELE9BQU8sNkJBQTZCLGlCQUFpQixFQUNyRCxPQUFPLHlCQUF5Qiw4QkFBOEIsRUFDOUQsT0FBZ0IsSUFBSTtBQUV2QixJQUFJLE1BQU07IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAib25ldGltZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgInByb2Nlc3MiLCAidW5sb2FkIiwgImVtaXQiLCAibG9hZCIsICJwcm9jZXNzUmVhbGx5RXhpdCIsICJwcm9jZXNzRW1pdCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJjbG9uZSIsICJwYXJlbnQiLCAiZGVwdGgiLCAicHJvdG8iLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAid2N3aWR0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJtb2R1bGUiLCAiZXJyIiwgInNlbGYiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiQnVmZmVyIiwgInJlYWxIYXNJbnN0YW5jZSIsICJtb2R1bGUiLCAia2V5cyIsICJzZWxmIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAiQnVmZmVyIiwgInNlbGYiLCAibW9kdWxlIiwgIm9ubGVnYWN5ZmluaXNoIiwgIm9uZmluaXNoIiwgIm9uZW5kIiwgIm9uZXJyb3IiLCAib25jbG9zZSIsICJvbnJlcXVlc3QiLCAibW9kdWxlIiwgInJlc29sdmUiLCAiY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yIiwgIm1vZHVsZSIsICJyZXNvbHZlIiwgInNlbGYiLCAibW9kdWxlIiwgIkVFbGlzdGVuZXJDb3VudCIsICJCdWZmZXIiLCAiZGVidWciLCAic2VsZiIsICJuIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiQnVmZmVyIiwgImNvcHkiLCAibSIsICJtb2R1bGUiLCAiQnVmZmVyTGlzdFN0cmVhbSIsICJwaXBlciIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInZpdGUiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgInBhdGgiLCAibm9kZVBhdGgiLCAicGF0aCIsICJub3JtYWxpemVQYXRoIiwgImlzT2ZmbGluZSIsICJkbnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgImZzIiwgImltcG9ydF9wYXRoIiwgInVuaW1wb3J0IiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgImZzIiwgInBhdGhzIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJwYXRoIiwgImZzIiwgInBhdGgiLCAiZW52IiwgImdsb2JhbCIsICJpbXBvcnRfcGljb2NvbG9ycyIsICJ2aXRlIiwgIm5vcm1hbGl6ZVBhdGgiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJ2aXRlIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJmcyIsICJwYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiZnMiLCAiZ2xvYiIsICJmcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X2xpbmtlZG9tIiwgImltcG9ydF91bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAicGF0aCIsICJub3JtYWxpemVQYXRoIiwgInVuaW1wb3J0IiwgImZzIiwgImNyZWF0ZUpJVEkiLCAidHJhbnNmb3JtIiwgImltcG9ydF9mYXN0X2dsb2IiLCAiZ2xvYiIsICJwYXRoIiwgImZzIiwgIkpTT041IiwgImltcG9ydF91bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiZnMiLCAidW5pbXBvcnQiLCAibm9ybWFsaXplUGF0aCIsICJwYXRoIiwgImdsb2JhbCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiZnMiLCAiZnMiLCAidmVyc2lvbiIsICJvcHRpb25zIiwgImltcG9ydF9waWNvY29sb3JzIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgInBhdGgiLCAiZnMiLCAicGMiLCAicGMiLCAiZnMiLCAidml0ZSIsICJwYXRoIiwgImJ1aWxkIiwgImNyZWF0ZVNlcnZlciIsICJwYXRoIiwgInBjIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9waWNvY29sb3JzIiwgImltcG9ydF9jb25zb2xhIiwgInBjIiwgImJ1aWxkIiwgImNyZWF0ZVNlcnZlciIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInByb2Nlc3MiLCAib3MiLCAidmVyc2lvbiIsICJ0dHkiLCAic3R5bGVzIiwgImNoYWxrIiwgInN0eWxlcyIsICJzZWxmIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAiaW1wb3J0X25vZGVfcHJvY2VzcyIsICJvbmV0aW1lIiwgInNpZ25hbEV4aXQiLCAicHJvY2VzcyIsICJwcm9jZXNzIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAicHJvY2VzcyIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInByb2Nlc3MiLCAic2VsZiIsICJyZWFkbGluZSIsICJpbXBvcnRfY2xpX3NwaW5uZXJzIiwgInByb2Nlc3MiLCAiY2xpU3Bpbm5lcnMiLCAid2N3aWR0aCIsICJpbXBvcnRfY29uc29sYSIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfcGljb2NvbG9ycyIsICJwcm9tcHRzIiwgInBhdGgiLCAicGMiLCAiZnMiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X21pbmltYXRjaCIsICJmcyIsICJ6aXBkaXIiLCAicGF0aCIsICJjYWMiLCAiYnVpbGQiXQp9Cg==
|
|
8857
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbWljLWZuQDIuMS4wL25vZGVfbW9kdWxlcy9taW1pYy1mbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vb25ldGltZUA1LjEuMi9ub2RlX21vZHVsZXMvb25ldGltZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2lnbmFsLWV4aXRAMy4wLjcvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L3NpZ25hbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NpZ25hbC1leGl0QDMuMC43L25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvc3Bpbm5lcnMuanNvbiIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nsb25lQDEuMC40L25vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGVmYXVsdHNAMS4wLjQvbm9kZV9tb2R1bGVzL2RlZmF1bHRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS93Y3dpZHRoQDEuMC4xL25vZGVfbW9kdWxlcy93Y3dpZHRoL2NvbWJpbmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vd2N3aWR0aEAxLjAuMS9ub2RlX21vZHVsZXMvd2N3aWR0aC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW5oZXJpdHNAMi4wLjQvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2luaGVyaXRzQDIuMC40L25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdXRpbC1kZXByZWNhdGVAMS4wLjIvbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NhZmUtYnVmZmVyQDUuMS4yL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nX2RlY29kZXJAMS4xLjEvbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JsQDUuMS4wL25vZGVfbW9kdWxlcy9ibC9CdWZmZXJMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9ibEA1LjEuMC9ub2RlX21vZHVsZXMvYmwvYmwuanMiLCAiLi4vc3JjL2NsaS9pbmRleC50cyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2Rldkh0bWxQcmVyZW5kZXIudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2RldlNlcnZlckdsb2JhbHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvbmV0d29yay50cyIsICIuLi9zcmMvY29yZS91dGlscy9wcm9taXNlcy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZG93bmxvYWQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL211bHRpcGFnZU1vdmUudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3VuaW1wb3J0LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2F1dG8taW1wb3J0cy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdmlydHVhbEVudHJ5cG9pbnQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3RzY29uZmlnUGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9jc3NFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9jcmVhdGVGc0NhY2hlLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dsb2JhbHMudHMiLCAiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2FycmF5cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9kZXRlY3REZXZDaGFuZ2VzLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2J1aWxkRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcmVtb3ZlRW1wdHlEaXJzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3B1YmxpYy50cyIsICIuLi9zcmMvY29yZS9idWlsZC9maW5kRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvaW1wb3J0VHNGaWxlLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3N0cmluZ3MudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQvZ2VuZXJhdGVUeXBlc0Rpci50cyIsICIuLi9zcmMvY29yZS91dGlscy9tYW5pZmVzdC50cyIsICIuLi9zcmMvY29yZS91dGlscy9Db250ZW50U2VjdXJpdHlQb2xpY3kudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvY29udGVudC1zY3JpcHRzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3BhY2thZ2UudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ3JvdXBFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9mb3JtYXREdXJhdGlvbi50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRCdWlsZFN1bW1hcnkudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50RmlsZUxpc3QudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50VGFibGUudHMiLCAiLi4vc3JjL2NvcmUvc2VydmVyLnRzIiwgIi4uL3NyYy9jb3JlL3J1bm5lcnMvY3JlYXRlV2ViRXh0UnVubmVyLnRzIiwgIi4uL3NyYy9jbGkvdXRpbHMvZGVmaW5lQ29tbWFuZC50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRIZWFkZXIudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9idWlsZC50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2Rldi50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2luaXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL29yYUA2LjMuMS9ub2RlX21vZHVsZXMvb3JhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFsa0A1LjIuMC9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhbGtANS4yLjAvbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS92ZW5kb3Ivc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWxrQDUuMi4wL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdXRpbGl0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFsa0A1LjIuMC9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jbGktY3Vyc29yQDQuMC4wL25vZGVfbW9kdWxlcy9jbGktY3Vyc29yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZXN0b3JlLWN1cnNvckA0LjAuMC9ub2RlX21vZHVsZXMvcmVzdG9yZS1jdXJzb3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzLXVuaWNvZGUtc3VwcG9ydGVkQDEuMy4wL25vZGVfbW9kdWxlcy9pcy11bmljb2RlLXN1cHBvcnRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9nLXN5bWJvbHNANS4xLjAvbm9kZV9tb2R1bGVzL2xvZy1zeW1ib2xzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9hbnNpLXJlZ2V4QDYuMC4xL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpcC1hbnNpQDcuMS4wL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pcy1pbnRlcmFjdGl2ZUAyLjAuMC9ub2RlX21vZHVsZXMvaXMtaW50ZXJhY3RpdmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0ZGluLWRpc2NhcmRlckAwLjEuMC9ub2RlX21vZHVsZXMvc3RkaW4tZGlzY2FyZGVyL2luZGV4LmpzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvcHJlcGFyZS50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL3B1Ymxpc2gudHMiLCAiLi4vc3JjL2NvcmUvemlwLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvemlwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1pbWljRm4gPSAodG8sIGZyb20pID0+IHtcblx0Zm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhmcm9tKSkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0bywgcHJvcCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmcm9tLCBwcm9wKSk7XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1pbWljRm47XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IG1pbWljRm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgbWltaWNGbiA9IHJlcXVpcmUoJ21pbWljLWZuJyk7XG5cbmNvbnN0IGNhbGxlZEZ1bmN0aW9ucyA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IG9uZXRpbWUgPSAoZnVuY3Rpb25fLCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKHR5cGVvZiBmdW5jdGlvbl8gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWU7XG5cdGxldCBjYWxsQ291bnQgPSAwO1xuXHRjb25zdCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbl8uZGlzcGxheU5hbWUgfHwgZnVuY3Rpb25fLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcblxuXHRjb25zdCBvbmV0aW1lID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsICsrY2FsbENvdW50KTtcblxuXHRcdGlmIChjYWxsQ291bnQgPT09IDEpIHtcblx0XHRcdHJldHVyblZhbHVlID0gZnVuY3Rpb25fLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdFx0ZnVuY3Rpb25fID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMudGhyb3cgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gXFxgJHtmdW5jdGlvbk5hbWV9XFxgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlYCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHR9O1xuXG5cdG1pbWljRm4ob25ldGltZSwgZnVuY3Rpb25fKTtcblx0Y2FsbGVkRnVuY3Rpb25zLnNldChvbmV0aW1lLCBjYWxsQ291bnQpO1xuXG5cdHJldHVybiBvbmV0aW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbmV0aW1lO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBvbmV0aW1lO1xuXG5tb2R1bGUuZXhwb3J0cy5jYWxsQ291bnQgPSBmdW5jdGlvbl8gPT4ge1xuXHRpZiAoIWNhbGxlZEZ1bmN0aW9ucy5oYXMoZnVuY3Rpb25fKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgVGhlIGdpdmVuIGZ1bmN0aW9uIFxcYCR7ZnVuY3Rpb25fLm5hbWV9XFxgIGlzIG5vdCB3cmFwcGVkIGJ5IHRoZSBcXGBvbmV0aW1lXFxgIHBhY2thZ2VgKTtcblx0fVxuXG5cdHJldHVybiBjYWxsZWRGdW5jdGlvbnMuZ2V0KGZ1bmN0aW9uXyk7XG59O1xuIiwgIi8vIFRoaXMgaXMgbm90IHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHNpZ25hbHMuXG4vL1xuLy8gSXQgSVMsIGhvd2V2ZXIsIHRoZSBzZXQgb2YgYWxsIHNpZ25hbHMgdGhhdCB0cmlnZ2VyXG4vLyBhbiBleGl0IG9uIGVpdGhlciBMaW51eCBvciBCU0Qgc3lzdGVtcy4gIExpbnV4IGlzIGFcbi8vIHN1cGVyc2V0IG9mIHRoZSBzaWduYWwgbmFtZXMgc3VwcG9ydGVkIG9uIEJTRCwgYW5kXG4vLyB0aGUgdW5rbm93biBzaWduYWxzIGp1c3QgZmFpbCB0byByZWdpc3Rlciwgc28gd2UgY2FuXG4vLyBjYXRjaCB0aGF0IGVhc2lseSBlbm91Z2guXG4vL1xuLy8gRG9uJ3QgYm90aGVyIHdpdGggU0lHS0lMTC4gIEl0J3MgdW5jYXRjaGFibGUsIHdoaWNoXG4vLyBtZWFucyB0aGF0IHdlIGNhbid0IGZpcmUgYW55IGNhbGxiYWNrcyBhbnl3YXkuXG4vL1xuLy8gSWYgYSB1c2VyIGRvZXMgaGFwcGVuIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBvbiBhIG5vbi1cbi8vIGZhdGFsIHNpZ25hbCBsaWtlIFNJR1dJTkNIIG9yIHNvbWV0aGluZywgYW5kIHRoZW5cbi8vIGV4aXQsIGl0J2xsIGVuZCB1cCBmaXJpbmcgYHByb2Nlc3MuZW1pdCgnZXhpdCcpYCwgc29cbi8vIHRoZSBoYW5kbGVyIHdpbGwgYmUgZmlyZWQgYW55d2F5LlxuLy9cbi8vIFNJR0JVUywgU0lHRlBFLCBTSUdTRUdWIGFuZCBTSUdJTEwsIHdoZW4gbm90IHJhaXNlZFxuLy8gYXJ0aWZpY2lhbGx5LCBpbmhlcmVudGx5IGxlYXZlIHRoZSBwcm9jZXNzIGluIGFcbi8vIHN0YXRlIGZyb20gd2hpY2ggaXQgaXMgbm90IHNhZmUgdG8gdHJ5IGFuZCBlbnRlciBKU1xuLy8gbGlzdGVuZXJzLlxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdTSUdBQlJUJyxcbiAgJ1NJR0FMUk0nLFxuICAnU0lHSFVQJyxcbiAgJ1NJR0lOVCcsXG4gICdTSUdURVJNJ1xuXVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdWVEFMUk0nLFxuICAgICdTSUdYQ1BVJyxcbiAgICAnU0lHWEZTWicsXG4gICAgJ1NJR1VTUjInLFxuICAgICdTSUdUUkFQJyxcbiAgICAnU0lHU1lTJyxcbiAgICAnU0lHUVVJVCcsXG4gICAgJ1NJR0lPVCdcbiAgICAvLyBzaG91bGQgZGV0ZWN0IHByb2ZpbGVyIGFuZCBlbmFibGUvZGlzYWJsZSBhY2NvcmRpbmdseS5cbiAgICAvLyBzZWUgIzIxXG4gICAgLy8gJ1NJR1BST0YnXG4gIClcbn1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHSU8nLFxuICAgICdTSUdQT0xMJyxcbiAgICAnU0lHUFdSJyxcbiAgICAnU0lHU1RLRkxUJyxcbiAgICAnU0lHVU5VU0VEJ1xuICApXG59XG4iLCAiLy8gTm90ZTogc2luY2UgbnljIHVzZXMgdGhpcyBtb2R1bGUgdG8gb3V0cHV0IGNvdmVyYWdlLCBhbnkgbGluZXNcbi8vIHRoYXQgYXJlIGluIHRoZSBkaXJlY3Qgc3luYyBmbG93IG9mIG55YydzIG91dHB1dENvdmVyYWdlIGFyZVxuLy8gaWdub3JlZCwgc2luY2Ugd2UgY2FuIG5ldmVyIGdldCBjb3ZlcmFnZSBmb3IgdGhlbS5cbi8vIGdyYWIgYSByZWZlcmVuY2UgdG8gbm9kZSdzIHJlYWwgcHJvY2VzcyBvYmplY3QgcmlnaHQgYXdheVxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2Vzc1xuXG5jb25zdCBwcm9jZXNzT2sgPSBmdW5jdGlvbiAocHJvY2Vzcykge1xuICByZXR1cm4gcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MuZW1pdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnJlYWxseUV4aXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5saXN0ZW5lcnMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5raWxsID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucGlkID09PSAnbnVtYmVyJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLm9uID09PSAnZnVuY3Rpb24nXG59XG5cbi8vIHNvbWUga2luZCBvZiBub24tbm9kZSBlbnZpcm9ubWVudCwganVzdCBuby1vcFxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoIXByb2Nlc3NPayhwcm9jZXNzKSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgfVxufSBlbHNlIHtcbiAgdmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG4gIHZhciBzaWduYWxzID0gcmVxdWlyZSgnLi9zaWduYWxzLmpzJylcbiAgdmFyIGlzV2luID0gL153aW4vaS50ZXN0KHByb2Nlc3MucGxhdGZvcm0pXG5cbiAgdmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgRUUgIT09ICdmdW5jdGlvbicpIHtcbiAgICBFRSA9IEVFLkV2ZW50RW1pdHRlclxuICB9XG5cbiAgdmFyIGVtaXR0ZXJcbiAgaWYgKHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX18pIHtcbiAgICBlbWl0dGVyID0gcHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfX1xuICB9IGVsc2Uge1xuICAgIGVtaXR0ZXIgPSBwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fID0gbmV3IEVFKClcbiAgICBlbWl0dGVyLmNvdW50ID0gMFxuICAgIGVtaXR0ZXIuZW1pdHRlZCA9IHt9XG4gIH1cblxuICAvLyBCZWNhdXNlIHRoaXMgZW1pdHRlciBpcyBhIGdsb2JhbCwgd2UgaGF2ZSB0byBjaGVjayB0byBzZWUgaWYgYVxuICAvLyBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgbGlicmFyeSBmYWlsZWQgdG8gZW5hYmxlIGluZmluaXRlIGxpc3RlbmVycy5cbiAgLy8gSSBrbm93IHdoYXQgeW91J3JlIGFib3V0IHRvIHNheS4gIEJ1dCBsaXRlcmFsbHkgZXZlcnl0aGluZyBhYm91dFxuICAvLyBzaWduYWwtZXhpdCBpcyBhIGNvbXByb21pc2Ugd2l0aCBldmlsLiAgR2V0IHVzZWQgdG8gaXQuXG4gIGlmICghZW1pdHRlci5pbmZpbml0ZSkge1xuICAgIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKEluZmluaXR5KVxuICAgIGVtaXR0ZXIuaW5maW5pdGUgPSB0cnVlXG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjYiwgb3B0cykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9XG4gICAgfVxuICAgIGFzc2VydC5lcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICdhIGNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQgZm9yIGV4aXQgaGFuZGxlcicpXG5cbiAgICBpZiAobG9hZGVkID09PSBmYWxzZSkge1xuICAgICAgbG9hZCgpXG4gICAgfVxuXG4gICAgdmFyIGV2ID0gJ2V4aXQnXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5hbHdheXNMYXN0KSB7XG4gICAgICBldiA9ICdhZnRlcmV4aXQnXG4gICAgfVxuXG4gICAgdmFyIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoZXYsIGNiKVxuICAgICAgaWYgKGVtaXR0ZXIubGlzdGVuZXJzKCdleGl0JykubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgZW1pdHRlci5saXN0ZW5lcnMoJ2FmdGVyZXhpdCcpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1bmxvYWQoKVxuICAgICAgfVxuICAgIH1cbiAgICBlbWl0dGVyLm9uKGV2LCBjYilcblxuICAgIHJldHVybiByZW1vdmVcbiAgfVxuXG4gIHZhciB1bmxvYWQgPSBmdW5jdGlvbiB1bmxvYWQgKCkge1xuICAgIGlmICghbG9hZGVkIHx8ICFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbG9hZGVkID0gZmFsc2VcblxuICAgIHNpZ25hbHMuZm9yRWFjaChmdW5jdGlvbiAoc2lnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKHNpZywgc2lnTGlzdGVuZXJzW3NpZ10pXG4gICAgICB9IGNhdGNoIChlcikge31cbiAgICB9KVxuICAgIHByb2Nlc3MuZW1pdCA9IG9yaWdpbmFsUHJvY2Vzc0VtaXRcbiAgICBwcm9jZXNzLnJlYWxseUV4aXQgPSBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0XG4gICAgZW1pdHRlci5jb3VudCAtPSAxXG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMudW5sb2FkID0gdW5sb2FkXG5cbiAgdmFyIGVtaXQgPSBmdW5jdGlvbiBlbWl0IChldmVudCwgY29kZSwgc2lnbmFsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVtaXR0ZXIuZW1pdHRlZFtldmVudF0pIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0dGVyLmVtaXR0ZWRbZXZlbnRdID0gdHJ1ZVxuICAgIGVtaXR0ZXIuZW1pdChldmVudCwgY29kZSwgc2lnbmFsKVxuICB9XG5cbiAgLy8geyA8c2lnbmFsPjogPGxpc3RlbmVyIGZuPiwgLi4uIH1cbiAgdmFyIHNpZ0xpc3RlbmVycyA9IHt9XG4gIHNpZ25hbHMuZm9yRWFjaChmdW5jdGlvbiAoc2lnKSB7XG4gICAgc2lnTGlzdGVuZXJzW3NpZ10gPSBmdW5jdGlvbiBsaXN0ZW5lciAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvdGhlciBsaXN0ZW5lcnMsIGFuIGV4aXQgaXMgY29taW5nIVxuICAgICAgLy8gU2ltcGxlc3Qgd2F5OiByZW1vdmUgdXMgYW5kIHRoZW4gcmUtc2VuZCB0aGUgc2lnbmFsLlxuICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgd2lsbCBraWxsIHRoZSBwcm9jZXNzLCBzbyB3ZSBjYW5cbiAgICAgIC8vIHNhZmVseSBlbWl0IG5vdy5cbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBwcm9jZXNzLmxpc3RlbmVycyhzaWcpXG4gICAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gZW1pdHRlci5jb3VudCkge1xuICAgICAgICB1bmxvYWQoKVxuICAgICAgICBlbWl0KCdleGl0JywgbnVsbCwgc2lnKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBlbWl0KCdhZnRlcmV4aXQnLCBudWxsLCBzaWcpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChpc1dpbiAmJiBzaWcgPT09ICdTSUdIVVAnKSB7XG4gICAgICAgICAgLy8gXCJTSUdIVVBcIiB0aHJvd3MgYW4gYEVOT1NZU2AgZXJyb3Igb24gV2luZG93cyxcbiAgICAgICAgICAvLyBzbyB1c2UgYSBzdXBwb3J0ZWQgc2lnbmFsIGluc3RlYWRcbiAgICAgICAgICBzaWcgPSAnU0lHSU5UJ1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHByb2Nlc3Mua2lsbChwcm9jZXNzLnBpZCwgc2lnKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBtb2R1bGUuZXhwb3J0cy5zaWduYWxzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzaWduYWxzXG4gIH1cblxuICB2YXIgbG9hZGVkID0gZmFsc2VcblxuICB2YXIgbG9hZCA9IGZ1bmN0aW9uIGxvYWQgKCkge1xuICAgIGlmIChsb2FkZWQgfHwgIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsb2FkZWQgPSB0cnVlXG5cbiAgICAvLyBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygb25TaWduYWxFeGl0J3MgdGhhdCBhcmUgaW4gcGxheS5cbiAgICAvLyBJdCdzIGltcG9ydGFudCBzbyB0aGF0IHdlIGNhbiBjb3VudCB0aGUgY29ycmVjdCBudW1iZXIgb2ZcbiAgICAvLyBsaXN0ZW5lcnMgb24gc2lnbmFscywgYW5kIGRvbid0IHdhaXQgZm9yIHRoZSBvdGhlciBvbmUgdG9cbiAgICAvLyBoYW5kbGUgaXQgaW5zdGVhZCBvZiB1cy5cbiAgICBlbWl0dGVyLmNvdW50ICs9IDFcblxuICAgIHNpZ25hbHMgPSBzaWduYWxzLmZpbHRlcihmdW5jdGlvbiAoc2lnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm9jZXNzLm9uKHNpZywgc2lnTGlzdGVuZXJzW3NpZ10pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcHJvY2Vzcy5lbWl0ID0gcHJvY2Vzc0VtaXRcbiAgICBwcm9jZXNzLnJlYWxseUV4aXQgPSBwcm9jZXNzUmVhbGx5RXhpdFxuICB9XG4gIG1vZHVsZS5leHBvcnRzLmxvYWQgPSBsb2FkXG5cbiAgdmFyIG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXQgPSBwcm9jZXNzLnJlYWxseUV4aXRcbiAgdmFyIHByb2Nlc3NSZWFsbHlFeGl0ID0gZnVuY3Rpb24gcHJvY2Vzc1JlYWxseUV4aXQgKGNvZGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gY29kZSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyAwXG4gICAgZW1pdCgnZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBlbWl0KCdhZnRlcmV4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdC5jYWxsKHByb2Nlc3MsIHByb2Nlc3MuZXhpdENvZGUpXG4gIH1cblxuICB2YXIgb3JpZ2luYWxQcm9jZXNzRW1pdCA9IHByb2Nlc3MuZW1pdFxuICB2YXIgcHJvY2Vzc0VtaXQgPSBmdW5jdGlvbiBwcm9jZXNzRW1pdCAoZXYsIGFyZykge1xuICAgIGlmIChldiA9PT0gJ2V4aXQnICYmIHByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoYXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IGFyZ1xuICAgICAgfVxuICAgICAgdmFyIHJldCA9IG9yaWdpbmFsUHJvY2Vzc0VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGVtaXQoJ2V4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGVtaXQoJ2FmdGVyZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIHJldFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxQcm9jZXNzRW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG59XG4iLCAie1xuXHRcImRvdHNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgzOVwiLFxuXHRcdFx0XCJcdTI4MzhcIixcblx0XHRcdFwiXHUyODNDXCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODI3XCIsXG5cdFx0XHRcIlx1MjgwN1wiLFxuXHRcdFx0XCJcdTI4MEZcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjhGRVwiLFxuXHRcdFx0XCJcdTI4RkRcIixcblx0XHRcdFwiXHUyOEZCXCIsXG5cdFx0XHRcIlx1MjhCRlwiLFxuXHRcdFx0XCJcdTI4N0ZcIixcblx0XHRcdFwiXHUyOERGXCIsXG5cdFx0XHRcIlx1MjhFRlwiLFxuXHRcdFx0XCJcdTI4RjdcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzM1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODFBXCIsXG5cdFx0XHRcIlx1MjgxRVwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODMzXCIsXG5cdFx0XHRcIlx1MjgxM1wiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM0XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgwNlwiLFxuXHRcdFx0XCJcdTI4MDdcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MzhcIixcblx0XHRcdFwiXHUyODMwXCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MzBcIixcblx0XHRcdFwiXHUyODM4XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODA3XCIsXG5cdFx0XHRcIlx1MjgwNlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM1XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEzXCIsXG5cdFx0XHRcIlx1MjgwQlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM2XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODFBXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODMyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDFcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzN1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwOFwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxM1wiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MjRcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MjRcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODEzXCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODA4XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czhcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODFBXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDhcIixcblx0XHRcdFwiXHUyODA4XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4QjlcIixcblx0XHRcdFwiXHUyOEJBXCIsXG5cdFx0XHRcIlx1MjhCQ1wiLFxuXHRcdFx0XCJcdTI4RjhcIixcblx0XHRcdFwiXHUyOEM3XCIsXG5cdFx0XHRcIlx1Mjg2N1wiLFxuXHRcdFx0XCJcdTI4NTdcIixcblx0XHRcdFwiXHUyODRGXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czEwXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODg0XCIsXG5cdFx0XHRcIlx1Mjg4MlwiLFxuXHRcdFx0XCJcdTI4ODFcIixcblx0XHRcdFwiXHUyODQxXCIsXG5cdFx0XHRcIlx1Mjg0OFwiLFxuXHRcdFx0XCJcdTI4NTBcIixcblx0XHRcdFwiXHUyODYwXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czExXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1Mjg0MFwiLFxuXHRcdFx0XCJcdTI4ODBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MDhcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4ODBcdTI4MDBcIixcblx0XHRcdFwiXHUyODQwXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwNFx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4ODJcdTI4MDBcIixcblx0XHRcdFwiXHUyODQyXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwNVx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4ODNcdTI4MDBcIixcblx0XHRcdFwiXHUyODQzXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MDBcIixcblx0XHRcdFwiXHUyODRCXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MDFcIixcblx0XHRcdFwiXHUyODRCXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwOFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDhcdTI4NTlcIixcblx0XHRcdFwiXHUyODg4XHUyODI5XCIsXG5cdFx0XHRcIlx1Mjg0MFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDRcdTI4NTlcIixcblx0XHRcdFwiXHUyODgyXHUyODI5XCIsXG5cdFx0XHRcIlx1Mjg0Mlx1Mjg5OFwiLFxuXHRcdFx0XCJcdTI4MDVcdTI4NThcIixcblx0XHRcdFwiXHUyODgzXHUyODI4XCIsXG5cdFx0XHRcIlx1Mjg0M1x1Mjg5MFwiLFxuXHRcdFx0XCJcdTI4MERcdTI4NTBcIixcblx0XHRcdFwiXHUyODhCXHUyODIwXCIsXG5cdFx0XHRcIlx1Mjg0Qlx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4MERcdTI4NDFcIixcblx0XHRcdFwiXHUyODhCXHUyODAxXCIsXG5cdFx0XHRcIlx1Mjg0Qlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MERcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwQlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgyOVwiLFxuXHRcdFx0XCJcdTI4MDhcdTI4OTlcIixcblx0XHRcdFwiXHUyODA4XHUyODU5XCIsXG5cdFx0XHRcIlx1MjgwOFx1MjgyOVwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4OTlcIixcblx0XHRcdFwiXHUyODAwXHUyODU5XCIsXG5cdFx0XHRcIlx1MjgwMFx1MjgyOVwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4OThcIixcblx0XHRcdFwiXHUyODAwXHUyODU4XCIsXG5cdFx0XHRcIlx1MjgwMFx1MjgyOFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4OTBcIixcblx0XHRcdFwiXHUyODAwXHUyODUwXCIsXG5cdFx0XHRcIlx1MjgwMFx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4ODBcIixcblx0XHRcdFwiXHUyODAwXHUyODQwXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czEzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOEZDXCIsXG5cdFx0XHRcIlx1MjhGOVwiLFxuXHRcdFx0XCJcdTI4QkJcIixcblx0XHRcdFwiXHUyODNGXCIsXG5cdFx0XHRcIlx1Mjg1RlwiLFxuXHRcdFx0XCJcdTI4Q0ZcIixcblx0XHRcdFwiXHUyOEU3XCIsXG5cdFx0XHRcIlx1MjhGNlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM4Qml0XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAwXCIsXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODAzXCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDVcIixcblx0XHRcdFwiXHUyODA2XCIsXG5cdFx0XHRcIlx1MjgwN1wiLFxuXHRcdFx0XCJcdTI4NDBcIixcblx0XHRcdFwiXHUyODQxXCIsXG5cdFx0XHRcIlx1Mjg0MlwiLFxuXHRcdFx0XCJcdTI4NDNcIixcblx0XHRcdFwiXHUyODQ0XCIsXG5cdFx0XHRcIlx1Mjg0NVwiLFxuXHRcdFx0XCJcdTI4NDZcIixcblx0XHRcdFwiXHUyODQ3XCIsXG5cdFx0XHRcIlx1MjgwOFwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBBXCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MENcIixcblx0XHRcdFwiXHUyODBEXCIsXG5cdFx0XHRcIlx1MjgwRVwiLFxuXHRcdFx0XCJcdTI4MEZcIixcblx0XHRcdFwiXHUyODQ4XCIsXG5cdFx0XHRcIlx1Mjg0OVwiLFxuXHRcdFx0XCJcdTI4NEFcIixcblx0XHRcdFwiXHUyODRCXCIsXG5cdFx0XHRcIlx1Mjg0Q1wiLFxuXHRcdFx0XCJcdTI4NERcIixcblx0XHRcdFwiXHUyODRFXCIsXG5cdFx0XHRcIlx1Mjg0RlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODExXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODE0XCIsXG5cdFx0XHRcIlx1MjgxNVwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODE3XCIsXG5cdFx0XHRcIlx1Mjg1MFwiLFxuXHRcdFx0XCJcdTI4NTFcIixcblx0XHRcdFwiXHUyODUyXCIsXG5cdFx0XHRcIlx1Mjg1M1wiLFxuXHRcdFx0XCJcdTI4NTRcIixcblx0XHRcdFwiXHUyODU1XCIsXG5cdFx0XHRcIlx1Mjg1NlwiLFxuXHRcdFx0XCJcdTI4NTdcIixcblx0XHRcdFwiXHUyODE4XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODFCXCIsXG5cdFx0XHRcIlx1MjgxQ1wiLFxuXHRcdFx0XCJcdTI4MURcIixcblx0XHRcdFwiXHUyODFFXCIsXG5cdFx0XHRcIlx1MjgxRlwiLFxuXHRcdFx0XCJcdTI4NThcIixcblx0XHRcdFwiXHUyODU5XCIsXG5cdFx0XHRcIlx1Mjg1QVwiLFxuXHRcdFx0XCJcdTI4NUJcIixcblx0XHRcdFwiXHUyODVDXCIsXG5cdFx0XHRcIlx1Mjg1RFwiLFxuXHRcdFx0XCJcdTI4NUVcIixcblx0XHRcdFwiXHUyODVGXCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MjFcIixcblx0XHRcdFwiXHUyODIyXCIsXG5cdFx0XHRcIlx1MjgyM1wiLFxuXHRcdFx0XCJcdTI4MjRcIixcblx0XHRcdFwiXHUyODI1XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MjdcIixcblx0XHRcdFwiXHUyODYwXCIsXG5cdFx0XHRcIlx1Mjg2MVwiLFxuXHRcdFx0XCJcdTI4NjJcIixcblx0XHRcdFwiXHUyODYzXCIsXG5cdFx0XHRcIlx1Mjg2NFwiLFxuXHRcdFx0XCJcdTI4NjVcIixcblx0XHRcdFwiXHUyODY2XCIsXG5cdFx0XHRcIlx1Mjg2N1wiLFxuXHRcdFx0XCJcdTI4MjhcIixcblx0XHRcdFwiXHUyODI5XCIsXG5cdFx0XHRcIlx1MjgyQVwiLFxuXHRcdFx0XCJcdTI4MkJcIixcblx0XHRcdFwiXHUyODJDXCIsXG5cdFx0XHRcIlx1MjgyRFwiLFxuXHRcdFx0XCJcdTI4MkVcIixcblx0XHRcdFwiXHUyODJGXCIsXG5cdFx0XHRcIlx1Mjg2OFwiLFxuXHRcdFx0XCJcdTI4NjlcIixcblx0XHRcdFwiXHUyODZBXCIsXG5cdFx0XHRcIlx1Mjg2QlwiLFxuXHRcdFx0XCJcdTI4NkNcIixcblx0XHRcdFwiXHUyODZEXCIsXG5cdFx0XHRcIlx1Mjg2RVwiLFxuXHRcdFx0XCJcdTI4NkZcIixcblx0XHRcdFwiXHUyODMwXCIsXG5cdFx0XHRcIlx1MjgzMVwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODMzXCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MzVcIixcblx0XHRcdFwiXHUyODM2XCIsXG5cdFx0XHRcIlx1MjgzN1wiLFxuXHRcdFx0XCJcdTI4NzBcIixcblx0XHRcdFwiXHUyODcxXCIsXG5cdFx0XHRcIlx1Mjg3MlwiLFxuXHRcdFx0XCJcdTI4NzNcIixcblx0XHRcdFwiXHUyODc0XCIsXG5cdFx0XHRcIlx1Mjg3NVwiLFxuXHRcdFx0XCJcdTI4NzZcIixcblx0XHRcdFwiXHUyODc3XCIsXG5cdFx0XHRcIlx1MjgzOFwiLFxuXHRcdFx0XCJcdTI4MzlcIixcblx0XHRcdFwiXHUyODNBXCIsXG5cdFx0XHRcIlx1MjgzQlwiLFxuXHRcdFx0XCJcdTI4M0NcIixcblx0XHRcdFwiXHUyODNEXCIsXG5cdFx0XHRcIlx1MjgzRVwiLFxuXHRcdFx0XCJcdTI4M0ZcIixcblx0XHRcdFwiXHUyODc4XCIsXG5cdFx0XHRcIlx1Mjg3OVwiLFxuXHRcdFx0XCJcdTI4N0FcIixcblx0XHRcdFwiXHUyODdCXCIsXG5cdFx0XHRcIlx1Mjg3Q1wiLFxuXHRcdFx0XCJcdTI4N0RcIixcblx0XHRcdFwiXHUyODdFXCIsXG5cdFx0XHRcIlx1Mjg3RlwiLFxuXHRcdFx0XCJcdTI4ODBcIixcblx0XHRcdFwiXHUyODgxXCIsXG5cdFx0XHRcIlx1Mjg4MlwiLFxuXHRcdFx0XCJcdTI4ODNcIixcblx0XHRcdFwiXHUyODg0XCIsXG5cdFx0XHRcIlx1Mjg4NVwiLFxuXHRcdFx0XCJcdTI4ODZcIixcblx0XHRcdFwiXHUyODg3XCIsXG5cdFx0XHRcIlx1MjhDMFwiLFxuXHRcdFx0XCJcdTI4QzFcIixcblx0XHRcdFwiXHUyOEMyXCIsXG5cdFx0XHRcIlx1MjhDM1wiLFxuXHRcdFx0XCJcdTI4QzRcIixcblx0XHRcdFwiXHUyOEM1XCIsXG5cdFx0XHRcIlx1MjhDNlwiLFxuXHRcdFx0XCJcdTI4QzdcIixcblx0XHRcdFwiXHUyODg4XCIsXG5cdFx0XHRcIlx1Mjg4OVwiLFxuXHRcdFx0XCJcdTI4OEFcIixcblx0XHRcdFwiXHUyODhCXCIsXG5cdFx0XHRcIlx1Mjg4Q1wiLFxuXHRcdFx0XCJcdTI4OERcIixcblx0XHRcdFwiXHUyODhFXCIsXG5cdFx0XHRcIlx1Mjg4RlwiLFxuXHRcdFx0XCJcdTI4QzhcIixcblx0XHRcdFwiXHUyOEM5XCIsXG5cdFx0XHRcIlx1MjhDQVwiLFxuXHRcdFx0XCJcdTI4Q0JcIixcblx0XHRcdFwiXHUyOENDXCIsXG5cdFx0XHRcIlx1MjhDRFwiLFxuXHRcdFx0XCJcdTI4Q0VcIixcblx0XHRcdFwiXHUyOENGXCIsXG5cdFx0XHRcIlx1Mjg5MFwiLFxuXHRcdFx0XCJcdTI4OTFcIixcblx0XHRcdFwiXHUyODkyXCIsXG5cdFx0XHRcIlx1Mjg5M1wiLFxuXHRcdFx0XCJcdTI4OTRcIixcblx0XHRcdFwiXHUyODk1XCIsXG5cdFx0XHRcIlx1Mjg5NlwiLFxuXHRcdFx0XCJcdTI4OTdcIixcblx0XHRcdFwiXHUyOEQwXCIsXG5cdFx0XHRcIlx1MjhEMVwiLFxuXHRcdFx0XCJcdTI4RDJcIixcblx0XHRcdFwiXHUyOEQzXCIsXG5cdFx0XHRcIlx1MjhENFwiLFxuXHRcdFx0XCJcdTI4RDVcIixcblx0XHRcdFwiXHUyOEQ2XCIsXG5cdFx0XHRcIlx1MjhEN1wiLFxuXHRcdFx0XCJcdTI4OThcIixcblx0XHRcdFwiXHUyODk5XCIsXG5cdFx0XHRcIlx1Mjg5QVwiLFxuXHRcdFx0XCJcdTI4OUJcIixcblx0XHRcdFwiXHUyODlDXCIsXG5cdFx0XHRcIlx1Mjg5RFwiLFxuXHRcdFx0XCJcdTI4OUVcIixcblx0XHRcdFwiXHUyODlGXCIsXG5cdFx0XHRcIlx1MjhEOFwiLFxuXHRcdFx0XCJcdTI4RDlcIixcblx0XHRcdFwiXHUyOERBXCIsXG5cdFx0XHRcIlx1MjhEQlwiLFxuXHRcdFx0XCJcdTI4RENcIixcblx0XHRcdFwiXHUyOEREXCIsXG5cdFx0XHRcIlx1MjhERVwiLFxuXHRcdFx0XCJcdTI4REZcIixcblx0XHRcdFwiXHUyOEEwXCIsXG5cdFx0XHRcIlx1MjhBMVwiLFxuXHRcdFx0XCJcdTI4QTJcIixcblx0XHRcdFwiXHUyOEEzXCIsXG5cdFx0XHRcIlx1MjhBNFwiLFxuXHRcdFx0XCJcdTI4QTVcIixcblx0XHRcdFwiXHUyOEE2XCIsXG5cdFx0XHRcIlx1MjhBN1wiLFxuXHRcdFx0XCJcdTI4RTBcIixcblx0XHRcdFwiXHUyOEUxXCIsXG5cdFx0XHRcIlx1MjhFMlwiLFxuXHRcdFx0XCJcdTI4RTNcIixcblx0XHRcdFwiXHUyOEU0XCIsXG5cdFx0XHRcIlx1MjhFNVwiLFxuXHRcdFx0XCJcdTI4RTZcIixcblx0XHRcdFwiXHUyOEU3XCIsXG5cdFx0XHRcIlx1MjhBOFwiLFxuXHRcdFx0XCJcdTI4QTlcIixcblx0XHRcdFwiXHUyOEFBXCIsXG5cdFx0XHRcIlx1MjhBQlwiLFxuXHRcdFx0XCJcdTI4QUNcIixcblx0XHRcdFwiXHUyOEFEXCIsXG5cdFx0XHRcIlx1MjhBRVwiLFxuXHRcdFx0XCJcdTI4QUZcIixcblx0XHRcdFwiXHUyOEU4XCIsXG5cdFx0XHRcIlx1MjhFOVwiLFxuXHRcdFx0XCJcdTI4RUFcIixcblx0XHRcdFwiXHUyOEVCXCIsXG5cdFx0XHRcIlx1MjhFQ1wiLFxuXHRcdFx0XCJcdTI4RURcIixcblx0XHRcdFwiXHUyOEVFXCIsXG5cdFx0XHRcIlx1MjhFRlwiLFxuXHRcdFx0XCJcdTI4QjBcIixcblx0XHRcdFwiXHUyOEIxXCIsXG5cdFx0XHRcIlx1MjhCMlwiLFxuXHRcdFx0XCJcdTI4QjNcIixcblx0XHRcdFwiXHUyOEI0XCIsXG5cdFx0XHRcIlx1MjhCNVwiLFxuXHRcdFx0XCJcdTI4QjZcIixcblx0XHRcdFwiXHUyOEI3XCIsXG5cdFx0XHRcIlx1MjhGMFwiLFxuXHRcdFx0XCJcdTI4RjFcIixcblx0XHRcdFwiXHUyOEYyXCIsXG5cdFx0XHRcIlx1MjhGM1wiLFxuXHRcdFx0XCJcdTI4RjRcIixcblx0XHRcdFwiXHUyOEY1XCIsXG5cdFx0XHRcIlx1MjhGNlwiLFxuXHRcdFx0XCJcdTI4RjdcIixcblx0XHRcdFwiXHUyOEI4XCIsXG5cdFx0XHRcIlx1MjhCOVwiLFxuXHRcdFx0XCJcdTI4QkFcIixcblx0XHRcdFwiXHUyOEJCXCIsXG5cdFx0XHRcIlx1MjhCQ1wiLFxuXHRcdFx0XCJcdTI4QkRcIixcblx0XHRcdFwiXHUyOEJFXCIsXG5cdFx0XHRcIlx1MjhCRlwiLFxuXHRcdFx0XCJcdTI4RjhcIixcblx0XHRcdFwiXHUyOEY5XCIsXG5cdFx0XHRcIlx1MjhGQVwiLFxuXHRcdFx0XCJcdTI4RkJcIixcblx0XHRcdFwiXHUyOEZDXCIsXG5cdFx0XHRcIlx1MjhGRFwiLFxuXHRcdFx0XCJcdTI4RkVcIixcblx0XHRcdFwiXHUyOEZGXCJcblx0XHRdXG5cdH0sXG5cdFwic2FuZFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1Mjg0MFwiLFxuXHRcdFx0XCJcdTI4NDhcIixcblx0XHRcdFwiXHUyODUwXCIsXG5cdFx0XHRcIlx1Mjg2MFwiLFxuXHRcdFx0XCJcdTI4QzBcIixcblx0XHRcdFwiXHUyOEMxXCIsXG5cdFx0XHRcIlx1MjhDMlwiLFxuXHRcdFx0XCJcdTI4QzRcIixcblx0XHRcdFwiXHUyOENDXCIsXG5cdFx0XHRcIlx1MjhENFwiLFxuXHRcdFx0XCJcdTI4RTRcIixcblx0XHRcdFwiXHUyOEU1XCIsXG5cdFx0XHRcIlx1MjhFNlwiLFxuXHRcdFx0XCJcdTI4RUVcIixcblx0XHRcdFwiXHUyOEY2XCIsXG5cdFx0XHRcIlx1MjhGN1wiLFxuXHRcdFx0XCJcdTI4RkZcIixcblx0XHRcdFwiXHUyODdGXCIsXG5cdFx0XHRcIlx1MjgzRlwiLFxuXHRcdFx0XCJcdTI4OUZcIixcblx0XHRcdFwiXHUyODFGXCIsXG5cdFx0XHRcIlx1Mjg1QlwiLFxuXHRcdFx0XCJcdTI4MUJcIixcblx0XHRcdFwiXHUyODJCXCIsXG5cdFx0XHRcIlx1Mjg4QlwiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODBEXCIsXG5cdFx0XHRcIlx1Mjg0OVwiLFxuXHRcdFx0XCJcdTI4MDlcIixcblx0XHRcdFwiXHUyODExXCIsXG5cdFx0XHRcIlx1MjgyMVwiLFxuXHRcdFx0XCJcdTI4ODFcIlxuXHRcdF1cblx0fSxcblx0XCJsaW5lXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEzMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiXFxcXFwiLFxuXHRcdFx0XCJ8XCIsXG5cdFx0XHRcIi9cIlxuXHRcdF1cblx0fSxcblx0XCJsaW5lMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCJcdTIwMTNcIixcblx0XHRcdFwiXHUyMDE0XCIsXG5cdFx0XHRcIlx1MjAxM1wiLFxuXHRcdFx0XCItXCJcblx0XHRdXG5cdH0sXG5cdFwicGlwZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1MjRcIixcblx0XHRcdFwiXHUyNTE4XCIsXG5cdFx0XHRcIlx1MjUzNFwiLFxuXHRcdFx0XCJcdTI1MTRcIixcblx0XHRcdFwiXHUyNTFDXCIsXG5cdFx0XHRcIlx1MjUwQ1wiLFxuXHRcdFx0XCJcdTI1MkNcIixcblx0XHRcdFwiXHUyNTEwXCJcblx0XHRdXG5cdH0sXG5cdFwic2ltcGxlRG90c1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA0MDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIuICBcIixcblx0XHRcdFwiLi4gXCIsXG5cdFx0XHRcIi4uLlwiLFxuXHRcdFx0XCIgICBcIlxuXHRcdF1cblx0fSxcblx0XCJzaW1wbGVEb3RzU2Nyb2xsaW5nXCI6IHtcblx0XHRcImludGVydmFsXCI6IDIwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIi4gIFwiLFxuXHRcdFx0XCIuLiBcIixcblx0XHRcdFwiLi4uXCIsXG5cdFx0XHRcIiAuLlwiLFxuXHRcdFx0XCIgIC5cIixcblx0XHRcdFwiICAgXCJcblx0XHRdXG5cdH0sXG5cdFwic3RhclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA3MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjczNlwiLFxuXHRcdFx0XCJcdTI3MzhcIixcblx0XHRcdFwiXHUyNzM5XCIsXG5cdFx0XHRcIlx1MjczQVwiLFxuXHRcdFx0XCJcdTI3MzlcIixcblx0XHRcdFwiXHUyNzM3XCJcblx0XHRdXG5cdH0sXG5cdFwic3RhcjJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIrXCIsXG5cdFx0XHRcInhcIixcblx0XHRcdFwiKlwiXG5cdFx0XVxuXHR9LFxuXHRcImZsaXBcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNzAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJfXCIsXG5cdFx0XHRcIl9cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCItXCIsXG5cdFx0XHRcImBcIixcblx0XHRcdFwiYFwiLFxuXHRcdFx0XCInXCIsXG5cdFx0XHRcIlx1MDBCNFwiLFxuXHRcdFx0XCItXCIsXG5cdFx0XHRcIl9cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCJfXCJcblx0XHRdXG5cdH0sXG5cdFwiaGFtYnVyZ2VyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjYzMVwiLFxuXHRcdFx0XCJcdTI2MzJcIixcblx0XHRcdFwiXHUyNjM0XCJcblx0XHRdXG5cdH0sXG5cdFwiZ3Jvd1ZlcnRpY2FsXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODNcIixcblx0XHRcdFwiXHUyNTg0XCIsXG5cdFx0XHRcIlx1MjU4NVwiLFxuXHRcdFx0XCJcdTI1ODZcIixcblx0XHRcdFwiXHUyNTg3XCIsXG5cdFx0XHRcIlx1MjU4NlwiLFxuXHRcdFx0XCJcdTI1ODVcIixcblx0XHRcdFwiXHUyNTg0XCIsXG5cdFx0XHRcIlx1MjU4M1wiXG5cdFx0XVxuXHR9LFxuXHRcImdyb3dIb3Jpem9udGFsXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU4RlwiLFxuXHRcdFx0XCJcdTI1OEVcIixcblx0XHRcdFwiXHUyNThEXCIsXG5cdFx0XHRcIlx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OEJcIixcblx0XHRcdFwiXHUyNThBXCIsXG5cdFx0XHRcIlx1MjU4OVwiLFxuXHRcdFx0XCJcdTI1OEFcIixcblx0XHRcdFwiXHUyNThCXCIsXG5cdFx0XHRcIlx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OERcIixcblx0XHRcdFwiXHUyNThFXCJcblx0XHRdXG5cdH0sXG5cdFwiYmFsbG9vblwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIgXCIsXG5cdFx0XHRcIi5cIixcblx0XHRcdFwib1wiLFxuXHRcdFx0XCJPXCIsXG5cdFx0XHRcIkBcIixcblx0XHRcdFwiKlwiLFxuXHRcdFx0XCIgXCJcblx0XHRdXG5cdH0sXG5cdFwiYmFsbG9vbjJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLlwiLFxuXHRcdFx0XCJvXCIsXG5cdFx0XHRcIk9cIixcblx0XHRcdFwiXHUwMEIwXCIsXG5cdFx0XHRcIk9cIixcblx0XHRcdFwib1wiLFxuXHRcdFx0XCIuXCJcblx0XHRdXG5cdH0sXG5cdFwibm9pc2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTkzXCIsXG5cdFx0XHRcIlx1MjU5MlwiLFxuXHRcdFx0XCJcdTI1OTFcIlxuXHRcdF1cblx0fSxcblx0XCJib3VuY2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODAyXCJcblx0XHRdXG5cdH0sXG5cdFwiYm94Qm91bmNlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU5NlwiLFxuXHRcdFx0XCJcdTI1OThcIixcblx0XHRcdFwiXHUyNTlEXCIsXG5cdFx0XHRcIlx1MjU5N1wiXG5cdFx0XVxuXHR9LFxuXHRcImJveEJvdW5jZTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU4MFwiLFxuXHRcdFx0XCJcdTI1OTBcIixcblx0XHRcdFwiXHUyNTg0XCJcblx0XHRdXG5cdH0sXG5cdFwidHJpYW5nbGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNTAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1RTJcIixcblx0XHRcdFwiXHUyNUUzXCIsXG5cdFx0XHRcIlx1MjVFNFwiLFxuXHRcdFx0XCJcdTI1RTVcIlxuXHRcdF1cblx0fSxcblx0XCJiaW5hcnlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIwMTAwMTBcIixcbiAgICAgICAgICAgIFwiMDAxMTAwXCIsXG4gICAgICAgICAgICBcIjEwMDEwMVwiLFxuICAgICAgICAgICAgXCIxMTEwMTBcIixcbiAgICAgICAgICAgIFwiMTExMTAxXCIsXG4gICAgICAgICAgICBcIjAxMDExMVwiLFxuXHRcdFx0XCIxMDEwMTFcIixcblx0XHRcdFwiMTExMDAwXCIsXG5cdFx0XHRcIjExMDAxMVwiLFxuXHRcdFx0XCIxMTAxMDFcIlxuXHRcdF1cblx0fSxcblx0XCJhcmNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNURDXCIsXG5cdFx0XHRcIlx1MjVFMFwiLFxuXHRcdFx0XCJcdTI1RERcIixcblx0XHRcdFwiXHUyNURFXCIsXG5cdFx0XHRcIlx1MjVFMVwiLFxuXHRcdFx0XCJcdTI1REZcIlxuXHRcdF1cblx0fSxcblx0XCJjaXJjbGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUUxXCIsXG5cdFx0XHRcIlx1MjI5OVwiLFxuXHRcdFx0XCJcdTI1RTBcIlxuXHRcdF1cblx0fSxcblx0XCJzcXVhcmVDb3JuZXJzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVGMFwiLFxuXHRcdFx0XCJcdTI1RjNcIixcblx0XHRcdFwiXHUyNUYyXCIsXG5cdFx0XHRcIlx1MjVGMVwiXG5cdFx0XVxuXHR9LFxuXHRcImNpcmNsZVF1YXJ0ZXJzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVGNFwiLFxuXHRcdFx0XCJcdTI1RjdcIixcblx0XHRcdFwiXHUyNUY2XCIsXG5cdFx0XHRcIlx1MjVGNVwiXG5cdFx0XVxuXHR9LFxuXHRcImNpcmNsZUhhbHZlc1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA1MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVEMFwiLFxuXHRcdFx0XCJcdTI1RDNcIixcblx0XHRcdFwiXHUyNUQxXCIsXG5cdFx0XHRcIlx1MjVEMlwiXG5cdFx0XVxuXHR9LFxuXHRcInNxdWlzaFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1NkJcIixcblx0XHRcdFwiXHUyNTZBXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDI1MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjJCNlwiLFxuXHRcdFx0XCJcdTIyQjdcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGUyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUFCXCIsXG5cdFx0XHRcIlx1MjVBQVwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUExXCIsXG5cdFx0XHRcIlx1MjVBMFwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTRcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUEwXCIsXG5cdFx0XHRcIlx1MjVBMVwiLFxuXHRcdFx0XCJcdTI1QUFcIixcblx0XHRcdFwiXHUyNUFCXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlNVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QUVcIixcblx0XHRcdFwiXHUyNUFGXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlNlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAzMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTEwMURcIixcblx0XHRcdFwiXHUxMDQwXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlN1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjlCRVwiLFxuXHRcdFx0XCJcdTI5QkZcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU4XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVDRFwiLFxuXHRcdFx0XCJcdTI1Q0NcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU5XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVDOVwiLFxuXHRcdFx0XCJcdTI1Q0VcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGUxMFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTMyODJcIixcblx0XHRcdFwiXHUzMjgwXCIsXG5cdFx0XHRcIlx1MzI4MVwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTExXCI6IHtcblx0XHRcImludGVydmFsXCI6IDUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOUM3XCIsXG5cdFx0XHRcIlx1MjlDNlwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTEyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjYxN1wiLFxuXHRcdFx0XCJcdTI2MTZcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGUxM1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIj1cIixcblx0XHRcdFwiKlwiLFxuXHRcdFx0XCItXCJcblx0XHRdXG5cdH0sXG5cdFwiYXJyb3dcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyMTkwXCIsXG5cdFx0XHRcIlx1MjE5NlwiLFxuXHRcdFx0XCJcdTIxOTFcIixcblx0XHRcdFwiXHUyMTk3XCIsXG5cdFx0XHRcIlx1MjE5MlwiLFxuXHRcdFx0XCJcdTIxOThcIixcblx0XHRcdFwiXHUyMTkzXCIsXG5cdFx0XHRcIlx1MjE5OVwiXG5cdFx0XVxuXHR9LFxuXHRcImFycm93MlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MkIwNlx1RkUwRiBcIixcblx0XHRcdFwiXHUyMTk3XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTI3QTFcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjE5OFx1RkUwRiBcIixcblx0XHRcdFwiXHUyQjA3XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTIxOTlcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MkIwNVx1RkUwRiBcIixcblx0XHRcdFwiXHUyMTk2XHVGRTBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcImFycm93M1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI4XHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI5XCIsXG5cdFx0XHRcIlx1MjVCOVx1MjVCOFx1MjVCOVx1MjVCOVx1MjVCOVwiLFxuXHRcdFx0XCJcdTI1QjlcdTI1QjlcdTI1QjhcdTI1QjlcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI4XHUyNUI5XCIsXG5cdFx0XHRcIlx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOFwiXG5cdFx0XVxuXHR9LFxuXHRcImJvdW5jaW5nQmFyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiWyAgICBdXCIsXG5cdFx0XHRcIls9ICAgXVwiLFxuXHRcdFx0XCJbPT0gIF1cIixcblx0XHRcdFwiWz09PSBdXCIsXG5cdFx0XHRcIlsgPT09XVwiLFxuXHRcdFx0XCJbICA9PV1cIixcblx0XHRcdFwiWyAgID1dXCIsXG5cdFx0XHRcIlsgICAgXVwiLFxuXHRcdFx0XCJbICAgPV1cIixcblx0XHRcdFwiWyAgPT1dXCIsXG5cdFx0XHRcIlsgPT09XVwiLFxuXHRcdFx0XCJbPT09PV1cIixcblx0XHRcdFwiWz09PSBdXCIsXG5cdFx0XHRcIls9PSAgXVwiLFxuXHRcdFx0XCJbPSAgIF1cIlxuXHRcdF1cblx0fSxcblx0XCJib3VuY2luZ0JhbGxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIoIFx1MjVDRiAgICApXCIsXG5cdFx0XHRcIiggIFx1MjVDRiAgIClcIixcblx0XHRcdFwiKCAgIFx1MjVDRiAgKVwiLFxuXHRcdFx0XCIoICAgIFx1MjVDRiApXCIsXG5cdFx0XHRcIiggICAgIFx1MjVDRilcIixcblx0XHRcdFwiKCAgICBcdTI1Q0YgKVwiLFxuXHRcdFx0XCIoICAgXHUyNUNGICApXCIsXG5cdFx0XHRcIiggIFx1MjVDRiAgIClcIixcblx0XHRcdFwiKCBcdTI1Q0YgICAgKVwiLFxuXHRcdFx0XCIoXHUyNUNGICAgICApXCJcblx0XHRdXG5cdH0sXG5cdFwic21pbGV5XCI6IHtcblx0XHRcImludGVydmFsXCI6IDIwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REUwNCBcIixcblx0XHRcdFwiXHVEODNEXHVERTFEIFwiXG5cdFx0XVxuXHR9LFxuXHRcIm1vbmtleVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAzMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdURFNDggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REU0OCBcIixcblx0XHRcdFwiXHVEODNEXHVERTQ5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFNEEgXCJcblx0XHRdXG5cdH0sXG5cdFwiaGVhcnRzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REM5QiBcIixcblx0XHRcdFwiXHVEODNEXHVEQzk5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURDOUMgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REM5QSBcIixcblx0XHRcdFwiXHUyNzY0XHVGRTBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcImNsb2NrXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REQ1QiBcIixcblx0XHRcdFwiXHVEODNEXHVERDUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MiBcIixcblx0XHRcdFwiXHVEODNEXHVERDUzIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTQgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NSBcIixcblx0XHRcdFwiXHVEODNEXHVERDU2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTcgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1OCBcIixcblx0XHRcdFwiXHVEODNEXHVERDU5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENUEgXCJcblx0XHRdXG5cdH0sXG5cdFwiZWFydGhcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNDXHVERjBEIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMEUgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYwRiBcIlxuXHRcdF1cblx0fSxcblx0XCJtYXRlcmlhbFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNyxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIlxuXHRcdF1cblx0fSxcblx0XCJtb29uXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNDXHVERjExIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTIgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxMyBcIixcblx0XHRcdFwiXHVEODNDXHVERjE0IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTUgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxNiBcIixcblx0XHRcdFwiXHVEODNDXHVERjE3IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTggXCJcblx0XHRdXG5cdH0sXG5cdFwicnVubmVyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE0MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REVCNiBcIixcblx0XHRcdFwiXHVEODNDXHVERkMzIFwiXG5cdFx0XVxuXHR9LFxuXHRcInBvbmdcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1OTBcdTI4MDIgICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MFx1MjgwOCAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwIFx1MjgwMiAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgXHUyODIwICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgXHUyODQwICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4MjAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICBcdTI4MDIgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgIFx1MjgwOCAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgIFx1MjgwMiAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgXHUyODIwICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgXHUyODQwICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4MjAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICBcdTI4MDIgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgIFx1MjgwOCBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgIFx1MjgwMlx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICAgXHUyODIwXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgICBcdTI4NDBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgXHUyODIwIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICBcdTI4MDIgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgXHUyODA4ICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4MDIgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgXHUyODIwICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICBcdTI4NDAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgXHUyODIwICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICBcdTI4MDIgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgXHUyODA4ICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4MDIgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgXHUyODIwICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCBcdTI4NDAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwXHUyODIwICAgICAgIFx1MjU4Q1wiXG5cdFx0XVxuXHR9LFxuXHRcInNoYXJrXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU5MHxcXFxcX19fX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF98XFxcXF9fX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9ffFxcXFxfX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX3xcXFxcX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX198XFxcXF9fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19ffFxcXFxfX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX3xcXFxcX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX198XFxcXF9fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19ffFxcXFxfX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX3xcXFxcX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX198XFxcXF9fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19ffFxcXFxfXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19fX3xcXFxcXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19fXy98XHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX19fL3xfXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fX18vfF9fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fXy98X19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX19fL3xfX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fX18vfF9fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fXy98X19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX19fL3xfX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fX18vfF9fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fXy98X19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF9fL3xfX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MF8vfF9fX19fX19fX19fXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MC98X19fX19fX19fX19fXHUyNThDXCJcblx0XHRdXG5cdH0sXG5cdFwiZHFwYlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJkXCIsXG5cdFx0XHRcInFcIixcblx0XHRcdFwicFwiLFxuXHRcdFx0XCJiXCJcblx0XHRdXG5cdH0sXG5cdFwid2VhdGhlclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI2MDBcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIixcblx0XHRcdFwiXHUyNjAwXHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjQgXCIsXG5cdFx0XHRcIlx1MjZDNVx1RkUwRiBcIixcblx0XHRcdFwiXHVEODNDXHVERjI1IFwiLFxuXHRcdFx0XCJcdTI2MDFcdUZFMEYgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNyBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyOCBcIixcblx0XHRcdFwiXHVEODNDXHVERjI3IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjggXCIsXG5cdFx0XHRcIlx1MjZDOCBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyOCBcIixcblx0XHRcdFwiXHUyNjAxXHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjUgXCIsXG5cdFx0XHRcIlx1MjZDNVx1RkUwRiBcIixcblx0XHRcdFwiXHVEODNDXHVERjI0IFwiLFxuXHRcdFx0XCJcdTI2MDBcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIlxuXHRcdF1cblx0fSxcblx0XCJjaHJpc3RtYXNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNDAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNDXHVERjMyXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REY4NFwiXG5cdFx0XVxuXHR9LFxuXHRcImdyZW5hZGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTA2MEMgIFwiLFxuXHRcdFx0XCJcdTIwMzIgIFwiLFxuXHRcdFx0XCIgXHUwMEI0IFwiLFxuXHRcdFx0XCIgXHUyMDNFIFwiLFxuXHRcdFx0XCIgIFx1MkUwQ1wiLFxuXHRcdFx0XCIgIFx1MkUwQVwiLFxuXHRcdFx0XCIgIHxcIixcblx0XHRcdFwiICBcdTIwNEVcIixcblx0XHRcdFwiICBcdTIwNTVcIixcblx0XHRcdFwiIFx1MERGNCBcIixcblx0XHRcdFwiICBcdTIwNTNcIixcblx0XHRcdFwiICAgXCIsXG5cdFx0XHRcIiAgIFwiLFxuXHRcdFx0XCIgICBcIlxuXHRcdF1cblx0fSxcblx0XCJwb2ludFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjUsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTIyMTlcdTIyMTlcdTIyMTlcIixcblx0XHRcdFwiXHUyNUNGXHUyMjE5XHUyMjE5XCIsXG5cdFx0XHRcIlx1MjIxOVx1MjVDRlx1MjIxOVwiLFxuXHRcdFx0XCJcdTIyMTlcdTIyMTlcdTI1Q0ZcIixcblx0XHRcdFwiXHUyMjE5XHUyMjE5XHUyMjE5XCJcblx0XHRdXG5cdH0sXG5cdFwibGF5ZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCI9XCIsXG5cdFx0XHRcIlx1MjI2MVwiXG5cdFx0XVxuXHR9LFxuXHRcImJldGFXYXZlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUwM0MxXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNDMVx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQzFcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0MxXHUwM0IyXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNDMVx1MDNCMlx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQzFcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0MxXCJcblx0XHRdXG5cdH0sXG5cdFwiZmluZ2VyRGFuY2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTYwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNFXHVERDE4IFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMUYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ5NiBcIixcblx0XHRcdFwiXHUyNzBCIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMUEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REM0NiBcIlxuXHRcdF1cblx0fSxcblx0XCJmaXN0QnVtcFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUIgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUIgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUIgXCIsXG5cdFx0XHRcIlxcdTMwMDBcdUQ4M0VcdUREMUNcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQlxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDBcXHUzMDAwXHVEODNFXHVERDFDXHVEODNFXHVERDFCXFx1MzAwMFxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDBcdUQ4M0VcdUREMUNcdTI3MjhcdUQ4M0VcdUREMUJcXHUzMDAwXFx1MzAwMCBcIixcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFx1MjcyOFxcdTMwMDBcdUQ4M0VcdUREMUJcXHUzMDAwIFwiXG5cdFx0XVxuXHR9LFxuXHRcInNvY2NlckhlYWRlclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiBcdUQ4M0VcdURERDFcdTI2QkRcdUZFMEYgICAgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgIFx1MjZCRFx1RkUwRiAgICAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgXHUyNkJEXHVGRTBGICAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICBcdTI2QkRcdUZFMEYgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgIFx1MjZCRFx1RkUwRiAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgICAgXHUyNkJEXHVGRTBGICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICAgICBcdTI2QkRcdUZFMEZcdUQ4M0VcdURERDEgIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgICBcdTI2QkRcdUZFMEYgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgICBcdTI2QkRcdUZFMEYgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICBcdTI2QkRcdUZFMEYgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICBcdTI2QkRcdUZFMEYgICAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICBcdTI2QkRcdUZFMEYgICAgICBcdUQ4M0VcdURERDEgXCJcblx0XHRdXG5cdH0sXG5cdFwibWluZGJsb3duXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE2MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REUxMCBcIixcblx0XHRcdFwiXHVEODNEXHVERTEwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMkUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyRSBcIixcblx0XHRcdFwiXHVEODNEXHVERTI2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMjYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyNyBcIixcblx0XHRcdFwiXHVEODNEXHVERTI3IFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMkYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1RENBNSBcIixcblx0XHRcdFwiXHUyNzI4IFwiLFxuXHRcdFx0XCJcXHUzMDAwIFwiLFxuXHRcdFx0XCJcXHUzMDAwIFwiLFxuXHRcdFx0XCJcXHUzMDAwIFwiXG5cdFx0XVxuXHR9LFxuXHRcInNwZWFrZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTYwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDA4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMDkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQwQSBcIixcblx0XHRcdFwiXHVEODNEXHVERDA5IFwiXG5cdFx0XVxuXHR9LFxuXHRcIm9yYW5nZVB1bHNlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REQzOCBcIixcblx0XHRcdFwiXHVEODNEXHVERDM2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURGRTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REZFMCBcIixcblx0XHRcdFwiXHVEODNEXHVERDM2IFwiXG5cdFx0XVxuXHR9LFxuXHRcImJsdWVQdWxzZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdUREMzkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNyBcIixcblx0XHRcdFwiXHVEODNEXHVERDM1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNyBcIlxuXHRcdF1cblx0fSxcblx0XCJvcmFuZ2VCbHVlUHVsc2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDM4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REZFMCBcIixcblx0XHRcdFwiXHVEODNEXHVERkUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzOSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiXG5cdFx0XVxuXHR9LFxuXHRcInRpbWVUcmF2ZWxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDVCIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENUEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1OSBcIixcblx0XHRcdFwiXHVEODNEXHVERDU4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTcgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NiBcIixcblx0XHRcdFwiXHVEODNEXHVERDU1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTQgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MyBcIixcblx0XHRcdFwiXHVEODNEXHVERDUyIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTEgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MCBcIlxuXHRcdF1cblx0fSxcblx0XCJhZXN0aGV0aWNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIxXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXCJcblx0XHRdXG5cdH0sXG5cdFwiZHdhcmZGb3J0cmVzc1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCJcdTI2M0EgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQSBcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI2M0EgXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkzXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkyXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTFcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBIFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5M1x1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkzXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTJcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkxXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQSBcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTJcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTJcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0EgXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5M1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTJcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkyXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5MVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTFcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBIFx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MyAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTIgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MiAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkxICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTEgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQSAgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQSAgJlwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQSBcdTI2M0MmXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0EgXHUyNjNDICZcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjYzQyAgJlwiLFxuXHRcdFx0XCIgICAgICBcdTI2M0FcdTI2M0MgICYgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjAzQyAgICYgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBICAgJiAgXCIsXG5cdFx0XHRcIiAgICBcdTIwM0MgICAgJiAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQSAgICAmICAgXCIsXG5cdFx0XHRcIiAgXHUyMDNDICAgICAmICAgXCIsXG5cdFx0XHRcIiBcdTI2M0EgICAgICYgICAgXCIsXG5cdFx0XHRcIlx1MjAzQyAgICAgICYgICAgXCIsXG5cdFx0XHRcIiAgICAgICYgICAgIFwiLFxuXHRcdFx0XCIgICAgICAmICAgICBcIixcblx0XHRcdFwiICAgICAmICAgXHUyNTkxICBcIixcblx0XHRcdFwiICAgICAmICAgXHUyNTkyICBcIixcblx0XHRcdFwiICAgICYgICAgXHUyNTkzICBcIixcblx0XHRcdFwiICAgICYgICAgXHUwMEEzICBcIixcblx0XHRcdFwiICAgJiAgICBcdTI1OTFcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAmICAgIFx1MjU5Mlx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgJiAgICAgXHUyNTkzXHUwMEEzICBcIixcblx0XHRcdFwiICAmICAgICBcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgJiAgICAgXHUyNTkxXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICYgICAgIFx1MjU5Mlx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiYgICAgICBcdTI1OTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCImICAgICAgXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTkxXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTkyXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTkzXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI1OTFcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjU5Mlx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNTkzXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNTkxXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjU5Mlx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI1OTNcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCJcblx0XHRdXG5cdH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHNwaW5uZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWlyZSgnLi9zcGlubmVycy5qc29uJykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9leHRlbnNpb25zXG5cbmNvbnN0IHNwaW5uZXJzTGlzdCA9IE9iamVjdC5rZXlzKHNwaW5uZXJzKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHNwaW5uZXJzLCAncmFuZG9tJywge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzcGlubmVyc0xpc3QubGVuZ3RoKTtcblx0XHRjb25zdCBzcGlubmVyTmFtZSA9IHNwaW5uZXJzTGlzdFtyYW5kb21JbmRleF07XG5cdFx0cmV0dXJuIHNwaW5uZXJzW3NwaW5uZXJOYW1lXTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3Bpbm5lcnM7XG4iLCAidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSkge1xuICB2YXIgZmlsdGVyO1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGZpbHRlciA9IGNpcmN1bGFyLmZpbHRlcjtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyXG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgaWYgKEJ1ZmZlci5hbGxvY1Vuc2FmZSkge1xuICAgICAgICAvLyBOb2RlLmpzID49IDQuNS4wXG4gICAgICAgIGNoaWxkID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT2xkZXIgTm9kZS5qcyB2ZXJzaW9uc1xuICAgICAgICBjaGlsZCA9IG5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwYXJlbnQuY29weShjaGlsZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICAgIHByb3RvID0gcHJvdG90eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgdmFyIGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7XG5cbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICByZXR1cm4gYWxsQ2hpbGRyZW5baW5kZXhdO1xuICAgICAgfVxuICAgICAgYWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICBhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHBhcmVudCkge1xuICAgICAgdmFyIGF0dHJzO1xuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIGF0dHJzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycyAmJiBhdHRycy5zZXQgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNoaWxkW2ldID0gX2Nsb25lKHBhcmVudFtpXSwgZGVwdGggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufTtcbmNsb25lLl9fb2JqVG9TdHIgPSBfX29ialRvU3RyO1xuXG5mdW5jdGlvbiBfX2lzRGF0ZShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufTtcbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufTtcbmNsb25lLl9faXNSZWdFeHAgPSBfX2lzUmVnRXhwO1xuXG5mdW5jdGlvbiBfX2dldFJlZ0V4cEZsYWdzKHJlKSB7XG4gIHZhciBmbGFncyA9ICcnO1xuICBpZiAocmUuZ2xvYmFsKSBmbGFncyArPSAnZyc7XG4gIGlmIChyZS5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XG4gIGlmIChyZS5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcbiAgcmV0dXJuIGZsYWdzO1xufTtcbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cbiIsICJ2YXIgY2xvbmUgPSByZXF1aXJlKCdjbG9uZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1trZXldID0gY2xvbmUoZGVmYXVsdHNba2V5XSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn07IiwgIm1vZHVsZS5leHBvcnRzID0gW1xuICAgIFsgMHgwMzAwLCAweDAzNkYgXSwgWyAweDA0ODMsIDB4MDQ4NiBdLCBbIDB4MDQ4OCwgMHgwNDg5IF0sXG4gICAgWyAweDA1OTEsIDB4MDVCRCBdLCBbIDB4MDVCRiwgMHgwNUJGIF0sIFsgMHgwNUMxLCAweDA1QzIgXSxcbiAgICBbIDB4MDVDNCwgMHgwNUM1IF0sIFsgMHgwNUM3LCAweDA1QzcgXSwgWyAweDA2MDAsIDB4MDYwMyBdLFxuICAgIFsgMHgwNjEwLCAweDA2MTUgXSwgWyAweDA2NEIsIDB4MDY1RSBdLCBbIDB4MDY3MCwgMHgwNjcwIF0sXG4gICAgWyAweDA2RDYsIDB4MDZFNCBdLCBbIDB4MDZFNywgMHgwNkU4IF0sIFsgMHgwNkVBLCAweDA2RUQgXSxcbiAgICBbIDB4MDcwRiwgMHgwNzBGIF0sIFsgMHgwNzExLCAweDA3MTEgXSwgWyAweDA3MzAsIDB4MDc0QSBdLFxuICAgIFsgMHgwN0E2LCAweDA3QjAgXSwgWyAweDA3RUIsIDB4MDdGMyBdLCBbIDB4MDkwMSwgMHgwOTAyIF0sXG4gICAgWyAweDA5M0MsIDB4MDkzQyBdLCBbIDB4MDk0MSwgMHgwOTQ4IF0sIFsgMHgwOTRELCAweDA5NEQgXSxcbiAgICBbIDB4MDk1MSwgMHgwOTU0IF0sIFsgMHgwOTYyLCAweDA5NjMgXSwgWyAweDA5ODEsIDB4MDk4MSBdLFxuICAgIFsgMHgwOUJDLCAweDA5QkMgXSwgWyAweDA5QzEsIDB4MDlDNCBdLCBbIDB4MDlDRCwgMHgwOUNEIF0sXG4gICAgWyAweDA5RTIsIDB4MDlFMyBdLCBbIDB4MEEwMSwgMHgwQTAyIF0sIFsgMHgwQTNDLCAweDBBM0MgXSxcbiAgICBbIDB4MEE0MSwgMHgwQTQyIF0sIFsgMHgwQTQ3LCAweDBBNDggXSwgWyAweDBBNEIsIDB4MEE0RCBdLFxuICAgIFsgMHgwQTcwLCAweDBBNzEgXSwgWyAweDBBODEsIDB4MEE4MiBdLCBbIDB4MEFCQywgMHgwQUJDIF0sXG4gICAgWyAweDBBQzEsIDB4MEFDNSBdLCBbIDB4MEFDNywgMHgwQUM4IF0sIFsgMHgwQUNELCAweDBBQ0QgXSxcbiAgICBbIDB4MEFFMiwgMHgwQUUzIF0sIFsgMHgwQjAxLCAweDBCMDEgXSwgWyAweDBCM0MsIDB4MEIzQyBdLFxuICAgIFsgMHgwQjNGLCAweDBCM0YgXSwgWyAweDBCNDEsIDB4MEI0MyBdLCBbIDB4MEI0RCwgMHgwQjREIF0sXG4gICAgWyAweDBCNTYsIDB4MEI1NiBdLCBbIDB4MEI4MiwgMHgwQjgyIF0sIFsgMHgwQkMwLCAweDBCQzAgXSxcbiAgICBbIDB4MEJDRCwgMHgwQkNEIF0sIFsgMHgwQzNFLCAweDBDNDAgXSwgWyAweDBDNDYsIDB4MEM0OCBdLFxuICAgIFsgMHgwQzRBLCAweDBDNEQgXSwgWyAweDBDNTUsIDB4MEM1NiBdLCBbIDB4MENCQywgMHgwQ0JDIF0sXG4gICAgWyAweDBDQkYsIDB4MENCRiBdLCBbIDB4MENDNiwgMHgwQ0M2IF0sIFsgMHgwQ0NDLCAweDBDQ0QgXSxcbiAgICBbIDB4MENFMiwgMHgwQ0UzIF0sIFsgMHgwRDQxLCAweDBENDMgXSwgWyAweDBENEQsIDB4MEQ0RCBdLFxuICAgIFsgMHgwRENBLCAweDBEQ0EgXSwgWyAweDBERDIsIDB4MERENCBdLCBbIDB4MERENiwgMHgwREQ2IF0sXG4gICAgWyAweDBFMzEsIDB4MEUzMSBdLCBbIDB4MEUzNCwgMHgwRTNBIF0sIFsgMHgwRTQ3LCAweDBFNEUgXSxcbiAgICBbIDB4MEVCMSwgMHgwRUIxIF0sIFsgMHgwRUI0LCAweDBFQjkgXSwgWyAweDBFQkIsIDB4MEVCQyBdLFxuICAgIFsgMHgwRUM4LCAweDBFQ0QgXSwgWyAweDBGMTgsIDB4MEYxOSBdLCBbIDB4MEYzNSwgMHgwRjM1IF0sXG4gICAgWyAweDBGMzcsIDB4MEYzNyBdLCBbIDB4MEYzOSwgMHgwRjM5IF0sIFsgMHgwRjcxLCAweDBGN0UgXSxcbiAgICBbIDB4MEY4MCwgMHgwRjg0IF0sIFsgMHgwRjg2LCAweDBGODcgXSwgWyAweDBGOTAsIDB4MEY5NyBdLFxuICAgIFsgMHgwRjk5LCAweDBGQkMgXSwgWyAweDBGQzYsIDB4MEZDNiBdLCBbIDB4MTAyRCwgMHgxMDMwIF0sXG4gICAgWyAweDEwMzIsIDB4MTAzMiBdLCBbIDB4MTAzNiwgMHgxMDM3IF0sIFsgMHgxMDM5LCAweDEwMzkgXSxcbiAgICBbIDB4MTA1OCwgMHgxMDU5IF0sIFsgMHgxMTYwLCAweDExRkYgXSwgWyAweDEzNUYsIDB4MTM1RiBdLFxuICAgIFsgMHgxNzEyLCAweDE3MTQgXSwgWyAweDE3MzIsIDB4MTczNCBdLCBbIDB4MTc1MiwgMHgxNzUzIF0sXG4gICAgWyAweDE3NzIsIDB4MTc3MyBdLCBbIDB4MTdCNCwgMHgxN0I1IF0sIFsgMHgxN0I3LCAweDE3QkQgXSxcbiAgICBbIDB4MTdDNiwgMHgxN0M2IF0sIFsgMHgxN0M5LCAweDE3RDMgXSwgWyAweDE3REQsIDB4MTdERCBdLFxuICAgIFsgMHgxODBCLCAweDE4MEQgXSwgWyAweDE4QTksIDB4MThBOSBdLCBbIDB4MTkyMCwgMHgxOTIyIF0sXG4gICAgWyAweDE5MjcsIDB4MTkyOCBdLCBbIDB4MTkzMiwgMHgxOTMyIF0sIFsgMHgxOTM5LCAweDE5M0IgXSxcbiAgICBbIDB4MUExNywgMHgxQTE4IF0sIFsgMHgxQjAwLCAweDFCMDMgXSwgWyAweDFCMzQsIDB4MUIzNCBdLFxuICAgIFsgMHgxQjM2LCAweDFCM0EgXSwgWyAweDFCM0MsIDB4MUIzQyBdLCBbIDB4MUI0MiwgMHgxQjQyIF0sXG4gICAgWyAweDFCNkIsIDB4MUI3MyBdLCBbIDB4MURDMCwgMHgxRENBIF0sIFsgMHgxREZFLCAweDFERkYgXSxcbiAgICBbIDB4MjAwQiwgMHgyMDBGIF0sIFsgMHgyMDJBLCAweDIwMkUgXSwgWyAweDIwNjAsIDB4MjA2MyBdLFxuICAgIFsgMHgyMDZBLCAweDIwNkYgXSwgWyAweDIwRDAsIDB4MjBFRiBdLCBbIDB4MzAyQSwgMHgzMDJGIF0sXG4gICAgWyAweDMwOTksIDB4MzA5QSBdLCBbIDB4QTgwNiwgMHhBODA2IF0sIFsgMHhBODBCLCAweEE4MEIgXSxcbiAgICBbIDB4QTgyNSwgMHhBODI2IF0sIFsgMHhGQjFFLCAweEZCMUUgXSwgWyAweEZFMDAsIDB4RkUwRiBdLFxuICAgIFsgMHhGRTIwLCAweEZFMjMgXSwgWyAweEZFRkYsIDB4RkVGRiBdLCBbIDB4RkZGOSwgMHhGRkZCIF0sXG4gICAgWyAweDEwQTAxLCAweDEwQTAzIF0sIFsgMHgxMEEwNSwgMHgxMEEwNiBdLCBbIDB4MTBBMEMsIDB4MTBBMEYgXSxcbiAgICBbIDB4MTBBMzgsIDB4MTBBM0EgXSwgWyAweDEwQTNGLCAweDEwQTNGIF0sIFsgMHgxRDE2NywgMHgxRDE2OSBdLFxuICAgIFsgMHgxRDE3MywgMHgxRDE4MiBdLCBbIDB4MUQxODUsIDB4MUQxOEIgXSwgWyAweDFEMUFBLCAweDFEMUFEIF0sXG4gICAgWyAweDFEMjQyLCAweDFEMjQ0IF0sIFsgMHhFMDAwMSwgMHhFMDAwMSBdLCBbIDB4RTAwMjAsIDB4RTAwN0YgXSxcbiAgICBbIDB4RTAxMDAsIDB4RTAxRUYgXVxuXVxuIiwgIlwidXNlIHN0cmljdFwiXG5cbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJ2RlZmF1bHRzJylcbnZhciBjb21iaW5pbmcgPSByZXF1aXJlKCcuL2NvbWJpbmluZycpXG5cbnZhciBERUZBVUxUUyA9IHtcbiAgbnVsOiAwLFxuICBjb250cm9sOiAwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgcmV0dXJuIHdjc3dpZHRoKHN0ciwgREVGQVVMVFMpXG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbmZpZyA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgb3B0cyA9IGRlZmF1bHRzKG9wdHMgfHwge30sIERFRkFVTFRTKVxuICByZXR1cm4gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgICByZXR1cm4gd2Nzd2lkdGgoc3RyLCBvcHRzKVxuICB9XG59XG5cbi8qXG4gKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGVmaW5lIHRoZSBjb2x1bW4gd2lkdGggb2YgYW4gSVNPIDEwNjQ2XG4gKiAgY2hhcmFjdGVyIGFzIGZvbGxvd3M6XG4gKiAgLSBUaGUgbnVsbCBjaGFyYWN0ZXIgKFUrMDAwMCkgaGFzIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBPdGhlciBDMC9DMSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIERFTCB3aWxsIGxlYWQgdG8gYSByZXR1cm4gdmFsdWVcbiAqICAgIG9mIC0xLlxuICogIC0gTm9uLXNwYWNpbmcgYW5kIGVuY2xvc2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyAoZ2VuZXJhbCBjYXRlZ29yeVxuICogICAgY29kZSBNbiBvciBNZSBpbiB0aGVcbiAqICAgIFVuaWNvZGUgZGF0YWJhc2UpIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMC5cbiAqICAtIFNPRlQgSFlQSEVOIChVKzAwQUQpIGhhcyBhIGNvbHVtbiB3aWR0aCBvZiAxLlxuICogIC0gT3RoZXIgZm9ybWF0IGNoYXJhY3RlcnMgKGdlbmVyYWwgY2F0ZWdvcnkgY29kZSBDZiBpbiB0aGUgVW5pY29kZVxuICogICAgZGF0YWJhc2UpIGFuZCBaRVJPIFdJRFRIXG4gKiAgICBTUEFDRSAoVSsyMDBCKSBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBIYW5ndWwgSmFtbyBtZWRpYWwgdm93ZWxzIGFuZCBmaW5hbCBjb25zb25hbnRzIChVKzExNjAtVSsxMUZGKVxuICogICAgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLlxuICogIC0gU3BhY2luZyBjaGFyYWN0ZXJzIGluIHRoZSBFYXN0IEFzaWFuIFdpZGUgKFcpIG9yIEVhc3QgQXNpYW5cbiAqICAgIEZ1bGwtd2lkdGggKEYpIGNhdGVnb3J5IGFzXG4gKiAgICBkZWZpbmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsIFJlcG9ydCAjMTEgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAyLlxuICogIC0gQWxsIHJlbWFpbmluZyBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgYWxsIHByaW50YWJsZSBJU08gODg1OS0xIGFuZFxuICogICAgV0dMNCBjaGFyYWN0ZXJzLCBVbmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycywgZXRjLikgaGF2ZSBhIGNvbHVtblxuICogICAgd2lkdGggb2YgMS5cbiAqICBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkIGluIElTTyAxMDY0Ni5cbiovXG5cbmZ1bmN0aW9uIHdjc3dpZHRoKHN0ciwgb3B0cykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiB3Y3dpZHRoKHN0ciwgb3B0cylcblxuICB2YXIgcyA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbiA9IHdjd2lkdGgoc3RyLmNoYXJDb2RlQXQoaSksIG9wdHMpXG4gICAgaWYgKG4gPCAwKSByZXR1cm4gLTFcbiAgICBzICs9IG5cbiAgfVxuXG4gIHJldHVybiBzXG59XG5cbmZ1bmN0aW9uIHdjd2lkdGgodWNzLCBvcHRzKSB7XG4gIC8vIHRlc3QgZm9yIDgtYml0IGNvbnRyb2wgY2hhcmFjdGVyc1xuICBpZiAodWNzID09PSAwKSByZXR1cm4gb3B0cy5udWxcbiAgaWYgKHVjcyA8IDMyIHx8ICh1Y3MgPj0gMHg3ZiAmJiB1Y3MgPCAweGEwKSkgcmV0dXJuIG9wdHMuY29udHJvbFxuXG4gIC8vIGJpbmFyeSBzZWFyY2ggaW4gdGFibGUgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVyc1xuICBpZiAoYmlzZWFyY2godWNzKSkgcmV0dXJuIDBcblxuICAvLyBpZiB3ZSBhcnJpdmUgaGVyZSwgdWNzIGlzIG5vdCBhIGNvbWJpbmluZyBvciBDMC9DMSBjb250cm9sIGNoYXJhY3RlclxuICByZXR1cm4gMSArXG4gICAgICAodWNzID49IDB4MTEwMCAmJlxuICAgICAgICh1Y3MgPD0gMHgxMTVmIHx8ICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5ndWwgSmFtbyBpbml0LiBjb25zb25hbnRzXG4gICAgICAgIHVjcyA9PSAweDIzMjkgfHwgdWNzID09IDB4MjMyYSB8fFxuICAgICAgICAodWNzID49IDB4MmU4MCAmJiB1Y3MgPD0gMHhhNGNmICYmXG4gICAgICAgICB1Y3MgIT0gMHgzMDNmKSB8fCAgICAgICAgICAgICAgICAgICAgIC8vIENKSyAuLi4gWWlcbiAgICAgICAgKHVjcyA+PSAweGFjMDAgJiYgdWNzIDw9IDB4ZDdhMykgfHwgICAgLy8gSGFuZ3VsIFN5bGxhYmxlc1xuICAgICAgICAodWNzID49IDB4ZjkwMCAmJiB1Y3MgPD0gMHhmYWZmKSB8fCAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXG4gICAgICAgICh1Y3MgPj0gMHhmZTEwICYmIHVjcyA8PSAweGZlMTkpIHx8ICAgIC8vIFZlcnRpY2FsIGZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZTMwICYmIHVjcyA8PSAweGZlNmYpIHx8ICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZjAwICYmIHVjcyA8PSAweGZmNjApIHx8ICAgIC8vIEZ1bGx3aWR0aCBGb3Jtc1xuICAgICAgICAodWNzID49IDB4ZmZlMCAmJiB1Y3MgPD0gMHhmZmU2KSB8fFxuICAgICAgICAodWNzID49IDB4MjAwMDAgJiYgdWNzIDw9IDB4MmZmZmQpIHx8XG4gICAgICAgICh1Y3MgPj0gMHgzMDAwMCAmJiB1Y3MgPD0gMHgzZmZmZCkpKTtcbn1cblxuZnVuY3Rpb24gYmlzZWFyY2godWNzKSB7XG4gIHZhciBtaW4gPSAwXG4gIHZhciBtYXggPSBjb21iaW5pbmcubGVuZ3RoIC0gMVxuICB2YXIgbWlkXG5cbiAgaWYgKHVjcyA8IGNvbWJpbmluZ1swXVswXSB8fCB1Y3MgPiBjb21iaW5pbmdbbWF4XVsxXSkgcmV0dXJuIGZhbHNlXG5cbiAgd2hpbGUgKG1heCA+PSBtaW4pIHtcbiAgICBtaWQgPSBNYXRoLmZsb29yKChtaW4gKyBtYXgpIC8gMilcbiAgICBpZiAodWNzID4gY29tYmluaW5nW21pZF1bMV0pIG1pbiA9IG1pZCArIDFcbiAgICBlbHNlIGlmICh1Y3MgPCBjb21iaW5pbmdbbWlkXVswXSkgbWF4ID0gbWlkIC0gMVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnc3RyZWFtJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJ2J1ZmZlcicpLFxuICBCdWZmZXIgPSBfcmVxdWlyZS5CdWZmZXI7XG52YXIgX3JlcXVpcmUyID0gcmVxdWlyZSgndXRpbCcpLFxuICBpbnNwZWN0ID0gX3JlcXVpcmUyLmluc3BlY3Q7XG52YXIgY3VzdG9tID0gaW5zcGVjdCAmJiBpbnNwZWN0LmN1c3RvbSB8fCAnaW5zcGVjdCc7XG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5jb3B5LmNhbGwoc3JjLCB0YXJnZXQsIG9mZnNldCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEJ1ZmZlckxpc3QsIFt7XG4gICAga2V5OiBcInB1c2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHVzaCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVuc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IHRoaXMuaGVhZFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAgIC0tdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImpvaW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gam9pbihzKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICAgICAgd2hpbGUgKHAgPSBwLm5leHQpIHJldCArPSBzICsgcC5kYXRhO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29uY2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbmNhdChuKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB3aGlsZSAocCkge1xuICAgICAgICBjb3B5QnVmZmVyKHAuZGF0YSwgcmV0LCBpKTtcbiAgICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICB9LCB7XG4gICAga2V5OiBcImNvbnN1bWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgICB2YXIgcmV0O1xuICAgICAgaWYgKG4gPCB0aGlzLmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gYHNsaWNlYCBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5ncy5cbiAgICAgICAgcmV0ID0gdGhpcy5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgICAgIHRoaXMuaGVhZC5kYXRhID0gdGhpcy5oZWFkLmRhdGEuc2xpY2Uobik7XG4gICAgICB9IGVsc2UgaWYgKG4gPT09IHRoaXMuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBGaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2guXG4gICAgICAgIHJldCA9IHRoaXMuc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlci5cbiAgICAgICAgcmV0ID0gaGFzU3RyaW5ncyA/IHRoaXMuX2dldFN0cmluZyhuKSA6IHRoaXMuX2dldEJ1ZmZlcihuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpcnN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpcnN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICAgIH1cblxuICAgIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldFN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U3RyaW5nKG4pIHtcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIGMgPSAxO1xuICAgICAgdmFyIHJldCA9IHAuZGF0YTtcbiAgICAgIG4gLT0gcmV0Lmxlbmd0aDtcbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkgcmV0ICs9IHN0cjtlbHNlIHJldCArPSBzdHIuc2xpY2UoMCwgbik7XG4gICAgICAgIG4gLT0gbmI7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHQ7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytjO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggLT0gYztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldEJ1ZmZlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0QnVmZmVyKG4pIHtcbiAgICAgIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBjID0gMTtcbiAgICAgIHAuZGF0YS5jb3B5KHJldCk7XG4gICAgICBuIC09IHAuZGF0YS5sZW5ndGg7XG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgICAgICB2YXIgbmIgPSBuID4gYnVmLmxlbmd0aCA/IGJ1Zi5sZW5ndGggOiBuO1xuICAgICAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgICAgIG4gLT0gbmI7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHQ7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG5iKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytjO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggLT0gYztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsaW5rZWQgbGlzdCBvbmx5IHNob3dzIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi5cbiAgfSwge1xuICAgIGtleTogY3VzdG9tLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAvLyBPbmx5IGluc3BlY3Qgb25lIGxldmVsLlxuICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgLy8gSXQgc2hvdWxkIG5vdCByZWN1cnNlLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG4vLyB1bmRvY3VtZW50ZWQgY2IoKSBBUEksIG5lZWRlZCBmb3IgY29yZSwgbm90IGZvciBwdWJsaWMgQVBJXG5mdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG4gIHRoaXMuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoIWNiICYmIGVycikge1xuICAgICAgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckFuZENsb3NlTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gZW1pdEVycm9yQW5kQ2xvc2VOVChzZWxmLCBlcnIpIHtcbiAgZW1pdEVycm9yTlQoc2VsZiwgZXJyKTtcbiAgZW1pdENsb3NlTlQoc2VsZik7XG59XG5mdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmKSB7XG4gIGlmIChzZWxmLl93cml0YWJsZVN0YXRlICYmICFzZWxmLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBpZiAoc2VsZi5fcmVhZGFibGVTdGF0ZSAmJiAhc2VsZi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2UpIHJldHVybjtcbiAgc2VsZi5lbWl0KCdjbG9zZScpO1xufVxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB9XG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG59XG5mdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVycikge1xuICAvLyBXZSBoYXZlIHRlc3RzIHRoYXQgcmVseSBvbiBlcnJvcnMgYmVpbmcgZW1pdHRlZFxuICAvLyBpbiB0aGUgc2FtZSB0aWNrLCBzbyBjaGFuZ2luZyB0aGlzIGlzIHNlbXZlciBtYWpvci5cbiAgLy8gRm9yIG5vdyB3aGVuIHlvdSBvcHQtaW4gdG8gYXV0b0Rlc3Ryb3kgd2UgYWxsb3dcbiAgLy8gdGhlIGVycm9yIHRvIGJlIGVtaXR0ZWQgbmV4dFRpY2suIEluIGEgZnV0dXJlXG4gIC8vIHNlbXZlciBtYWpvciB1cGRhdGUgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgZGVmYXVsdCB0byB0aGlzLlxuXG4gIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChyU3RhdGUgJiYgclN0YXRlLmF1dG9EZXN0cm95IHx8IHdTdGF0ZSAmJiB3U3RhdGUuYXV0b0Rlc3Ryb3kpIHN0cmVhbS5kZXN0cm95KGVycik7ZWxzZSBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gIHVuZGVzdHJveTogdW5kZXN0cm95LFxuICBlcnJvck9yRGVzdHJveTogZXJyb3JPckRlc3Ryb3lcbn07IiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29kZXMgPSB7fTtcblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JUeXBlKGNvZGUsIG1lc3NhZ2UsIEJhc2UpIHtcbiAgaWYgKCFCYXNlKSB7XG4gICAgQmFzZSA9IEVycm9yXG4gIH1cblxuICBmdW5jdGlvbiBnZXRNZXNzYWdlIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMylcbiAgICB9XG4gIH1cblxuICBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgc3VwZXIoZ2V0TWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKSk7XG4gICAgfVxuICB9XG5cbiAgTm9kZUVycm9yLnByb3RvdHlwZS5uYW1lID0gQmFzZS5uYW1lO1xuICBOb2RlRXJyb3IucHJvdG90eXBlLmNvZGUgPSBjb2RlO1xuXG4gIGNvZGVzW2NvZGVdID0gTm9kZUVycm9yO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92MTAuOC4wL2xpYi9pbnRlcm5hbC9lcnJvcnMuanNcbmZ1bmN0aW9uIG9uZU9mKGV4cGVjdGVkLCB0aGluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBjb25zdCBsZW4gPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5tYXAoKGkpID0+IFN0cmluZyhpKSk7XG4gICAgaWYgKGxlbiA+IDIpIHtcbiAgICAgIHJldHVybiBgb25lIG9mICR7dGhpbmd9ICR7ZXhwZWN0ZWQuc2xpY2UoMCwgbGVuIC0gMSkuam9pbignLCAnKX0sIG9yIGAgK1xuICAgICAgICAgICAgIGV4cGVjdGVkW2xlbiAtIDFdO1xuICAgIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG4gICAgICByZXR1cm4gYG9uZSBvZiAke3RoaW5nfSAke2V4cGVjdGVkWzBdfSBvciAke2V4cGVjdGVkWzFdfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgb2YgJHt0aGluZ30gJHtleHBlY3RlZFswXX1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYG9mICR7dGhpbmd9ICR7U3RyaW5nKGV4cGVjdGVkKX1gO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9zdGFydHNXaXRoXG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgc2VhcmNoLCBwb3MpIHtcblx0cmV0dXJuIHN0ci5zdWJzdHIoIXBvcyB8fCBwb3MgPCAwID8gMCA6ICtwb3MsIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG59XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9lbmRzV2l0aFxuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2gsIHRoaXNfbGVuKSB7XG5cdGlmICh0aGlzX2xlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXNfbGVuID4gc3RyLmxlbmd0aCkge1xuXHRcdHRoaXNfbGVuID0gc3RyLmxlbmd0aDtcblx0fVxuXHRyZXR1cm4gc3RyLnN1YnN0cmluZyh0aGlzX2xlbiAtIHNlYXJjaC5sZW5ndGgsIHRoaXNfbGVuKSA9PT0gc2VhcmNoO1xufVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvaW5jbHVkZXNcbmZ1bmN0aW9uIGluY2x1ZGVzKHN0ciwgc2VhcmNoLCBzdGFydCkge1xuICBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnbnVtYmVyJykge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGlmIChzdGFydCArIHNlYXJjaC5sZW5ndGggPiBzdHIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihzZWFyY2gsIHN0YXJ0KSAhPT0gLTE7XG4gIH1cbn1cblxuY3JlYXRlRXJyb3JUeXBlKCdFUlJfSU5WQUxJRF9PUFRfVkFMVUUnLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuICdUaGUgdmFsdWUgXCInICsgdmFsdWUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwiJyArIG5hbWUgKyAnXCInXG59LCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfSU5WQUxJRF9BUkdfVFlQRScsIGZ1bmN0aW9uIChuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSB7XG4gIC8vIGRldGVybWluZXI6ICdtdXN0IGJlJyBvciAnbXVzdCBub3QgYmUnXG4gIGxldCBkZXRlcm1pbmVyO1xuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyAmJiBzdGFydHNXaXRoKGV4cGVjdGVkLCAnbm90ICcpKSB7XG4gICAgZGV0ZXJtaW5lciA9ICdtdXN0IG5vdCBiZSc7XG4gICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5yZXBsYWNlKC9ebm90IC8sICcnKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRlcm1pbmVyID0gJ211c3QgYmUnO1xuICB9XG5cbiAgbGV0IG1zZztcbiAgaWYgKGVuZHNXaXRoKG5hbWUsICcgYXJndW1lbnQnKSkge1xuICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICBtc2cgPSBgVGhlICR7bmFtZX0gJHtkZXRlcm1pbmVyfSAke29uZU9mKGV4cGVjdGVkLCAndHlwZScpfWA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdHlwZSA9IGluY2x1ZGVzKG5hbWUsICcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50JztcbiAgICBtc2cgPSBgVGhlIFwiJHtuYW1lfVwiICR7dHlwZX0gJHtkZXRlcm1pbmVyfSAke29uZU9mKGV4cGVjdGVkLCAndHlwZScpfWA7XG4gIH1cblxuICBtc2cgKz0gYC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YDtcbiAgcmV0dXJuIG1zZztcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YnLCAnc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQnLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gJ1RoZSAnICsgbmFtZSArICcgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCdcbn0pO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScsICdQcmVtYXR1cmUgY2xvc2UnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gJ0Nhbm5vdCBjYWxsICcgKyBuYW1lICsgJyBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkJztcbn0pO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfTVVMVElQTEVfQ0FMTEJBQ0snLCAnQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fQ0FOTk9UX1BJUEUnLCAnQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCcsICd3cml0ZSBhZnRlciBlbmQnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUycsICdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScsIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9VTktOT1dOX0VOQ09ESU5HJywgZnVuY3Rpb24gKGFyZykge1xuICByZXR1cm4gJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBhcmdcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQnLCAnc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMuY29kZXMgPSBjb2RlcztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfSU5WQUxJRF9PUFRfVkFMVUUgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2Rlcy5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7XG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsIG9wdGlvbnMsIGR1cGxleEtleSwgaXNEdXBsZXgpIHtcbiAgdmFyIGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpO1xuICBpZiAoaHdtICE9IG51bGwpIHtcbiAgICBpZiAoIShpc0Zpbml0ZShod20pICYmIE1hdGguZmxvb3IoaHdtKSA9PT0gaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICB2YXIgbmFtZSA9IGlzRHVwbGV4ID8gZHVwbGV4S2V5IDogJ2hpZ2hXYXRlck1hcmsnO1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX09QVF9WQUxVRShuYW1lLCBod20pO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihod20pO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZVxuICByZXR1cm4gc3RhdGUub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcms6IGdldEhpZ2hXYXRlck1hcmtcbn07IiwgImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsICJ0cnkge1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiB1dGlsLmluaGVyaXRzICE9PSAnZnVuY3Rpb24nKSB0aHJvdyAnJztcbiAgbW9kdWxlLmV4cG9ydHMgPSB1dGlsLmluaGVyaXRzO1xufSBjYXRjaCAoZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW5oZXJpdHNfYnJvd3Nlci5qcycpO1xufVxuIiwgIlxuLyoqXG4gKiBGb3IgTm9kZS5qcywgc2ltcGx5IHJlLWV4cG9ydCB0aGUgY29yZSBgdXRpbC5kZXByZWNhdGVgIGZ1bmN0aW9uLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgndXRpbCcpLmRlcHJlY2F0ZTtcbiIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qIDxyZXBsYWNlbWVudD4gKi9cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICAgIG9uQ29ya2VkRmluaXNoKF90aGlzLCBzdGF0ZSk7XG4gIH07XG59XG4vKiA8L3JlcGxhY2VtZW50PiAqL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZScpLFxuICBnZXRIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuZ2V0SGlnaFdhdGVyTWFyaztcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fREVTVFJPWUVELFxuICBFUlJfU1RSRUFNX05VTExfVkFMVUVTID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxcbiAgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxcbiAgRVJSX1VOS05PV05fRU5DT0RJTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORztcbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xucmVxdWlyZSgnaW5oZXJpdHMnKShXcml0YWJsZSwgU3RyZWFtKTtcbmZ1bmN0aW9uIG5vcCgpIHt9XG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0sXG4gIC8vIGUuZy4gb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUgdnMuIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlLCBldGMuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTtcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTtcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgdGhpcy5lbWl0Q2xvc2UgPSBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpXG4gIHRoaXMuYXV0b0Rlc3Ryb3kgPSAhIW9wdGlvbnMuYXV0b0Rlc3Ryb3k7XG5cbiAgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG4gIHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3QodGhpcyk7XG59XG5Xcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gd3JpdGFibGVTdGF0ZUJ1ZmZlckdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCk7XG4gICAgICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArICdpbnN0ZWFkLicsICdERVAwMDAzJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGU7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IGZ1bmN0aW9uIHJlYWxIYXNJbnN0YW5jZShvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpcztcbiAgfTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBXcml0YWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuICB2YXIgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgRHVwbGV4O1xuICBpZiAoIWlzRHVwbGV4ICYmICFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykpIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZXYgPSBvcHRpb25zLndyaXRldjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIGVycm9yT3JEZXN0cm95KHRoaXMsIG5ldyBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFKCkpO1xufTtcbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIGVyO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBFUlJfU1RSRUFNX05VTExfVkFMVUVTKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlciddLCBjaHVuayk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgX2lzVWludDhBcnJheShjaHVuayk7XG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcbiAgaWYgKHN0YXRlLmVuZGluZykgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrO1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcbiAgICBpZiAoIXN0YXRlLndyaXRpbmcgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgfVxufTtcbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBFUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTtcbiAgfVxufSk7XG5mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKSB7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiBzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHdyaXRldiwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICBzdGF0ZS53cml0ZWNiID0gY2I7XG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlO1xuICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJykpO2Vsc2UgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpO2Vsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpO1xuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuICBpZiAoc3luYykge1xuICAgIC8vIGRlZmVyIHRoZSBjYWxsYmFjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHlcbiAgICAvLyB0byBhdm9pZCBwaWxpbmcgdXAgdGhpbmdzIG9uIHRoZSBzdGFja1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYW5kIGl0IHdpbGwgYWx3YXlzIGhhcHBlblxuICAgIC8vIGFmdGVyIGVycm9yXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGNhbGxlciBleHBlY3QgdGhpcyB0byBoYXBwZW4gYmVmb3JlIGlmXG4gICAgLy8gaXQgaXMgYXN5bmNcbiAgICBjYihlcik7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGJ1dCBmaW5pc2ggbXVzdFxuICAgIC8vIGFsd2F5cyBmb2xsb3cgZXJyb3JcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCk7XG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG4gIGlmIChlcikgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7ZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKSB8fCBzdHJlYW0uZGVzdHJveWVkO1xuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIGFsbEJ1ZmZlcnMgPSB0cnVlO1xuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgYnVmZmVyW2NvdW50XSA9IGVudHJ5O1xuICAgICAgaWYgKCFlbnRyeS5pc0J1ZikgYWxsQnVmZmVycyA9IGZhbHNlO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgYnVmZmVyLmFsbEJ1ZmZlcnMgPSBhbGxCdWZmZXJzO1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS07XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIH1cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ193cml0ZSgpJykpO1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG4gIHJldHVybiB0aGlzO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0cmVhbS5fZmluYWwoZnVuY3Rpb24gKGVycikge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKTtcbiAgICB9XG4gICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkICYmICFzdGF0ZS5maW5hbENhbGxlZCkge1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLl9maW5hbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbEZpbmFsLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgICAgICAvLyBpZiB0aGUgcmVhZGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbFxuICAgICAgICB2YXIgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICAgICAgICBpZiAoIXJTdGF0ZSB8fCByU3RhdGUuYXV0b0Rlc3Ryb3kgJiYgclN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcHJvY2Vzcy5uZXh0VGljayhjYik7ZWxzZSBzdHJlYW0ub25jZSgnZmluaXNoJywgY2IpO1xuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgc3RyZWFtLndyaXRhYmxlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfVxuXG4gIC8vIHJldXNlIHRoZSBmcmVlIGNvcmtSZXEuXG4gIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5Xcml0YWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycik7XG59OyIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBEdXBsZXg7XG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShEdXBsZXgsIFJlYWRhYmxlKTtcbntcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICB2YXIgbWV0aG9kID0ga2V5c1t2XTtcbiAgICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF07XG4gIH1cbn1cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbiAgICB9XG4gIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVCdWZmZXInLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIElmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLCB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3MubmV4dFRpY2sob25FbmROVCwgdGhpcyk7XG59XG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7IiwgIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLCAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvZW5kLW9mLXN0cmVhbSB3aXRoXG4vLyBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvciwgTWF0aGlhcyBCdXVzIChAbWFmaW50b3NoKS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2Rlcy5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtcbmZ1bmN0aW9uIG9uY2UoY2FsbGJhY2spIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59XG5mdW5jdGlvbiBub29wKCkge31cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGVvcyhzdHJlYW0sIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVvcyhzdHJlYW0sIG51bGwsIG9wdHMpO1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICB2YXIgcmVhZGFibGUgPSBvcHRzLnJlYWRhYmxlIHx8IG9wdHMucmVhZGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS5yZWFkYWJsZTtcbiAgdmFyIHdyaXRhYmxlID0gb3B0cy53cml0YWJsZSB8fCBvcHRzLndyaXRhYmxlICE9PSBmYWxzZSAmJiBzdHJlYW0ud3JpdGFibGU7XG4gIHZhciBvbmxlZ2FjeWZpbmlzaCA9IGZ1bmN0aW9uIG9ubGVnYWN5ZmluaXNoKCkge1xuICAgIGlmICghc3RyZWFtLndyaXRhYmxlKSBvbmZpbmlzaCgpO1xuICB9O1xuICB2YXIgd3JpdGFibGVFbmRlZCA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ7XG4gIHZhciBvbmZpbmlzaCA9IGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIHdyaXRhYmxlID0gZmFsc2U7XG4gICAgd3JpdGFibGVFbmRlZCA9IHRydWU7XG4gICAgaWYgKCFyZWFkYWJsZSkgY2FsbGJhY2suY2FsbChzdHJlYW0pO1xuICB9O1xuICB2YXIgcmVhZGFibGVFbmRlZCA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZDtcbiAgdmFyIG9uZW5kID0gZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgcmVhZGFibGUgPSBmYWxzZTtcbiAgICByZWFkYWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXdyaXRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG4gIHZhciBvbmVycm9yID0gZnVuY3Rpb24gb25lcnJvcihlcnIpIHtcbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgfTtcbiAgdmFyIG9uY2xvc2UgPSBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIHZhciBlcnI7XG4gICAgaWYgKHJlYWRhYmxlICYmICFyZWFkYWJsZUVuZGVkKSB7XG4gICAgICBpZiAoIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSB8fCAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSBlcnIgPSBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKTtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgICB9XG4gICAgaWYgKHdyaXRhYmxlICYmICF3cml0YWJsZUVuZGVkKSB7XG4gICAgICBpZiAoIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSB8fCAhc3RyZWFtLl93cml0YWJsZVN0YXRlLmVuZGVkKSBlcnIgPSBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKTtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgICB9XG4gIH07XG4gIHZhciBvbnJlcXVlc3QgPSBmdW5jdGlvbiBvbnJlcXVlc3QoKSB7XG4gICAgc3RyZWFtLnJlcS5vbignZmluaXNoJywgb25maW5pc2gpO1xuICB9O1xuICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgb25yZXF1ZXN0KCk7ZWxzZSBzdHJlYW0ub24oJ3JlcXVlc3QnLCBvbnJlcXVlc3QpO1xuICB9IGVsc2UgaWYgKHdyaXRhYmxlICYmICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAvLyBsZWdhY3kgc3RyZWFtc1xuICAgIHN0cmVhbS5vbignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gIH1cbiAgc3RyZWFtLm9uKCdlbmQnLCBvbmVuZCk7XG4gIHN0cmVhbS5vbignZmluaXNoJywgb25maW5pc2gpO1xuICBpZiAob3B0cy5lcnJvciAhPT0gZmFsc2UpIHN0cmVhbS5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgc3RyZWFtLm9uKCdjbG9zZScsIG9uY2xvc2UpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY29tcGxldGUnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIG9uY2xvc2UpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigncmVxdWVzdCcsIG9ucmVxdWVzdCk7XG4gICAgaWYgKHN0cmVhbS5yZXEpIHN0cmVhbS5yZXEucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGVvczsiLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxudmFyIGZpbmlzaGVkID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJyk7XG52YXIga0xhc3RSZXNvbHZlID0gU3ltYm9sKCdsYXN0UmVzb2x2ZScpO1xudmFyIGtMYXN0UmVqZWN0ID0gU3ltYm9sKCdsYXN0UmVqZWN0Jyk7XG52YXIga0Vycm9yID0gU3ltYm9sKCdlcnJvcicpO1xudmFyIGtFbmRlZCA9IFN5bWJvbCgnZW5kZWQnKTtcbnZhciBrTGFzdFByb21pc2UgPSBTeW1ib2woJ2xhc3RQcm9taXNlJyk7XG52YXIga0hhbmRsZVByb21pc2UgPSBTeW1ib2woJ2hhbmRsZVByb21pc2UnKTtcbnZhciBrU3RyZWFtID0gU3ltYm9sKCdzdHJlYW0nKTtcbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJSZXN1bHQodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZG9uZTogZG9uZVxuICB9O1xufVxuZnVuY3Rpb24gcmVhZEFuZFJlc29sdmUoaXRlcikge1xuICB2YXIgcmVzb2x2ZSA9IGl0ZXJba0xhc3RSZXNvbHZlXTtcbiAgaWYgKHJlc29sdmUgIT09IG51bGwpIHtcbiAgICB2YXIgZGF0YSA9IGl0ZXJba1N0cmVhbV0ucmVhZCgpO1xuICAgIC8vIHdlIGRlZmVyIGlmIGRhdGEgaXMgbnVsbFxuICAgIC8vIHdlIGNhbiBiZSBleHBlY3RpbmcgZWl0aGVyICdlbmQnIG9yXG4gICAgLy8gJ2Vycm9yJ1xuICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICBpdGVyW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgaXRlcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgIGl0ZXJba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25SZWFkYWJsZShpdGVyKSB7XG4gIC8vIHdlIHdhaXQgZm9yIHRoZSBuZXh0IHRpY2ssIGJlY2F1c2UgaXQgbWlnaHRcbiAgLy8gZW1pdCBhbiBlcnJvciB3aXRoIHByb2Nlc3MubmV4dFRpY2tcbiAgcHJvY2Vzcy5uZXh0VGljayhyZWFkQW5kUmVzb2x2ZSwgaXRlcik7XG59XG5mdW5jdGlvbiB3cmFwRm9yTmV4dChsYXN0UHJvbWlzZSwgaXRlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxhc3RQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGl0ZXJba0VuZGVkXSkge1xuICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZXJba0hhbmRsZVByb21pc2VdKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfTtcbn1cbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uICgpIHt9KTtcbnZhciBSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoKF9PYmplY3Qkc2V0UHJvdG90eXBlTyA9IHtcbiAgZ2V0IHN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RyZWFtXTtcbiAgfSxcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8vIGlmIHdlIGhhdmUgZGV0ZWN0ZWQgYW4gZXJyb3IgaW4gdGhlIG1lYW53aGlsZVxuICAgIC8vIHJlamVjdCBzdHJhaWdodCBhd2F5XG4gICAgdmFyIGVycm9yID0gdGhpc1trRXJyb3JdO1xuICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHRoaXNba0VuZGVkXSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH1cbiAgICBpZiAodGhpc1trU3RyZWFtXS5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gZGVmZXIgdmlhIG5leHRUaWNrIGJlY2F1c2UgaWYgLmRlc3Ryb3koZXJyKSBpc1xuICAgICAgLy8gY2FsbGVkLCB0aGUgZXJyb3Igd2lsbCBiZSBlbWl0dGVkIHZpYSBuZXh0VGljaywgYW5kXG4gICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhlcmUgaXMgbm8gZXJyb3IgbGluZ2VyaW5nIGFyb3VuZFxuICAgICAgLy8gd2FpdGluZyB0byBiZSBlbWl0dGVkLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzW2tFcnJvcl0pIHtcbiAgICAgICAgICAgIHJlamVjdChfdGhpc1trRXJyb3JdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIG11bHRpcGxlIG5leHQoKSBjYWxsc1xuICAgIC8vIHdlIHdpbGwgd2FpdCBmb3IgdGhlIHByZXZpb3VzIFByb21pc2UgdG8gZmluaXNoXG4gICAgLy8gdGhpcyBsb2dpYyBpcyBvcHRpbWl6ZWQgdG8gc3VwcG9ydCBmb3IgYXdhaXQgbG9vcHMsXG4gICAgLy8gd2hlcmUgbmV4dCgpIGlzIG9ubHkgY2FsbGVkIG9uY2UgYXQgYSB0aW1lXG4gICAgdmFyIGxhc3RQcm9taXNlID0gdGhpc1trTGFzdFByb21pc2VdO1xuICAgIHZhciBwcm9taXNlO1xuICAgIGlmIChsYXN0UHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCB0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhc3QgcGF0aCBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0aGlzLnB1c2goKVxuICAgICAgLy8gd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBuZXh0KCkgcXVldWVcbiAgICAgIHZhciBkYXRhID0gdGhpc1trU3RyZWFtXS5yZWFkKCk7XG4gICAgICBpZiAoZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSh0aGlzW2tIYW5kbGVQcm9taXNlXSk7XG4gICAgfVxuICAgIHRoaXNba0xhc3RQcm9taXNlXSA9IHByb21pc2U7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cbn0sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFwicmV0dXJuXCIsIGZ1bmN0aW9uIF9yZXR1cm4oKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuICAvLyBkZXN0cm95KGVyciwgY2IpIGlzIGEgcHJpdmF0ZSBBUElcbiAgLy8gd2UgY2FuIGd1YXJhbnRlZSB3ZSBoYXZlIHRoYXQgaGVyZSwgYmVjYXVzZSB3ZSBjb250cm9sIHRoZVxuICAvLyBSZWFkYWJsZSBjbGFzcyB0aGlzIGlzIGF0dGFjaGVkIHRvXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgX3RoaXMyW2tTdHJlYW1dLmRlc3Ryb3kobnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH0pO1xuICB9KTtcbn0pLCBfT2JqZWN0JHNldFByb3RvdHlwZU8pLCBBc3luY0l0ZXJhdG9yUHJvdG90eXBlKTtcbnZhciBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSBmdW5jdGlvbiBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3Ioc3RyZWFtKSB7XG4gIHZhciBfT2JqZWN0JGNyZWF0ZTtcbiAgdmFyIGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIChfT2JqZWN0JGNyZWF0ZSA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtTdHJlYW0sIHtcbiAgICB2YWx1ZTogc3RyZWFtLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtMYXN0UmVzb2x2ZSwge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtMYXN0UmVqZWN0LCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0Vycm9yLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0VuZGVkLCB7XG4gICAgdmFsdWU6IHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtIYW5kbGVQcm9taXNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGRhdGEgPSBpdGVyYXRvcltrU3RyZWFtXS5yZWFkKCk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IHJlc29sdmU7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IHJlamVjdDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfT2JqZWN0JGNyZWF0ZSkpO1xuICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgZmluaXNoZWQoc3RyZWFtLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSAhPT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykge1xuICAgICAgdmFyIHJlamVjdCA9IGl0ZXJhdG9yW2tMYXN0UmVqZWN0XTtcbiAgICAgIC8vIHJlamVjdCBpZiB3ZSBhcmUgd2FpdGluZyBmb3IgZGF0YSBpbiB0aGUgUHJvbWlzZVxuICAgICAgLy8gcmV0dXJuZWQgYnkgbmV4dCgpIGFuZCBzdG9yZSB0aGUgZXJyb3JcbiAgICAgIGlmIChyZWplY3QgIT09IG51bGwpIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIGl0ZXJhdG9yW2tFcnJvcl0gPSBlcnI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByZXNvbHZlID0gaXRlcmF0b3Jba0xhc3RSZXNvbHZlXTtcbiAgICBpZiAocmVzb2x2ZSAhPT0gbnVsbCkge1xuICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yW2tFbmRlZF0gPSB0cnVlO1xuICB9KTtcbiAgc3RyZWFtLm9uKCdyZWFkYWJsZScsIG9uUmVhZGFibGUuYmluZChudWxsLCBpdGVyYXRvcikpO1xuICByZXR1cm4gaXRlcmF0b3I7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I7IiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbnZhciBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO1xuZnVuY3Rpb24gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpIHtcbiAgdmFyIGl0ZXJhdG9yO1xuICBpZiAoaXRlcmFibGUgJiYgdHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtlbHNlIGlmIChpdGVyYWJsZSAmJiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKSBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnaXRlcmFibGUnLCBbJ0l0ZXJhYmxlJ10sIGl0ZXJhYmxlKTtcbiAgdmFyIHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKF9vYmplY3RTcHJlYWQoe1xuICAgIG9iamVjdE1vZGU6IHRydWVcbiAgfSwgb3B0cykpO1xuICAvLyBSZWFkaW5nIGJvb2xlYW4gdG8gcHJvdGVjdCBhZ2FpbnN0IF9yZWFkXG4gIC8vIGJlaW5nIGNhbGxlZCBiZWZvcmUgbGFzdCBpdGVyYXRpb24gY29tcGxldGlvbi5cbiAgdmFyIHJlYWRpbmcgPSBmYWxzZTtcbiAgcmVhZGFibGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFyZWFkaW5nKSB7XG4gICAgICByZWFkaW5nID0gdHJ1ZTtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgcmV0dXJuIF9uZXh0Mi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIGZ1bmN0aW9uIF9uZXh0MigpIHtcbiAgICBfbmV4dDIgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIF95aWVsZCRpdGVyYXRvciRuZXh0ID0geWllbGQgaXRlcmF0b3IubmV4dCgpLFxuICAgICAgICAgIHZhbHVlID0gX3lpZWxkJGl0ZXJhdG9yJG5leHQudmFsdWUsXG4gICAgICAgICAgZG9uZSA9IF95aWVsZCRpdGVyYXRvciRuZXh0LmRvbmU7XG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcmVhZGFibGUucHVzaChudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZWFkYWJsZS5wdXNoKHlpZWxkIHZhbHVlKSkge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWFkYWJsZS5kZXN0cm95KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF9uZXh0Mi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiByZWFkYWJsZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZnJvbTtcbiIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBFRWxpc3RlbmVyQ291bnQoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZztcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gZGVidWcoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZScpLFxuICBnZXRIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuZ2V0SGlnaFdhdGVyTWFyaztcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7XG5cbi8vIExhenkgbG9hZGVkIHRvIGltcHJvdmUgdGhlIHN0YXJ0dXAgcGVyZm9ybWFuY2UuXG52YXIgU3RyaW5nRGVjb2RlcjtcbnZhciBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I7XG52YXIgZnJvbTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoUmVhZGFibGUsIFN0cmVhbSk7XG52YXIgZXJyb3JPckRlc3Ryb3kgPSBkZXN0cm95SW1wbC5lcnJvck9yRGVzdHJveTtcbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChBcnJheS5pc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5XG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIHRoaXMuZW1pdENsb3NlID0gb3B0aW9ucy5lbWl0Q2xvc2UgIT09IGZhbHNlO1xuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZW5kJyAoYW5kIHBvdGVudGlhbGx5ICdmaW5pc2gnKVxuICB0aGlzLmF1dG9EZXN0cm95ID0gISFvcHRpb25zLmF1dG9EZXN0cm95O1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBSZWFkYWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuICB2YXIgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgRHVwbGV4O1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcywgaXNEdXBsZXgpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICAgIH1cbiAgICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICB9XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIGRlYnVnKCdyZWFkYWJsZUFkZENodW5rJywgY2h1bmspO1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcjtcbiAgICBpZiAoIXNraXBDaHVua0NoZWNrKSBlciA9IGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspO1xuICAgIGlmIChlcikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZGRUb0Zyb250KSB7XG4gICAgICAgIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UKCkpO2Vsc2UgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRlZCkge1xuICAgICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhZW5jb2RpbmcpIHtcbiAgICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuICAgICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTtlbHNlIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgY2FuIHB1c2ggbW9yZSBkYXRhIGlmIHdlIGFyZSBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyay5cbiAgLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWUgbW9yZSBieXRlcy5cbiAgLy8gVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCwgc3VjaCBhcyB0aGUgcmVwbC5cbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGFkZFRvRnJvbnQpIHtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspO1xuICB9XG4gIHJldHVybiBlcjtcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59O1xuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdmFyIGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBkZWNvZGVyO1xuICAvLyBJZiBzZXRFbmNvZGluZyhudWxsKSwgZGVjb2Rlci5lbmNvZGluZyBlcXVhbHMgdXRmOFxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciBjdXJyZW50IGJ1ZmZlciB0byBjb252ZXJ0IGFscmVhZHkgc3RvcmVkIEJ1ZmZlcnM6XG4gIHZhciBwID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZDtcbiAgdmFyIGNvbnRlbnQgPSAnJztcbiAgd2hpbGUgKHAgIT09IG51bGwpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUocC5kYXRhKTtcbiAgICBwID0gcC5uZXh0O1xuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCk7XG4gIGlmIChjb250ZW50ICE9PSAnJykgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChjb250ZW50KTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gMUdCXG52YXIgTUFYX0hXTSA9IDB4NDAwMDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICAvLyBUT0RPKHJvbmFnKTogVGhyb3cgRVJSX1ZBTFVFX09VVF9PRl9SQU5HRS5cbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcbiAgaWYgKG4gIT09IDApIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUubmVlZFJlYWRhYmxlICYmICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG4gIHZhciByZXQ7XG4gIGlmIChuID4gMCkgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO2Vsc2UgcmV0ID0gbnVsbDtcbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICAgIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICB9XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO1xuICB9XG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG4gIHJldHVybiByZXQ7XG59O1xuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdvbkVvZkNodW5rJyk7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIGlmIChzdGF0ZS5zeW5jKSB7XG4gICAgLy8gaWYgd2UgYXJlIHN5bmMsIHdhaXQgdW50aWwgbmV4dCB0aWNrIHRvIGVtaXQgdGhlIGRhdGEuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIHJpc2sgZW1pdHRpbmcgZGF0YSBpbiB0aGUgZmxvdygpXG4gICAgLy8gdGhlIHJlYWRhYmxlIGNvZGUgdHJpZ2dlcnMgZHVyaW5nIGEgcmVhZCgpIGNhbGxcbiAgICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUubmVlZFJlYWRhYmxlLCBzdGF0ZS5lbWl0dGVkUmVhZGFibGUpO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZV8nLCBzdGF0ZS5kZXN0cm95ZWQsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICBpZiAoIXN0YXRlLmRlc3Ryb3llZCAmJiAoc3RhdGUubGVuZ3RoIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gVGhlIHN0cmVhbSBuZWVkcyBhbm90aGVyIHJlYWRhYmxlIGV2ZW50IGlmXG4gIC8vIDEuIEl0IGlzIG5vdCBmbG93aW5nLCBhcyB0aGUgZmxvdyBtZWNoYW5pc20gd2lsbCB0YWtlXG4gIC8vICAgIGNhcmUgb2YgaXQuXG4gIC8vIDIuIEl0IGlzIG5vdCBlbmRlZC5cbiAgLy8gMy4gSXQgaXMgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmssIHNvIHdlIGNhbiBzY2hlZHVsZVxuICAvLyAgICBhbm90aGVyIHJlYWRhYmxlIGxhdGVyLlxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgdGhlIHN0cmVhbSBoYXMgY2FsbGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIF9yZWFkKClcbiAgLy8gICBtZXRob2QsIGJ1dCB0aGV5IGFyZSBwcm9jZXNzaW5nIHRoZSBjYWxsIGFzeW5jaHJvbm91c2x5IGFuZCBoYXZlIF9ub3RfXG4gIC8vICAgY2FsbGVkIHB1c2goKSB3aXRoIG5ldyBkYXRhLiBJbiB0aGlzIGNhc2Ugd2Ugc2tpcCBwZXJmb3JtaW5nIG1vcmVcbiAgLy8gICByZWFkKClzLiBUaGUgZXhlY3V0aW9uIGVuZHMgaW4gdGhpcyBtZXRob2QgYWdhaW4gYWZ0ZXIgdGhlIF9yZWFkKCkgZW5kc1xuICAvLyAgIHVwIGNhbGxpbmcgcHVzaCgpIHdpdGggbW9yZSBkYXRhLlxuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSkge1xuICAgIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfcmVhZCgpJykpO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIHBpcGVPcHRzKSB7XG4gIHZhciBzcmMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZTtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KTtcbiAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuICByZXR1cm4gZGVzdDtcbn07XG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKSBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0ge1xuICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gIH07XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7XG4gICAgICBoYXNVbnBpcGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyB1cGRhdGUgcmVhZGFibGVMaXN0ZW5pbmcgc28gdGhhdCByZXN1bWUoKSBtYXkgYmUgYSBuby1vcFxuICAgIC8vIGEgZmV3IGxpbmVzIGRvd24uIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgb25jZSgncmVhZGFibGUnKS5cbiAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDA7XG5cbiAgICAvLyBUcnkgc3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpO1xuICAgICAgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsIGV2LCBmbik7XG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJyB8fCBldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lb25lIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHJlYWRhYmxlIGFuZCByZXNldCB0aGUgc3RhdGUuIEhvd2V2ZXIgdGhpcyBuZWVkcyB0byBoYXBwZW5cbiAgICAvLyBhZnRlciByZWFkYWJsZSBoYXMgYmVlbiBlbWl0dGVkIGJ1dCBiZWZvcmUgSS9PIChuZXh0VGljaykgdG9cbiAgICAvLyBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJywgZm4pIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAvLyByZXN1bWUgd2l0aGluIHRoZSBzYW1lIHRpY2sgd2lsbCBoYXZlIG5vXG4gICAgLy8gZWZmZWN0LlxuICAgIHByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsIHRoaXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuZnVuY3Rpb24gdXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcoc2VsZikge1xuICB2YXIgc3RhdGUgPSBzZWxmLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHNlbGYubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDA7XG4gIGlmIChzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgJiYgIXN0YXRlLnBhdXNlZCkge1xuICAgIC8vIGZsb3dpbmcgbmVlZHMgdG8gYmUgc2V0IHRvIHRydWUgbm93LCBvdGhlcndpc2VcbiAgICAvLyB0aGUgdXBjb21pbmcgcmVzdW1lIHdpbGwgbm90IGZsb3cuXG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG5cbiAgICAvLyBjcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZVxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIC8vIHdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKClcbiAgICBzdGF0ZS5mbG93aW5nID0gIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gIHJldHVybiB0aGlzO1xufTtcbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ3Jlc3VtZScsIHN0YXRlLnJlYWRpbmcpO1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ2NhbGwgcGF1c2UgZmxvd2luZz0laicsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7XG4gICAgZGVidWcoJ3BhdXNlJyk7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpO1xuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKTtcbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZW5kJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkgX3RoaXMucHVzaChjaHVuayk7XG4gICAgfVxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG4gICAgdmFyIHJldCA9IF90aGlzLnB1c2goY2h1bmspO1xuICAgIGlmICghcmV0KSB7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBmb3IgKHZhciBpIGluIHN0cmVhbSkge1xuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IGZ1bmN0aW9uIG1ldGhvZFdyYXAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXRob2RXcmFwUmV0dXJuRnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHRoaXMuZW1pdC5iaW5kKHRoaXMsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0aGlzO1xufTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3InKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih0aGlzKTtcbiAgfTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVGbG93aW5nJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldChzdGF0ZSkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBzdGF0ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZFxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuZmlyc3QoKTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG4sIHN0YXRlLmRlY29kZXIpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW5kUmVhZGFibGUnLCBzdGF0ZS5lbmRFbWl0dGVkKTtcbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsIHN0cmVhbSkge1xuICBkZWJ1ZygnZW5kUmVhZGFibGVOVCcsIHN0YXRlLmVuZEVtaXR0ZWQsIHN0YXRlLmxlbmd0aCk7XG5cbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAvLyBpZiB0aGUgd3JpdGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbFxuICAgICAgdmFyIHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgICAgIGlmICghd1N0YXRlIHx8IHdTdGF0ZS5hdXRvRGVzdHJveSAmJiB3U3RhdGUuZmluaXNoZWQpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLmZyb20gPSBmdW5jdGlvbiAoaXRlcmFibGUsIG9wdHMpIHtcbiAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcm9tID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb20oUmVhZGFibGUsIGl0ZXJhYmxlLCBvcHRzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLCAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLFxuICBFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzA7XG52YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShUcmFuc2Zvcm0sIER1cGxleCk7XG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlciwgZGF0YSkge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG4gIGlmIChjYiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKTtcbiAgfVxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuICBjYihlcik7XG4gIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJzLnJlYWRpbmcgPSBmYWxzZTtcbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSB7XG4gICAgYWZ0ZXJUcmFuc2Zvcm06IGFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksXG4gICAgbmVlZFRyYW5zZm9ybTogZmFsc2UsXG4gICAgdHJhbnNmb3JtaW5nOiBmYWxzZSxcbiAgICB3cml0ZWNiOiBudWxsLFxuICAgIHdyaXRlY2h1bms6IG51bGwsXG4gICAgd3JpdGVlbmNvZGluZzogbnVsbFxuICB9O1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoX3RoaXMsIGVyLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKHRoaXMsIG51bGwsIG51bGwpO1xuICB9XG59XG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfdHJhbnNmb3JtKCknKSk7XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLCB0cy53cml0ZWVuY29kaW5nLCB0cy5hZnRlclRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbWFyayB0aGF0IHdlIG5lZWQgYSB0cmFuc2Zvcm0sIHNvIHRoYXQgYW55IGRhdGEgdGhhdCBjb21lcyBpblxuICAgIC8vIHdpbGwgZ2V0IHByb2Nlc3NlZCwgbm93IHRoYXQgd2UndmUgYXNrZWQgZm9yIGl0LlxuICAgIHRzLm5lZWRUcmFuc2Zvcm0gPSB0cnVlO1xuICB9XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gVE9ETyhCcmlkZ2VBUik6IFdyaXRlIGEgdGVzdCBmb3IgdGhlc2UgdHdvIGVycm9yIGNhc2VzXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUubGVuZ3RoKSB0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wKCk7XG4gIGlmIChzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcoKTtcbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufSIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9wdW1wIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlb3M7XG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH07XG59XG52YXIgX3JlcXVpcmUkY29kZXMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2RlcyxcbiAgRVJSX01JU1NJTkdfQVJHUyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NSVNTSU5HX0FSR1MsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7XG5mdW5jdGlvbiBub29wKGVycikge1xuICAvLyBSZXRocm93IHRoZSBlcnJvciBpZiBpdCBleGlzdHMgdG8gYXZvaWQgc3dhbGxvd2luZyBpdFxuICBpZiAoZXJyKSB0aHJvdyBlcnI7XG59XG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICB2YXIgY2xvc2VkID0gZmFsc2U7XG4gIHN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChlb3MgPT09IHVuZGVmaW5lZCkgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJyk7XG4gIGVvcyhzdHJlYW0sIHtcbiAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICB3cml0YWJsZTogd3JpdGluZ1xuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjYWxsYmFjaygpO1xuICB9KTtcbiAgdmFyIGRlc3Ryb3llZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICBpZiAoZGVzdHJveWVkKSByZXR1cm47XG4gICAgZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIC8vIHJlcXVlc3QuZGVzdHJveSBqdXN0IGRvIC5lbmQgLSAuYWJvcnQgaXMgd2hhdCB3ZSB3YW50XG4gICAgaWYgKGlzUmVxdWVzdChzdHJlYW0pKSByZXR1cm4gc3RyZWFtLmFib3J0KCk7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgY2FsbGJhY2soZXJyIHx8IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgncGlwZScpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNhbGwoZm4pIHtcbiAgZm4oKTtcbn1cbmZ1bmN0aW9uIHBpcGUoZnJvbSwgdG8pIHtcbiAgcmV0dXJuIGZyb20ucGlwZSh0byk7XG59XG5mdW5jdGlvbiBwb3BDYWxsYmFjayhzdHJlYW1zKSB7XG4gIGlmICghc3RyZWFtcy5sZW5ndGgpIHJldHVybiBub29wO1xuICBpZiAodHlwZW9mIHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG5vb3A7XG4gIHJldHVybiBzdHJlYW1zLnBvcCgpO1xufVxuZnVuY3Rpb24gcGlwZWxpbmUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdHJlYW1zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHN0cmVhbXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgdmFyIGNhbGxiYWNrID0gcG9wQ2FsbGJhY2soc3RyZWFtcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHN0cmVhbXNbMF0pKSBzdHJlYW1zID0gc3RyZWFtc1swXTtcbiAgaWYgKHN0cmVhbXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJyk7XG4gIH1cbiAgdmFyIGVycm9yO1xuICB2YXIgZGVzdHJveXMgPSBzdHJlYW1zLm1hcChmdW5jdGlvbiAoc3RyZWFtLCBpKSB7XG4gICAgdmFyIHJlYWRpbmcgPSBpIDwgc3RyZWFtcy5sZW5ndGggLSAxO1xuICAgIHZhciB3cml0aW5nID0gaSA+IDA7XG4gICAgcmV0dXJuIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuICAgICAgaWYgKGVycikgZGVzdHJveXMuZm9yRWFjaChjYWxsKTtcbiAgICAgIGlmIChyZWFkaW5nKSByZXR1cm47XG4gICAgICBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHN0cmVhbXMucmVkdWNlKHBpcGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBwaXBlbGluZTsiLCAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuaWYgKHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnICYmIFN0cmVhbSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgT2JqZWN0LmFzc2lnbihtb2R1bGUuZXhwb3J0cywgU3RyZWFtKTtcbiAgbW9kdWxlLmV4cG9ydHMuU3RyZWFtID0gU3RyZWFtO1xufSBlbHNlIHtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbSB8fCBleHBvcnRzO1xuICBleHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbiAgZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG4gIGV4cG9ydHMuZmluaXNoZWQgPSByZXF1aXJlKCcuL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMnKTtcbiAgZXhwb3J0cy5waXBlbGluZSA9IHJlcXVpcmUoJy4vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBzeW1ib2wgPSBTeW1ib2wuZm9yKCdCdWZmZXJMaXN0JylcblxuZnVuY3Rpb24gQnVmZmVyTGlzdCAoYnVmKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXJMaXN0KSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyTGlzdChidWYpXG4gIH1cblxuICBCdWZmZXJMaXN0Ll9pbml0LmNhbGwodGhpcywgYnVmKVxufVxuXG5CdWZmZXJMaXN0Ll9pbml0ID0gZnVuY3Rpb24gX2luaXQgKGJ1Zikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pXG5cbiAgdGhpcy5fYnVmcyA9IFtdXG4gIHRoaXMubGVuZ3RoID0gMFxuXG4gIGlmIChidWYpIHtcbiAgICB0aGlzLmFwcGVuZChidWYpXG4gIH1cbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX25ldyA9IGZ1bmN0aW9uIF9uZXcgKGJ1Zikge1xuICByZXR1cm4gbmV3IEJ1ZmZlckxpc3QoYnVmKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fb2Zmc2V0ID0gZnVuY3Rpb24gX29mZnNldCAob2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICByZXR1cm4gWzAsIDBdXG4gIH1cblxuICBsZXQgdG90ID0gMFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IF90ID0gdG90ICsgdGhpcy5fYnVmc1tpXS5sZW5ndGhcbiAgICBpZiAob2Zmc2V0IDwgX3QgfHwgaSA9PT0gdGhpcy5fYnVmcy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gW2ksIG9mZnNldCAtIHRvdF1cbiAgICB9XG4gICAgdG90ID0gX3RcbiAgfVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fcmV2ZXJzZU9mZnNldCA9IGZ1bmN0aW9uIChibE9mZnNldCkge1xuICBjb25zdCBidWZmZXJJZCA9IGJsT2Zmc2V0WzBdXG4gIGxldCBvZmZzZXQgPSBibE9mZnNldFsxXVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVySWQ7IGkrKykge1xuICAgIG9mZnNldCArPSB0aGlzLl9idWZzW2ldLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG9mZnNldFxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGluZGV4KSB7XG4gIGlmIChpbmRleCA+IHRoaXMubGVuZ3RoIHx8IGluZGV4IDwgMCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0IG9mZnNldCA9IHRoaXMuX29mZnNldChpbmRleClcblxuICByZXR1cm4gdGhpcy5fYnVmc1tvZmZzZXRbMF1dW29mZnNldFsxXV1cbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnbnVtYmVyJyAmJiBzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHR5cGVvZiBlbmQgPT09ICdudW1iZXInICYmIGVuZCA8IDApIHtcbiAgICBlbmQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGlzLmNvcHkobnVsbCwgMCwgc3RhcnQsIGVuZClcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRzdCwgZHN0U3RhcnQsIHNyY1N0YXJ0LCBzcmNFbmQpIHtcbiAgaWYgKHR5cGVvZiBzcmNTdGFydCAhPT0gJ251bWJlcicgfHwgc3JjU3RhcnQgPCAwKSB7XG4gICAgc3JjU3RhcnQgPSAwXG4gIH1cblxuICBpZiAodHlwZW9mIHNyY0VuZCAhPT0gJ251bWJlcicgfHwgc3JjRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBzcmNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHNyY1N0YXJ0ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGRzdCB8fCBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIGlmIChzcmNFbmQgPD0gMCkge1xuICAgIHJldHVybiBkc3QgfHwgQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICBjb25zdCBjb3B5ID0gISFkc3RcbiAgY29uc3Qgb2ZmID0gdGhpcy5fb2Zmc2V0KHNyY1N0YXJ0KVxuICBjb25zdCBsZW4gPSBzcmNFbmQgLSBzcmNTdGFydFxuICBsZXQgYnl0ZXMgPSBsZW5cbiAgbGV0IGJ1Zm9mZiA9IChjb3B5ICYmIGRzdFN0YXJ0KSB8fCAwXG4gIGxldCBzdGFydCA9IG9mZlsxXVxuXG4gIC8vIGNvcHkvc2xpY2UgZXZlcnl0aGluZ1xuICBpZiAoc3JjU3RhcnQgPT09IDAgJiYgc3JjRW5kID09PSB0aGlzLmxlbmd0aCkge1xuICAgIGlmICghY29weSkge1xuICAgICAgLy8gc2xpY2UsIGJ1dCBmdWxsIGNvbmNhdCBpZiBtdWx0aXBsZSBidWZmZXJzXG4gICAgICByZXR1cm4gdGhpcy5fYnVmcy5sZW5ndGggPT09IDFcbiAgICAgICAgPyB0aGlzLl9idWZzWzBdXG4gICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzLl9idWZzLCB0aGlzLmxlbmd0aClcbiAgICB9XG5cbiAgICAvLyBjb3B5LCBuZWVkIHRvIGNvcHkgaW5kaXZpZHVhbCBidWZmZXJzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9idWZzW2ldLmNvcHkoZHN0LCBidWZvZmYpXG4gICAgICBidWZvZmYgKz0gdGhpcy5fYnVmc1tpXS5sZW5ndGhcbiAgICB9XG5cbiAgICByZXR1cm4gZHN0XG4gIH1cblxuICAvLyBlYXN5LCBjaGVhcCBjYXNlIHdoZXJlIGl0J3MgYSBzdWJzZXQgb2Ygb25lIG9mIHRoZSBidWZmZXJzXG4gIGlmIChieXRlcyA8PSB0aGlzLl9idWZzW29mZlswXV0ubGVuZ3RoIC0gc3RhcnQpIHtcbiAgICByZXR1cm4gY29weVxuICAgICAgPyB0aGlzLl9idWZzW29mZlswXV0uY29weShkc3QsIGRzdFN0YXJ0LCBzdGFydCwgc3RhcnQgKyBieXRlcylcbiAgICAgIDogdGhpcy5fYnVmc1tvZmZbMF1dLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKVxuICB9XG5cbiAgaWYgKCFjb3B5KSB7XG4gICAgLy8gYSBzbGljZSwgd2UgbmVlZCBzb21ldGhpbmcgdG8gY29weSBpbiB0b1xuICAgIGRzdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pXG4gIH1cblxuICBmb3IgKGxldCBpID0gb2ZmWzBdOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGwgPSB0aGlzLl9idWZzW2ldLmxlbmd0aCAtIHN0YXJ0XG5cbiAgICBpZiAoYnl0ZXMgPiBsKSB7XG4gICAgICB0aGlzLl9idWZzW2ldLmNvcHkoZHN0LCBidWZvZmYsIHN0YXJ0KVxuICAgICAgYnVmb2ZmICs9IGxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYnVmc1tpXS5jb3B5KGRzdCwgYnVmb2ZmLCBzdGFydCwgc3RhcnQgKyBieXRlcylcbiAgICAgIGJ1Zm9mZiArPSBsXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGJ5dGVzIC09IGxcblxuICAgIGlmIChzdGFydCkge1xuICAgICAgc3RhcnQgPSAwXG4gICAgfVxuICB9XG5cbiAgLy8gc2FmZWd1YXJkIHNvIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5XG4gIGlmIChkc3QubGVuZ3RoID4gYnVmb2ZmKSByZXR1cm4gZHN0LnNsaWNlKDAsIGJ1Zm9mZilcblxuICByZXR1cm4gZHN0XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnNoYWxsb3dTbGljZSA9IGZ1bmN0aW9uIHNoYWxsb3dTbGljZSAoc3RhcnQsIGVuZCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDBcbiAgZW5kID0gdHlwZW9mIGVuZCAhPT0gJ251bWJlcicgPyB0aGlzLmxlbmd0aCA6IGVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgcmV0dXJuIHRoaXMuX25ldygpXG4gIH1cblxuICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMuX29mZnNldChzdGFydClcbiAgY29uc3QgZW5kT2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KGVuZClcbiAgY29uc3QgYnVmZmVycyA9IHRoaXMuX2J1ZnMuc2xpY2Uoc3RhcnRPZmZzZXRbMF0sIGVuZE9mZnNldFswXSArIDEpXG5cbiAgaWYgKGVuZE9mZnNldFsxXSA9PT0gMCkge1xuICAgIGJ1ZmZlcnMucG9wKClcbiAgfSBlbHNlIHtcbiAgICBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0gPSBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0uc2xpY2UoMCwgZW5kT2Zmc2V0WzFdKVxuICB9XG5cbiAgaWYgKHN0YXJ0T2Zmc2V0WzFdICE9PSAwKSB7XG4gICAgYnVmZmVyc1swXSA9IGJ1ZmZlcnNbMF0uc2xpY2Uoc3RhcnRPZmZzZXRbMV0pXG4gIH1cblxuICByZXR1cm4gdGhpcy5fbmV3KGJ1ZmZlcnMpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLnRvU3RyaW5nKGVuY29kaW5nKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24gY29uc3VtZSAoYnl0ZXMpIHtcbiAgLy8gZmlyc3QsIG5vcm1hbGl6ZSB0aGUgYXJndW1lbnQsIGluIGFjY29yZGFuY2Ugd2l0aCBob3cgQnVmZmVyIGRvZXMgaXRcbiAgYnl0ZXMgPSBNYXRoLnRydW5jKGJ5dGVzKVxuICAvLyBkbyBub3RoaW5nIGlmIG5vdCBhIHBvc2l0aXZlIG51bWJlclxuICBpZiAoTnVtYmVyLmlzTmFOKGJ5dGVzKSB8fCBieXRlcyA8PSAwKSByZXR1cm4gdGhpc1xuXG4gIHdoaWxlICh0aGlzLl9idWZzLmxlbmd0aCkge1xuICAgIGlmIChieXRlcyA+PSB0aGlzLl9idWZzWzBdLmxlbmd0aCkge1xuICAgICAgYnl0ZXMgLT0gdGhpcy5fYnVmc1swXS5sZW5ndGhcbiAgICAgIHRoaXMubGVuZ3RoIC09IHRoaXMuX2J1ZnNbMF0ubGVuZ3RoXG4gICAgICB0aGlzLl9idWZzLnNoaWZ0KClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYnVmc1swXSA9IHRoaXMuX2J1ZnNbMF0uc2xpY2UoYnl0ZXMpXG4gICAgICB0aGlzLmxlbmd0aCAtPSBieXRlc1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5kdXBsaWNhdGUgPSBmdW5jdGlvbiBkdXBsaWNhdGUgKCkge1xuICBjb25zdCBjb3B5ID0gdGhpcy5fbmV3KClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3B5LmFwcGVuZCh0aGlzLl9idWZzW2ldKVxuICB9XG5cbiAgcmV0dXJuIGNvcHlcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kIChidWYpIHtcbiAgaWYgKGJ1ZiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGlmIChidWYuYnVmZmVyKSB7XG4gICAgLy8gYXBwZW5kIGEgdmlldyBvZiB0aGUgdW5kZXJseWluZyBBcnJheUJ1ZmZlclxuICAgIHRoaXMuX2FwcGVuZEJ1ZmZlcihCdWZmZXIuZnJvbShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYnVmKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFwcGVuZChidWZbaV0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHRoaXMuX2lzQnVmZmVyTGlzdChidWYpKSB7XG4gICAgLy8gdW53cmFwIGFyZ3VtZW50IGludG8gaW5kaXZpZHVhbCBCdWZmZXJMaXN0c1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFwcGVuZChidWYuX2J1ZnNbaV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNvZXJjZSBudW1iZXIgYXJndW1lbnRzIHRvIHN0cmluZ3MsIHNpbmNlIEJ1ZmZlcihudW1iZXIpIGRvZXNcbiAgICAvLyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uXG4gICAgaWYgKHR5cGVvZiBidWYgPT09ICdudW1iZXInKSB7XG4gICAgICBidWYgPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZEJ1ZmZlcihCdWZmZXIuZnJvbShidWYpKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX2FwcGVuZEJ1ZmZlciA9IGZ1bmN0aW9uIGFwcGVuZEJ1ZmZlciAoYnVmKSB7XG4gIHRoaXMuX2J1ZnMucHVzaChidWYpXG4gIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGhcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChzZWFyY2gsIG9mZnNldCwgZW5jb2RpbmcpIHtcbiAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIG9mZnNldCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShzZWFyY2gpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBCdWZmZXJMaXN0LCBvciBVaW50OEFycmF5LicpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlYXJjaCA9PT0gJ251bWJlcicpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShbc2VhcmNoXSlcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKHNlYXJjaCwgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAodGhpcy5faXNCdWZmZXJMaXN0KHNlYXJjaCkpIHtcbiAgICBzZWFyY2ggPSBzZWFyY2guc2xpY2UoKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2VhcmNoLmJ1ZmZlcikpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShzZWFyY2guYnVmZmVyLCBzZWFyY2guYnl0ZU9mZnNldCwgc2VhcmNoLmJ5dGVMZW5ndGgpXG4gIH0gZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oc2VhcmNoKVxuICB9XG5cbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCB8fCAwKVxuXG4gIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gMFxuICB9XG5cbiAgaWYgKG9mZnNldCA8IDApIHtcbiAgICBvZmZzZXQgPSB0aGlzLmxlbmd0aCArIG9mZnNldFxuICB9XG5cbiAgaWYgKG9mZnNldCA8IDApIHtcbiAgICBvZmZzZXQgPSAwXG4gIH1cblxuICBpZiAoc2VhcmNoLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvZmZzZXQgPiB0aGlzLmxlbmd0aCA/IHRoaXMubGVuZ3RoIDogb2Zmc2V0XG4gIH1cblxuICBjb25zdCBibE9mZnNldCA9IHRoaXMuX29mZnNldChvZmZzZXQpXG4gIGxldCBibEluZGV4ID0gYmxPZmZzZXRbMF0gLy8gaW5kZXggb2Ygd2hpY2ggaW50ZXJuYWwgYnVmZmVyIHdlJ3JlIHdvcmtpbmcgb25cbiAgbGV0IGJ1ZmZPZmZzZXQgPSBibE9mZnNldFsxXSAvLyBvZmZzZXQgb2YgdGhlIGludGVybmFsIGJ1ZmZlciB3ZSdyZSB3b3JraW5nIG9uXG5cbiAgLy8gc2NhbiBvdmVyIGVhY2ggYnVmZmVyXG4gIGZvciAoOyBibEluZGV4IDwgdGhpcy5fYnVmcy5sZW5ndGg7IGJsSW5kZXgrKykge1xuICAgIGNvbnN0IGJ1ZmYgPSB0aGlzLl9idWZzW2JsSW5kZXhdXG5cbiAgICB3aGlsZSAoYnVmZk9mZnNldCA8IGJ1ZmYubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhdmFpbGFibGVXaW5kb3cgPSBidWZmLmxlbmd0aCAtIGJ1ZmZPZmZzZXRcblxuICAgICAgaWYgKGF2YWlsYWJsZVdpbmRvdyA+PSBzZWFyY2gubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZVNlYXJjaFJlc3VsdCA9IGJ1ZmYuaW5kZXhPZihzZWFyY2gsIGJ1ZmZPZmZzZXQpXG5cbiAgICAgICAgaWYgKG5hdGl2ZVNlYXJjaFJlc3VsdCAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZU9mZnNldChbYmxJbmRleCwgbmF0aXZlU2VhcmNoUmVzdWx0XSlcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPZmZzZXQgPSBidWZmLmxlbmd0aCAtIHNlYXJjaC5sZW5ndGggKyAxIC8vIGVuZCBvZiBuYXRpdmUgc2VhcmNoIHdpbmRvd1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmV2T2Zmc2V0ID0gdGhpcy5fcmV2ZXJzZU9mZnNldChbYmxJbmRleCwgYnVmZk9mZnNldF0pXG5cbiAgICAgICAgaWYgKHRoaXMuX21hdGNoKHJldk9mZnNldCwgc2VhcmNoKSkge1xuICAgICAgICAgIHJldHVybiByZXZPZmZzZXRcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPZmZzZXQrK1xuICAgICAgfVxuICAgIH1cblxuICAgIGJ1ZmZPZmZzZXQgPSAwXG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX21hdGNoID0gZnVuY3Rpb24gKG9mZnNldCwgc2VhcmNoKSB7XG4gIGlmICh0aGlzLmxlbmd0aCAtIG9mZnNldCA8IHNlYXJjaC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAobGV0IHNlYXJjaE9mZnNldCA9IDA7IHNlYXJjaE9mZnNldCA8IHNlYXJjaC5sZW5ndGg7IHNlYXJjaE9mZnNldCsrKSB7XG4gICAgaWYgKHRoaXMuZ2V0KG9mZnNldCArIHNlYXJjaE9mZnNldCkgIT09IHNlYXJjaFtzZWFyY2hPZmZzZXRdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuOyhmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgcmVhZERvdWJsZUJFOiA4LFxuICAgIHJlYWREb3VibGVMRTogOCxcbiAgICByZWFkRmxvYXRCRTogNCxcbiAgICByZWFkRmxvYXRMRTogNCxcbiAgICByZWFkSW50MzJCRTogNCxcbiAgICByZWFkSW50MzJMRTogNCxcbiAgICByZWFkVUludDMyQkU6IDQsXG4gICAgcmVhZFVJbnQzMkxFOiA0LFxuICAgIHJlYWRJbnQxNkJFOiAyLFxuICAgIHJlYWRJbnQxNkxFOiAyLFxuICAgIHJlYWRVSW50MTZCRTogMixcbiAgICByZWFkVUludDE2TEU6IDIsXG4gICAgcmVhZEludDg6IDEsXG4gICAgcmVhZFVJbnQ4OiAxLFxuICAgIHJlYWRJbnRCRTogbnVsbCxcbiAgICByZWFkSW50TEU6IG51bGwsXG4gICAgcmVhZFVJbnRCRTogbnVsbCxcbiAgICByZWFkVUludExFOiBudWxsXG4gIH1cblxuICBmb3IgKGNvbnN0IG0gaW4gbWV0aG9kcykge1xuICAgIChmdW5jdGlvbiAobSkge1xuICAgICAgaWYgKG1ldGhvZHNbbV0gPT09IG51bGwpIHtcbiAgICAgICAgQnVmZmVyTGlzdC5wcm90b3R5cGVbbV0gPSBmdW5jdGlvbiAob2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBieXRlTGVuZ3RoKVttXSgwLCBieXRlTGVuZ3RoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBCdWZmZXJMaXN0LnByb3RvdHlwZVttXSA9IGZ1bmN0aW9uIChvZmZzZXQgPSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBtZXRob2RzW21dKVttXSgwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfShtKSlcbiAgfVxufSgpKVxuXG4vLyBVc2VkIGludGVybmFsbHkgYnkgdGhlIGNsYXNzIGFuZCBhbHNvIGFzIGFuIGluZGljYXRvciBvZiB0aGlzIG9iamVjdCBiZWluZ1xuLy8gYSBgQnVmZmVyTGlzdGAuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJMaXN0YCBpbiBhIGJyb3dzZXJcbi8vIGVudmlyb25tZW50IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50IGNvcGllcyBvZiB0aGVcbi8vIEJ1ZmZlckxpc3QgY2xhc3MgYW5kIHNvbWUgYEJ1ZmZlckxpc3RgcyBtaWdodCBiZSBgQnVmZmVyTGlzdGBzLlxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX2lzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIF9pc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0IHx8IEJ1ZmZlckxpc3QuaXNCdWZmZXJMaXN0KGIpXG59XG5cbkJ1ZmZlckxpc3QuaXNCdWZmZXJMaXN0ID0gZnVuY3Rpb24gaXNCdWZmZXJMaXN0IChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYltzeW1ib2xdXG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyTGlzdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEdXBsZXhTdHJlYW0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5EdXBsZXhcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuY29uc3QgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vQnVmZmVyTGlzdCcpXG5cbmZ1bmN0aW9uIEJ1ZmZlckxpc3RTdHJlYW0gKGNhbGxiYWNrKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrXG5cbiAgICBjb25zdCBwaXBlciA9IGZ1bmN0aW9uIHBpcGVyIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayhlcnIpXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbFxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5vbigncGlwZScsIGZ1bmN0aW9uIG9uUGlwZSAoc3JjKSB7XG4gICAgICBzcmMub24oJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcbiAgICB0aGlzLm9uKCd1bnBpcGUnLCBmdW5jdGlvbiBvblVucGlwZSAoc3JjKSB7XG4gICAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcblxuICAgIGNhbGxiYWNrID0gbnVsbFxuICB9XG5cbiAgQnVmZmVyTGlzdC5faW5pdC5jYWxsKHRoaXMsIGNhbGxiYWNrKVxuICBEdXBsZXhTdHJlYW0uY2FsbCh0aGlzKVxufVxuXG5pbmhlcml0cyhCdWZmZXJMaXN0U3RyZWFtLCBEdXBsZXhTdHJlYW0pXG5PYmplY3QuYXNzaWduKEJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLCBCdWZmZXJMaXN0LnByb3RvdHlwZSlcblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX25ldyA9IGZ1bmN0aW9uIF9uZXcgKGNhbGxiYWNrKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlIChidWYsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICB0aGlzLl9hcHBlbmRCdWZmZXIoYnVmKVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiBfcmVhZCAoc2l6ZSkge1xuICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMucHVzaChudWxsKVxuICB9XG5cbiAgc2l6ZSA9IE1hdGgubWluKHNpemUsIHRoaXMubGVuZ3RoKVxuICB0aGlzLnB1c2godGhpcy5zbGljZSgwLCBzaXplKSlcbiAgdGhpcy5jb25zdW1lKHNpemUpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZCAoY2h1bmspIHtcbiAgRHVwbGV4U3RyZWFtLnByb3RvdHlwZS5lbmQuY2FsbCh0aGlzLCBjaHVuaylcblxuICBpZiAodGhpcy5fY2FsbGJhY2spIHtcbiAgICB0aGlzLl9jYWxsYmFjayhudWxsLCB0aGlzLnNsaWNlKCkpXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiBfZGVzdHJveSAoZXJyLCBjYikge1xuICB0aGlzLl9idWZzLmxlbmd0aCA9IDBcbiAgdGhpcy5sZW5ndGggPSAwXG4gIGNiKGVycilcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2lzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIF9pc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtIHx8IGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0IHx8IEJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0KGIpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0ID0gQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3RcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0U3RyZWFtXG5tb2R1bGUuZXhwb3J0cy5CdWZmZXJMaXN0U3RyZWFtID0gQnVmZmVyTGlzdFN0cmVhbVxubW9kdWxlLmV4cG9ydHMuQnVmZmVyTGlzdCA9IEJ1ZmZlckxpc3RcbiIsICJpbXBvcnQgY2FjIGZyb20gJ2NhYyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCAqIGFzIGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xuXG5jb25zdCBjbGkgPSBjYWMoJ3d4dCcpO1xuY2xpLmhlbHAoKTtcbmNsaS52ZXJzaW9uKHZlcnNpb24pO1xuXG4vLyBERVZcbmNsaVxuICAuY29tbWFuZCgnW3Jvb3RdJywgJ3N0YXJ0IGRldiBzZXJ2ZXInKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuZGV2KTtcblxuLy8gQlVJTERcbmNsaVxuICAuY29tbWFuZCgnYnVpbGQgW3Jvb3RdJywgJ2J1aWxkIGZvciBwcm9kdWN0aW9uJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAuYWN0aW9uKGNvbW1hbmRzLmJ1aWxkKTtcblxuLy8gWklQXG5jbGlcbiAgLmNvbW1hbmQoJ3ppcCBbcm9vdF0nLCAnYnVpbGQgZm9yIHByb2R1Y3Rpb24gYW5kIHppcCBvdXRwdXQnKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuemlwKTtcblxuLy8gUFJFUEFSRVxuY2xpXG4gIC5jb21tYW5kKCdwcmVwYXJlIFtyb290XScsICdwcmVwYXJlJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLmFjdGlvbihjb21tYW5kcy5wcmVwYXJlKTtcblxuLy8gUFVCTElTSFxuY2xpLmNvbW1hbmQoJ3B1Ymxpc2ggW3Jvb3RdJywgJ3B1Ymxpc2ggdG8gc3RvcmVzJykuYWN0aW9uKGNvbW1hbmRzLnB1Ymxpc2gpO1xuXG4vLyBJTklUXG5jbGlcbiAgLmNvbW1hbmQoJ2luaXQgW2RpcmVjdG9yeV0nLCAnaW5pdGlhbGl6ZSBhIG5ldyBwcm9qZWN0JylcbiAgLm9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHRlbXBsYXRlPicsICd0ZW1wbGF0ZSB0byB1c2UnKVxuICAub3B0aW9uKCctLXBtIDxwYWNrYWdlTWFuYWdlcj4nLCAnd2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZScpXG4gIC5hY3Rpb24oY29tbWFuZHMuaW5pdCk7XG5cbmNsaS5wYXJzZSgpO1xuIiwgIntcbiAgXCJuYW1lXCI6IFwid3h0XCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcInZlcnNpb25cIjogXCIwLjMuMlwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiTmV4dCBnZW4gZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHdlYiBleHRlbnNpb25zXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0xOC4xNi4wXCIsXG4gICAgXCJwbnBtXCI6IFwiPj04XCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ha2xpbmtlcjEvd3h0XCJcbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJ2aXRlXCIsXG4gICAgXCJjaHJvbWVcIixcbiAgICBcIndlYlwiLFxuICAgIFwiZXh0ZW5zaW9uXCIsXG4gICAgXCJicm93c2VyXCIsXG4gICAgXCJidW5kbGVyXCIsXG4gICAgXCJmcmFtZXdvcmtcIlxuICBdLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiQWFyb24gS2xpbmtlclwiLFxuICAgIFwiZW1haWxcIjogXCJhYXJvbmtsaW5rZXIxK3d4dEBnbWFpbC5jb21cIlxuICB9LFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW5cIixcbiAgICBcImRpc3RcIlxuICBdLFxuICBcImJpblwiOiBcIi4vYmluL3d4dC5janNcIixcbiAgXCJtYWluXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICBcIm1vZHVsZVwiOiBcIi4vZGlzdC9pbmRleC5qc1wiLFxuICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgXCJleHBvcnRzXCI6IHtcbiAgICBcIi5cIjoge1xuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiXG4gICAgfSxcbiAgICBcIi4vY2xpZW50XCI6IHtcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiLFxuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiXG4gICAgfSxcbiAgICBcIi4vYnJvd3NlclwiOiB7XG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9icm93c2VyLmpzXCIsXG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2Jyb3dzZXIuZC50c1wiXG4gICAgfVxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwid3h0XCI6IFwidHN4IHNyYy9jbGkvaW5kZXgudHNcIixcbiAgICBcImJ1aWxkXCI6IFwidHN4IHNjcmlwdHMvYnVpbGQudHNcIixcbiAgICBcImZvcm1hdFwiOiBcInByZXR0aWVyIC0td3JpdGUgLlwiLFxuICAgIFwiZm9ybWF0OmNoZWNrXCI6IFwicHJldHRpZXIgLS13cml0ZSAuXCIsXG4gICAgXCJjb21waWxlXCI6IFwidHNjIC0tbm9FbWl0XCIsXG4gICAgXCJ0ZXN0XCI6IFwidml0ZXN0XCIsXG4gICAgXCJ0ZXN0OmNvdmVyYWdlXCI6IFwidml0ZXN0IHJ1biAtLWNvdmVyYWdlXCIsXG4gICAgXCJwcmVwYXJlXCI6IFwic2ltcGxlLWdpdC1ob29rc1wiLFxuICAgIFwicHJlcHVibGlzaFwiOiBcInBucG0gLXMgYnVpbGRcIixcbiAgICBcImRvY3M6ZGV2XCI6IFwidml0ZXByZXNzIGRldiBkb2NzXCIsXG4gICAgXCJkb2NzOmJ1aWxkXCI6IFwidml0ZXByZXNzIGJ1aWxkIGRvY3NcIixcbiAgICBcImRvY3M6cHJldmlld1wiOiBcInZpdGVwcmVzcyBwcmV2aWV3IGRvY3NcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvd2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMVwiLFxuICAgIFwiQHdlYmV4dC1jb3JlL2Zha2UtYnJvd3NlclwiOiBcIl4xLjIuMlwiLFxuICAgIFwiQHdlYmV4dC1jb3JlL21hdGNoLXBhdHRlcm5zXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJhc3luYy1tdXRleFwiOiBcIl4wLjQuMFwiLFxuICAgIFwiYzEyXCI6IFwiXjEuNC4yXCIsXG4gICAgXCJjYWNcIjogXCJeNi43LjE0XCIsXG4gICAgXCJjb25zb2xhXCI6IFwiXjMuMi4zXCIsXG4gICAgXCJmYXN0LWdsb2JcIjogXCJeMy4zLjFcIixcbiAgICBcImZpbGVzaXplXCI6IFwiXjEwLjAuOFwiLFxuICAgIFwiZnMtZXh0cmFcIjogXCJeMTEuMS4xXCIsXG4gICAgXCJnZXQtcG9ydFwiOiBcIl43LjAuMFwiLFxuICAgIFwiZ2lnZXRcIjogXCJeMS4xLjJcIixcbiAgICBcImppdGlcIjogXCJeMS4xOS4xXCIsXG4gICAgXCJqc29uNVwiOiBcIl4yLjIuM1wiLFxuICAgIFwibGlua2Vkb21cIjogXCJeMC4xNC4yNlwiLFxuICAgIFwibWluaW1hdGNoXCI6IFwiXjkuMC4zXCIsXG4gICAgXCJwaWNvY29sb3JzXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJwcm9tcHRzXCI6IFwiXjIuNC4yXCIsXG4gICAgXCJ1bmltcG9ydFwiOiBcIl4zLjEuMFwiLFxuICAgIFwidml0ZVwiOiBcIl40LjQuN1wiLFxuICAgIFwidml0ZS10c2NvbmZpZy1wYXRoc1wiOiBcIl40LjIuMFwiLFxuICAgIFwid2ViLWV4dFwiOiBcIl43LjYuMlwiLFxuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiLFxuICAgIFwiemlwLWRpclwiOiBcIl4yLjAuMFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBmYWtlci1qcy9mYWtlclwiOiBcIl44LjAuMlwiLFxuICAgIFwiQHR5cGVzL2ZzLWV4dHJhXCI6IFwiXjExLjAuMVwiLFxuICAgIFwiQHR5cGVzL2xvZGFzaC5tZXJnZVwiOiBcIl40LjYuN1wiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuNC41XCIsXG4gICAgXCJAdHlwZXMvcHJvbXB0c1wiOiBcIl4yLjQuNFwiLFxuICAgIFwiQHZpdGVzdC9jb3ZlcmFnZS12OFwiOiBcIl4wLjMyLjRcIixcbiAgICBcImV4ZWNhXCI6IFwiXjcuMi4wXCIsXG4gICAgXCJsb2Rhc2gubWVyZ2VcIjogXCJeNC42LjJcIixcbiAgICBcIm5wbS1ydW4tYWxsXCI6IFwiXjQuMS41XCIsXG4gICAgXCJvcmFcIjogXCJeNi4zLjFcIixcbiAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXG4gICAgXCJwcmV0dHktcXVpY2tcIjogXCJeMy4xLjNcIixcbiAgICBcInNpbXBsZS1naXQtaG9va3NcIjogXCJeMi45LjBcIixcbiAgICBcInRzLW1vcnBoXCI6IFwiXjE5LjAuMFwiLFxuICAgIFwidHN1cFwiOiBcIl43LjEuMFwiLFxuICAgIFwidHN4XCI6IFwiXjMuMTIuN1wiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjEuNlwiLFxuICAgIFwidml0ZXByZXNzXCI6IFwiMS4wLjAtYmV0YS41XCIsXG4gICAgXCJ2aXRlc3RcIjogXCJeMC4zMi40XCIsXG4gICAgXCJ2aXRlc3QtbW9jay1leHRlbmRlZFwiOiBcIl4xLjEuNFwiLFxuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDguNi4zXCIsXG4gIFwic2ltcGxlLWdpdC1ob29rc1wiOiB7XG4gICAgXCJwcmUtY29tbWl0XCI6IFwicG5wbSBwcmV0dHktcXVpY2sgLS1zdGFnZWRcIlxuICB9LFxuICBcInBucG1cIjoge1xuICAgIFwicGVlckRlcGVuZGVuY3lSdWxlc1wiOiB7XG4gICAgICBcImlnbm9yZU1pc3NpbmdcIjogW1xuICAgICAgICBcIkBhbGdvbGlhL2NsaWVudC1zZWFyY2hcIixcbiAgICAgICAgXCJzZWFyY2gtaW5zaWdodHNcIlxuICAgICAgXSxcbiAgICAgIFwiYWxsb3dBbnlcIjogW1xuICAgICAgICBcIm5vZGUtZmV0Y2hcIlxuICAgICAgXVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIENvbmZpZ0VudixcbiAgRXh0ZW5zaW9uUnVubmVyQ29uZmlnLFxuICBJbmxpbmVDb25maWcsXG4gIEludGVybmFsQ29uZmlnLFxuICBVc2VyQ29uZmlnLFxuICBVc2VyTWFuaWZlc3QsXG4gIFVzZXJNYW5pZmVzdEZuLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgcGF0aCwgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gJy4uL3ZpdGUtcGx1Z2lucyc7XG5pbXBvcnQgeyBjcmVhdGVGc0NhY2hlIH0gZnJvbSAnLi9jcmVhdGVGc0NhY2hlJztcbmltcG9ydCB7IGdldEdsb2JhbHMgfSBmcm9tICcuL2dsb2JhbHMnO1xuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gJ2MxMic7XG5cbi8qKlxuICogR2l2ZW4gYW4gaW5saW5lIGNvbmZpZywgZGlzY292ZXIgdGhlIGNvbmZpZyBmaWxlIGlmIG5lY2Vzc2FyeSwgbWVyZ2UgdGhlIHJlc3VsdHMsIHJlc29sdmUgYW55XG4gKiByZWxhdGl2ZSBwYXRocywgYW5kIGFwcGx5IGFueSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEludGVybmFsQ29uZmlnKFxuICBjb25maWc6IElubGluZUNvbmZpZyxcbiAgY29tbWFuZDogJ2J1aWxkJyB8ICdzZXJ2ZScsXG4pOiBQcm9taXNlPEludGVybmFsQ29uZmlnPiB7XG4gIC8vIEFwcGx5IGRlZmF1bHRzIHRvIGEgYmFzZSBjb25maWdcbiAgY29uc3Qgcm9vdCA9IGNvbmZpZy5yb290ID8gcGF0aC5yZXNvbHZlKGNvbmZpZy5yb290KSA6IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG1vZGUgPVxuICAgIGNvbmZpZy5tb2RlID8/IChjb21tYW5kID09PSAnYnVpbGQnID8gJ3Byb2R1Y3Rpb24nIDogJ2RldmVsb3BtZW50Jyk7XG4gIGNvbnN0IGJyb3dzZXIgPSBjb25maWcuYnJvd3NlciA/PyAnY2hyb21lJztcbiAgY29uc3QgbWFuaWZlc3RWZXJzaW9uID1cbiAgICBjb25maWcubWFuaWZlc3RWZXJzaW9uID8/IChicm93c2VyID09ICdmaXJlZm94JyA/IDIgOiAzKTtcbiAgY29uc3Qgb3V0QmFzZURpciA9IHBhdGgucmVzb2x2ZShyb290LCAnLm91dHB1dCcpO1xuICBjb25zdCBvdXREaXIgPSBwYXRoLnJlc29sdmUob3V0QmFzZURpciwgYCR7YnJvd3Nlcn0tbXYke21hbmlmZXN0VmVyc2lvbn1gKTtcbiAgY29uc3QgbG9nZ2VyID0gY29uZmlnLmxvZ2dlciA/PyBjb25zb2xhO1xuXG4gIGNvbnN0IGJhc2VDb25maWc6IEludGVybmFsQ29uZmlnTm9Vc2VyRGlycyA9IHtcbiAgICByb290LFxuICAgIG91dERpcixcbiAgICBvdXRCYXNlRGlyLFxuICAgIHN0b3JlSWRzOiBjb25maWcuc3RvcmVJZHMgPz8ge30sXG4gICAgYnJvd3NlcixcbiAgICBtYW5pZmVzdFZlcnNpb24sXG4gICAgbW9kZSxcbiAgICBjb21tYW5kLFxuICAgIGxvZ2dlcixcbiAgICB2aXRlOiBjb25maWcudml0ZSA/PyB7fSxcbiAgICBpbXBvcnRzOiBjb25maWcuaW1wb3J0cyA/PyB7fSxcbiAgICBydW5uZXJDb25maWc6IGF3YWl0IGxvYWRDb25maWc8RXh0ZW5zaW9uUnVubmVyQ29uZmlnPih7XG4gICAgICBuYW1lOiAnd2ViLWV4dCcsXG4gICAgICBjd2Q6IHJvb3QsXG4gICAgICBnbG9iYWxSYzogdHJ1ZSxcbiAgICAgIHJjRmlsZTogJy53ZWJleHRyYycsXG4gICAgICBvdmVycmlkZXM6IGNvbmZpZy5ydW5uZXIsXG4gICAgfSksXG4gIH07XG5cbiAgLy8gTG9hZCB1c2VyIGNvbmZpZyBmcm9tIGZpbGVcbiAgbGV0IHVzZXJDb25maWc6IFVzZXJDb25maWcgPSB7XG4gICAgbW9kZSxcbiAgfTtcbiAgaWYgKGNvbmZpZy5jb25maWdGaWxlICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRDb25maWc8VXNlckNvbmZpZz4oe1xuICAgICAgbmFtZTogJ3d4dCcsXG4gICAgICBjd2Q6IHJvb3QsXG4gICAgICByY0ZpbGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHVzZXJDb25maWcgPSBsb2FkZWQuY29uZmlnID8/IHt9O1xuICB9XG5cbiAgLy8gTWVyZ2UgaW5saW5lIGFuZCB1c2VyIGNvbmZpZ3NcbiAgY29uc3QgbWVyZ2VkID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICBiYXNlQ29uZmlnLFxuICAgIHVzZXJDb25maWcsXG4gICkgYXMgSW50ZXJuYWxDb25maWdOb1VzZXJEaXJzO1xuXG4gIC8vIEFwcGx5IHVzZXIgY29uZmlnIGFuZCBjcmVhdGUgZmluYWwgY29uZmlnXG4gIGNvbnN0IHNyY0RpciA9IHVzZXJDb25maWcuc3JjRGlyID8gcmVzb2x2ZShyb290LCB1c2VyQ29uZmlnLnNyY0RpcikgOiByb290O1xuICBjb25zdCBlbnRyeXBvaW50c0RpciA9IHJlc29sdmUoXG4gICAgc3JjRGlyLFxuICAgIHVzZXJDb25maWcuZW50cnlwb2ludHNEaXIgPz8gJ2VudHJ5cG9pbnRzJyxcbiAgKTtcbiAgY29uc3QgcHVibGljRGlyID0gcmVzb2x2ZShyb290LCB1c2VyQ29uZmlnLnB1YmxpY0RpciA/PyAncHVibGljJyk7XG4gIGNvbnN0IHd4dERpciA9IHJlc29sdmUoc3JjRGlyLCAnLnd4dCcpO1xuICBjb25zdCB0eXBlc0RpciA9IHJlc29sdmUod3h0RGlyLCAndHlwZXMnKTtcblxuICAvLyBNZXJnZSBtYW5pZmVzdCBzb3VyY2VzXG4gIGNvbnN0IGVudjogQ29uZmlnRW52ID0geyBtb2RlLCBicm93c2VyLCBtYW5pZmVzdFZlcnNpb24sIGNvbW1hbmQgfTtcbiAgY29uc3QgdXNlck1hbmlmZXN0ID0gYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgdXNlckNvbmZpZy5tYW5pZmVzdCk7XG4gIGNvbnN0IGlubGluZU1hbmlmZXN0ID0gYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgY29uZmlnLm1hbmlmZXN0KTtcbiAgY29uc3QgbWFuaWZlc3QgPSB2aXRlLm1lcmdlQ29uZmlnKHVzZXJNYW5pZmVzdCwgaW5saW5lTWFuaWZlc3QpO1xuXG4gIGNvbnN0IGZpbmFsQ29uZmlnOiBJbnRlcm5hbENvbmZpZyA9IHtcbiAgICAuLi5tZXJnZWQsXG4gICAgc3JjRGlyLFxuICAgIGVudHJ5cG9pbnRzRGlyLFxuICAgIHB1YmxpY0RpcixcbiAgICB3eHREaXI6IHd4dERpcixcbiAgICB0eXBlc0RpcixcbiAgICBmc0NhY2hlOiBjcmVhdGVGc0NhY2hlKHd4dERpciksXG4gICAgbWFuaWZlc3QsXG4gICAgemlwOiB7XG4gICAgICBzb3VyY2VzVGVtcGxhdGU6ICd7e25hbWV9fS17e3ZlcnNpb259fS1zb3VyY2VzLnppcCcsXG4gICAgICBhcnRpZmFjdFRlbXBsYXRlOiAne3tuYW1lfX0te3t2ZXJzaW9ufX0te3ticm93c2VyfX0uemlwJyxcbiAgICAgIHNvdXJjZXNSb290OiByb290LFxuICAgICAgLi4udXNlckNvbmZpZy56aXAsXG4gICAgICAuLi5jb25maWcuemlwLFxuICAgICAgaWdub3JlZFNvdXJjZXM6IFtcbiAgICAgICAgJyoqL25vZGVfbW9kdWxlcycsXG4gICAgICAgIC8vIFdYVCBmaWxlc1xuICAgICAgICAnKiovd2ViLWV4dC5jb25maWcudHMnLFxuICAgICAgICAvLyBIaWRkZW4gZmlsZXNcbiAgICAgICAgJyoqLy4qJyxcbiAgICAgICAgLy8gVGVzdHNcbiAgICAgICAgJyoqL19fdGVzdHNfXy8qKicsXG4gICAgICAgICcqKi8qLisodGVzdHxzcGVjKS4/KGN8bSkrKGp8dClzPyh4KScsXG4gICAgICAgIC8vIFVzZXIgY29uZmlnXG4gICAgICAgIC4uLih1c2VyQ29uZmlnLnppcD8uaWdub3JlZFNvdXJjZXMgPz8gW10pLFxuICAgICAgICAuLi4oY29uZmlnLnppcD8uaWdub3JlZFNvdXJjZXMgPz8gW10pLFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIEN1c3RvbWl6ZSB0aGUgZGVmYXVsdCB2aXRlIGNvbmZpZ1xuICBmaW5hbENvbmZpZy52aXRlLnJvb3QgPSByb290O1xuICBmaW5hbENvbmZpZy52aXRlLmNvbmZpZ0ZpbGUgPSBmYWxzZTtcbiAgZmluYWxDb25maWcudml0ZS5sb2dMZXZlbCA9ICd3YXJuJztcblxuICBmaW5hbENvbmZpZy52aXRlLmJ1aWxkID8/PSB7fTtcbiAgZmluYWxDb25maWcudml0ZS5idWlsZC5vdXREaXIgPSBvdXREaXI7XG4gIGZpbmFsQ29uZmlnLnZpdGUuYnVpbGQuZW1wdHlPdXREaXIgPSBmYWxzZTtcblxuICBmaW5hbENvbmZpZy52aXRlLnBsdWdpbnMgPz89IFtdO1xuICBmaW5hbENvbmZpZy52aXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmRvd25sb2FkKGZpbmFsQ29uZmlnKSk7XG4gIGZpbmFsQ29uZmlnLnZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuZGV2SHRtbFByZXJlbmRlcihmaW5hbENvbmZpZykpO1xuICBmaW5hbENvbmZpZy52aXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLnVuaW1wb3J0KGZpbmFsQ29uZmlnKSk7XG4gIGZpbmFsQ29uZmlnLnZpdGUucGx1Z2lucy5wdXNoKFxuICAgIHBsdWdpbnMudmlydHVhbEVudHJ5cG9pbignYmFja2dyb3VuZCcsIGZpbmFsQ29uZmlnKSxcbiAgKTtcbiAgZmluYWxDb25maWcudml0ZS5wbHVnaW5zLnB1c2goXG4gICAgcGx1Z2lucy52aXJ0dWFsRW50cnlwb2luKCdjb250ZW50LXNjcmlwdCcsIGZpbmFsQ29uZmlnKSxcbiAgKTtcbiAgZmluYWxDb25maWcudml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5kZXZTZXJ2ZXJHbG9iYWxzKGZpbmFsQ29uZmlnKSk7XG4gIGZpbmFsQ29uZmlnLnZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMudHNjb25maWdQYXRocyhmaW5hbENvbmZpZykpO1xuICBmaW5hbENvbmZpZy52aXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLm5vb3BCYWNrZ3JvdW5kKCkpO1xuXG4gIGZpbmFsQ29uZmlnLnZpdGUuZGVmaW5lID8/PSB7fTtcbiAgZ2V0R2xvYmFscyhmaW5hbENvbmZpZykuZm9yRWFjaCgoZ2xvYmFsKSA9PiB7XG4gICAgZmluYWxDb25maWcudml0ZS5kZWZpbmUhW2dsb2JhbC5uYW1lXSA9IEpTT04uc3RyaW5naWZ5KGdsb2JhbC52YWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBmaW5hbENvbmZpZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgZGVmaW5pbmcgYSBiYXNlIGNvbmZpZywgc2luY2UgdXNlci1jb25maWd1cmFibGUgZGlyZWN0b3JpZXMgbXVzdCBiZSBzZXQgYWZ0ZXJcbiAqIHJlYWRpbmcgaW4gdGhlIHVzZXIgY29uZmlnLlxuICovXG50eXBlIEludGVybmFsQ29uZmlnTm9Vc2VyRGlycyA9IE9taXQ8XG4gIEludGVybmFsQ29uZmlnLFxuICB8ICdzcmNEaXInXG4gIHwgJ3B1YmxpY0RpcidcbiAgfCAnZW50cnlwb2ludHNEaXInXG4gIHwgJ3d4dERpcidcbiAgfCAndHlwZXNEaXInXG4gIHwgJ2ZzQ2FjaGUnXG4gIHwgJ21hbmlmZXN0J1xuICB8ICd6aXAnXG4+O1xuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlTWFuaWZlc3RDb25maWcoXG4gIGVudjogQ29uZmlnRW52LFxuICBtYW5pZmVzdDogVXNlck1hbmlmZXN0IHwgUHJvbWlzZTxVc2VyTWFuaWZlc3Q+IHwgVXNlck1hbmlmZXN0Rm4gfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPFVzZXJNYW5pZmVzdD4ge1xuICByZXR1cm4gYXdhaXQgKHR5cGVvZiBtYW5pZmVzdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbWFuaWZlc3QoZW52KVxuICAgIDogbWFuaWZlc3QgPz8ge30pO1xufVxuIiwgImltcG9ydCB7IEVudHJ5cG9pbnQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgcGF0aCwgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRyeXBvaW50TmFtZShcbiAgZW50cnlwb2ludHNEaXI6IHN0cmluZyxcbiAgaW5wdXRQYXRoOiBzdHJpbmcsXG4gIC8vIHR5cGU6IEVudHJ5cG9pbnRbJ3R5cGUnXSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZW50cnlwb2ludHNEaXIsIGlucHV0UGF0aCk7XG4gIC8vIEdyYWIgdGhlIHN0cmluZyB1cCB0byB0aGUgZmlyc3QgLiBvciAvIG9yIFxcXFxcbiAgY29uc3QgbmFtZSA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvW1xcLlxcL1xcXFxdLywgMilbMF07XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRyeXBvaW50T3V0cHV0RmlsZShcbiAgZW50cnlwb2ludDogRW50cnlwb2ludCxcbiAgZXh0OiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZShlbnRyeXBvaW50Lm91dHB1dERpciwgYCR7ZW50cnlwb2ludC5uYW1lfSR7ZXh0fWApO1xufVxuXG4vKipcbiAqIFJldHVybidzIHRoZSBlbnRyeXBvaW50J3Mgb3V0cHV0IHBhdGggcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuIFVzZWQgZm9yIHBhdGhzIGluIHRoZVxuICogbWFuaWZlc3QgYW5kIHJvbGx1cCdzIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBvdXREaXI6IHN0cmluZyxcbiAgZXh0OiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gbm9ybWFsaXplUGF0aChcbiAgICByZWxhdGl2ZShvdXREaXIsIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKGVudHJ5cG9pbnQsIGV4dCkpLFxuICApO1xufVxuIiwgImltcG9ydCBub2RlUGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcblxuLyoqXG4gKiBDb252ZXJ0cyBzeXN0ZW0gcGF0aHMgdG8gbm9ybWFsaXplZCBidW5kbGVyIHBhdGguIE9uIHdpbmRvd3MgYW5kIHVuaXgsIHRoaXMgcmV0dXJucyBwYXRocyB3aXRoIC9cbiAqIGluc3RlYWQgb2YgXFwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2aXRlLm5vcm1hbGl6ZVBhdGgocGF0aCk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBub3JtYWxpemVkIHBhdGgsIGNvbnZlcnQgaXQgdG8gdGhlIHN5c3RlbSBwYXRoIHN0eWxlLiBPbiBXaW5kb3dzLCBzd2l0Y2ggdG8gXFwsIG90aGVyd2lzZSB1c2UgLy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbm9kZVBhdGgubm9ybWFsaXplKHBhdGgpO1xufVxuXG5leHBvcnQgY29uc3QgQ1NTX0VYVEVOU0lPTlMgPSBbJ2NzcycsICdzY3NzJywgJ3Nhc3MnLCAnbGVzcycsICdzdHlsJywgJ3N0eWx1cyddO1xuXG4vLyAubW9kdWxlLmNzcyBmaWxlcyBhcmUgbm90IHN1cHBvcnRlZCBiZWNhdXNlIHRoZXNlIGFyZSBnbG9iYWwgQ1NTIGZpbGVzLCBzbyB1c2luZyBDU1MgbW9kdWxlcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuXG5leHBvcnQgY29uc3QgQ1NTX0VYVEVOU0lPTlNfUEFUVEVSTiA9IGArKCR7Q1NTX0VYVEVOU0lPTlMuam9pbignfCcpfSlgO1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnROYW1lIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgcGFyc2VIVE1MIH0gZnJvbSAnbGlua2Vkb20nO1xuaW1wb3J0IHsgZGlybmFtZSwgaXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBQcmUtcmVuZGVycyB0aGUgSFRNTCBlbnRyeXBvaW50cyB3aGVuIGJ1aWxkaW5nIHRoZSBleHRlbnNpb24gdG8gY29ubmVjdCB0byB0aGUgZGV2IHNlcnZlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldkh0bWxQcmVyZW5kZXIoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBhcHBseTogJ2J1aWxkJyxcbiAgICBuYW1lOiAnd3h0OmRldi1odG1sLXByZXJlbmRlcicsXG4gICAgY29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb2x2ZToge1xuICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAnQHd4dC9yZWxvYWQtaHRtbCc6IHJlc29sdmUoXG4gICAgICAgICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAgICAgICAnbm9kZV9tb2R1bGVzL3d4dC9kaXN0L3ZpcnR1YWwtbW9kdWxlcy9yZWxvYWQtaHRtbC5qcycsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgYXN5bmMgdHJhbnNmb3JtKGh0bWwsIGlkKSB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBjb25maWcuc2VydmVyO1xuICAgICAgaWYgKGNvbmZpZy5jb21tYW5kICE9PSAnc2VydmUnIHx8IHNlcnZlciA9PSBudWxsIHx8ICFpZC5lbmRzV2l0aCgnLmh0bWwnKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFVybCA9IGAke3NlcnZlci5vcmlnaW59JHtpZH1gO1xuICAgICAgY29uc3QgbmFtZSA9IGdldEVudHJ5cG9pbnROYW1lKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgaWQpO1xuICAgICAgY29uc3QgdXJsID0gYCR7c2VydmVyLm9yaWdpbn0vJHtuYW1lfS5odG1sYDtcbiAgICAgIGNvbnN0IHNlcnZlckh0bWwgPSBhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKFxuICAgICAgICB1cmwsXG4gICAgICAgIGh0bWwsXG4gICAgICAgIG9yaWdpbmFsVXJsLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHBhcnNlSFRNTChzZXJ2ZXJIdG1sKTtcblxuICAgICAgY29uc3QgcG9pbnRUb0RldlNlcnZlciA9IChxdWVyeVNlbGVjdG9yOiBzdHJpbmcsIGF0dHI6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5U2VsZWN0b3IpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBzcmMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgICBpZiAoIXNyYykgcmV0dXJuO1xuXG4gICAgICAgICAgaWYgKGlzQWJzb2x1dGUoc3JjKSkge1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgc2VydmVyLm9yaWdpbiArIHNyYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzcmMuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBjb25zdCBhYnMgPSByZXNvbHZlKGRpcm5hbWUoaWQpLCBzcmMpO1xuICAgICAgICAgICAgY29uc3QgcGF0aG5hbWUgPSByZWxhdGl2ZShjb25maWcucm9vdCwgYWJzKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHIsIGAke3NlcnZlci5vcmlnaW59LyR7cGF0aG5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBwb2ludFRvRGV2U2VydmVyKCdzY3JpcHRbdHlwZT1tb2R1bGVdJywgJ3NyYycpO1xuICAgICAgcG9pbnRUb0RldlNlcnZlcignbGlua1tyZWw9c3R5bGVzaGVldF0nLCAnaHJlZicpO1xuXG4gICAgICAvLyBBZGQgYSBzY3JpcHQgdG8gYWRkIHBhZ2UgcmVsb2FkaW5nXG4gICAgICBjb25zdCByZWxvYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgcmVsb2FkZXIuc3JjID0gJ0B3eHQvcmVsb2FkLWh0bWwnO1xuICAgICAgcmVsb2FkZXIudHlwZSA9ICdtb2R1bGUnO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyZWxvYWRlcik7XG5cbiAgICAgIGNvbnN0IG5ld0h0bWwgPSBkb2N1bWVudC50b1N0cmluZygpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnVHJhbnNmb3JtZWQgJyArIGlkKTtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ09sZCBIVE1MOlxcbicgKyBodG1sKTtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ05ldyBIVE1MOlxcbicgKyBuZXdIdG1sKTtcbiAgICAgIHJldHVybiBuZXdIdG1sO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBEZWZpbmVzIGdsb2JhbCBjb25zdGFudHMgYWJvdXQgdGhlIGRldiBzZXJ2ZXIuIEhlbHBzIHNjcmlwdHMgY29ubmVjdCB0byB0aGUgc2VydmVyJ3Mgd2ViIHNvY2tldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldlNlcnZlckdsb2JhbHMoaW50ZXJuYWxDb25maWc6IEludGVybmFsQ29uZmlnKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmRldi1zZXJ2ZXItZ2xvYmFscycsXG4gICAgY29uZmlnKCkge1xuICAgICAgaWYgKGludGVybmFsQ29uZmlnLnNlcnZlciA9PSBudWxsIHx8IGludGVybmFsQ29uZmlnLmNvbW1hbmQgPT0gJ2J1aWxkJylcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICBfX0RFVl9TRVJWRVJfUFJPVE9DT0xfXzogSlNPTi5zdHJpbmdpZnkoJ3dzOicpLFxuICAgICAgICAgIF9fREVWX1NFUlZFUl9IT1NUTkFNRV9fOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGludGVybmFsQ29uZmlnLnNlcnZlci5ob3N0bmFtZSxcbiAgICAgICAgICApLFxuICAgICAgICAgIF9fREVWX1NFUlZFUl9QT1JUX186IEpTT04uc3RyaW5naWZ5KGludGVybmFsQ29uZmlnLnNlcnZlci5wb3J0KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgZG5zIGZyb20gJ25vZGU6ZG5zJztcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSAnLi9wcm9taXNlcyc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZnVuY3Rpb24gaXNPZmZsaW5lKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBpc09mZmxpbmUgPSBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzKSA9PiB7XG4gICAgZG5zLnJlc29sdmUoJ2dvb2dsZS5jb20nLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyID09IG51bGwpIHtcbiAgICAgICAgcmVzKGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcyh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiB3aXRoVGltZW91dChpc09mZmxpbmUsIDFlMykuY2F0Y2goKCkgPT4gdHJ1ZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc09ubGluZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgb2ZmbGluZSA9IGF3YWl0IGlzT2ZmbGluZSgpO1xuICByZXR1cm4gIW9mZmxpbmU7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIFVSTCB3aXRoIGEgc2ltcGxlIEdFVCByZXF1ZXN0LiBHcmFicyBpdCBmcm9tIGNhY2hlIGlmIGl0IGRvZXNuJ3QgZXhpc3QsIG9yIHRocm93cyBhblxuICogZXJyb3IgaWYgaXQgY2FuJ3QgYmUgcmVzb2x2ZWQgdmlhIHRoZSBuZXR3b3JrIG9yIGNhY2hlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYWNoZWQoXG4gIHVybDogc3RyaW5nLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbGV0IGNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuXG4gIGlmIChhd2FpdCBpc09ubGluZSgpKSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICBpZiAocmVzLnN0YXR1cyA8IDMwMCkge1xuICAgICAgY29udGVudCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgICBhd2FpdCBjb25maWcuZnNDYWNoZS5zZXQodXJsLCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEZhaWxlZCB0byBkb3dubG9hZCBcIiR7dXJsfVwiLCBmYWxsaW5nIGJhY2sgdG8gY2FjaGUuLi5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRlbnQpIGNvbnRlbnQgPSAoYXdhaXQgY29uZmlnLmZzQ2FjaGUuZ2V0KHVybCkpID8/ICcnO1xuICBpZiAoIWNvbnRlbnQpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgT2ZmbGluZSBhbmQgXCIke3VybH1cIiBoYXMgbm90IGJlZW4gY2FjaGVkLiBUcnkgYWdhaW4gd2hlbiBvbmxpbmUuYCxcbiAgICApO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuIiwgIi8qKlxuICogQWRkIGEgdGltZW91dCB0byBhIHByb21pc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihcbiAgcHJvbWlzZTogUHJvbWlzZTxUPixcbiAgZHVyYXRpb246IG51bWJlcixcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVqKGBQcm9taXNlIHRpbWVkIG91dCBhZnRlciAke2R1cmF0aW9ufW1zYCk7XG4gICAgfSwgZHVyYXRpb24pO1xuICAgIHByb21pc2VcbiAgICAgIC50aGVuKHJlcylcbiAgICAgIC5jYXRjaChyZWopXG4gICAgICAuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBEb24ndCB1c2UgaW4gcHJvZHVjdGlvbiwganVzdCBmb3IgdGVzdGluZyBhbmQgc2xvd2luZyB0aGluZ3MgZG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMpID0+IHNldFRpbWVvdXQocmVzLCBtcykpO1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBmZXRjaENhY2hlZCB9IGZyb20gJy4uL3V0aWxzL25ldHdvcmsnO1xuXG4vKipcbiAqIERvd25sb2FkcyBhbnkgVVJMIGltcG9ydHMsIGxpa2UgR29vZ2xlIEFuYWx5dGljcywgaW50byB2aXJ0dWFsIG1vZHVsZXMgc28gdGhleSBhcmUgYnVuZGxlZCB3aXRoXG4gKiB0aGUgZXh0ZW5zaW9uIGluc3RlYWQgb2YgZGVwZW5kaW5nIG9uIHJlbW90ZSBjb2RlIGF0IHJ1bnRpbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCBcInVybDpodHRwczovL2dvb2dsZS10YWdtYW5hZ2VyLmNvbS9ndGFnP2lkPVhZWlwiO1xuICovXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWQoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3d4dDpkb3dubG9hZCcsXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQuc3RhcnRzV2l0aCgndXJsOicpKSByZXR1cm4gJ1xcMCcgKyBpZDtcbiAgICB9LFxuICAgIGFzeW5jIGxvYWQoaWQpIHtcbiAgICAgIGlmICghaWQuc3RhcnRzV2l0aCgnXFwwdXJsOicpKSByZXR1cm47XG5cbiAgICAgIC8vIExvYWQgZmlsZSBmcm9tIG5ldHdvcmsgb3IgY2FjaGVcbiAgICAgIGNvbnN0IHVybCA9IGlkLnJlcGxhY2UoJ1xcMHVybDonLCAnJyk7XG4gICAgICByZXR1cm4gYXdhaXQgZmV0Y2hDYWNoZWQodXJsLCBjb25maWcpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEVudHJ5cG9pbnQsIEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGlybmFtZSwgZXh0bmFtZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCBmcywgeyBlbnN1cmVEaXIgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aHMnO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhlIEhUTUwgZmlsZXMgb3V0cHV0IGJ5IGEgbXVsdGlwYWdlIGJ1aWxkIGFyZSBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4gVGhpcyBkb2VzIHR3b1xuICogdGhpbmdzOlxuICpcbiAqIDEuIE1vdmVzIHRoZSBITVRMIGZpbGVzIHRvIHRoZWlyIGZpbmFsIGxvY2F0aW9uIGF0IGA8b3V0RGlyPi88ZW50cnlwb2ludC5uYW1lPi5odG1sYC5cbiAqIDIuIFVwZGF0ZXMgdGhlIGJ1bmRsZSBzbyBpdCBzdW1tYXJpemVzIHRoZSBmaWxlcyBjb3JyZWN0bHkgaW4gdGhlIHJldHVybmVkIGJ1aWxkIG91dHB1dC5cbiAqXG4gKiBBc3NldHMgKEpTIGFuZCBDU1MpIGFyZSBvdXRwdXQgdG8gdGhlIGA8b3V0RGlyPi9hc3NldHNgIGRpcmVjdG9yeSwgYW5kIGRvbid0IG5lZWQgdG8gYmUgbW9kaWZpZWQuXG4gKiBIVE1MIGZpbGVzIGFjY2VzcyB0aGVtIHZpYSBhYnNvbHV0ZSBVUkxzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBhbnkgaW1wb3J0IHBhdGhzIGluIHRoZSBIVE1MXG4gKiBmaWxlcyBlaXRoZXIuXG4gKlxuICogVEhJUyBQTFVHSU4gU0hPVUxEIE9OTFkgQkUgQVBQTElFRCBUTyBNVUxUSVBBR0UgQlVJTERTLiBJdCBzaG91bGQgbm90IGJlIGFkZGVkIHRvIGV2ZXJ5IGJ1aWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwYWdlTW92ZShcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0Om11bHRpcGFnZS1tb3ZlJyxcbiAgICBhc3luYyB3cml0ZUJ1bmRsZShfLCBidW5kbGUpIHtcbiAgICAgIGZvciAoY29uc3Qgb2xkQnVuZGxlUGF0aCBpbiBidW5kbGUpIHtcbiAgICAgICAgLy8gb2xkQnVuZGxlUGF0aCA9ICdlbnRyeXBvaW50cy9wb3B1cC5odG1sJyBvciAnZW50cnlwb2ludHMvb3B0aW9ucy9pbmRleC5odG1sJ1xuXG4gICAgICAgIC8vIEZpbmQgYSBtYXRjaGluZyBlbnRyeXBvaW50IC0gb2xkQnVuZGxlUGF0aCBpcyB0aGUgc2FtZSBhcyBlbmQgZW5kIG9mIHRoZSBpbnB1dCBwYXRoLlxuICAgICAgICBjb25zdCBlbnRyeXBvaW50ID0gZW50cnlwb2ludHMuZmluZChcbiAgICAgICAgICAoZW50cnkpID0+ICEhbm9ybWFsaXplUGF0aChlbnRyeS5pbnB1dFBhdGgpLmVuZHNXaXRoKG9sZEJ1bmRsZVBhdGgpLFxuICAgICAgICApO1xuICAgICAgICBpZiAoZW50cnlwb2ludCA9PSBudWxsKSB7XG4gICAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnTm8gZW50cnlwb2ludCBmb3VuZCBmb3InLCBvbGRCdW5kbGVQYXRoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgbmV3IGJ1bmRsZSBwYXRoXG4gICAgICAgIGNvbnN0IG5ld0J1bmRsZVBhdGggPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICAgZXh0bmFtZShvbGRCdW5kbGVQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld0J1bmRsZVBhdGggPT09IG9sZEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgJ0hUTUwgZmlsZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uJyxcbiAgICAgICAgICAgIG9sZEJ1bmRsZVBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgZmlsZSBhbmQgdXBkYXRlIGJ1bmRsZVxuICAgICAgICAvLyBEbyB0aGlzIGluc2lkZSBhIG11dGV4IGxvY2sgc28gaXQgb25seSBydW5zIG9uZSBhdCBhIHRpbWUgZm9yIGNvbmN1cnJlbnQgbXVsdGlwYWdlIGJ1aWxkc1xuICAgICAgICBjb25zdCBvbGRBYnNQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBvbGRCdW5kbGVQYXRoKTtcbiAgICAgICAgY29uc3QgbmV3QWJzUGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgbmV3QnVuZGxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKG5ld0Fic1BhdGgpKTtcbiAgICAgICAgYXdhaXQgZnMubW92ZShvbGRBYnNQYXRoLCBuZXdBYnNQYXRoLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcblxuICAgICAgICBjb25zdCByZW5hbWVkQ2h1bmsgPSB7XG4gICAgICAgICAgLi4uYnVuZGxlW29sZEJ1bmRsZVBhdGhdLFxuICAgICAgICAgIGZpbGVOYW1lOiBuZXdCdW5kbGVQYXRoLFxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgYnVuZGxlW29sZEJ1bmRsZVBhdGhdO1xuICAgICAgICBidW5kbGVbbmV3QnVuZGxlUGF0aF0gPSByZW5hbWVkQ2h1bms7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVVbmltcG9ydCB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYXV0by1pbXBvcnRzJztcbmltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgZXh0bmFtZSB9IGZyb20gJ3BhdGgnO1xuXG5jb25zdCBFTkFCTEVEX0VYVEVOU0lPTlM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0ge1xuICAnLmpzJzogdHJ1ZSxcbiAgJy5qc3gnOiB0cnVlLFxuICAnLnRzJzogdHJ1ZSxcbiAgJy50c3gnOiB0cnVlLFxuICAnLnZ1ZSc6IHRydWUsXG4gICcuc3ZlbHRlJzogdHJ1ZSxcbn07XG5cbi8qKlxuICogSW5qZWN0IGFueSBnbG9iYWwgaW1wb3J0cyBkZWZpbmVkIGJ5IHVuaW1wb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmltcG9ydChjb25maWc6IEludGVybmFsQ29uZmlnKTogUGx1Z2luIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldFVuaW1wb3J0T3B0aW9ucyhjb25maWcpO1xuICBjb25zdCB1bmltcG9ydCA9IGNyZWF0ZVVuaW1wb3J0KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3d4dDp1bmltcG9ydCcsXG4gICAgYXN5bmMgY29uZmlnKCkge1xuICAgICAgYXdhaXQgdW5pbXBvcnQuc2NhbkltcG9ydHNGcm9tRGlyKHVuZGVmaW5lZCwgeyBjd2Q6IGNvbmZpZy5zcmNEaXIgfSk7XG4gICAgfSxcbiAgICBhc3luYyB0cmFuc2Zvcm0oY29kZSwgaWQpIHtcbiAgICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoaWQpO1xuICAgICAgaWYgKEVOQUJMRURfRVhURU5TSU9OU1tleHRdKSByZXR1cm4gdW5pbXBvcnQuaW5qZWN0SW1wb3J0cyhjb2RlLCBpZCk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBVbmltcG9ydE9wdGlvbnMgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG1lcmdlQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmltcG9ydE9wdGlvbnMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQYXJ0aWFsPFVuaW1wb3J0T3B0aW9ucz4ge1xuICBjb25zdCBkZWZhdWx0T3B0aW9uczogUGFydGlhbDxVbmltcG9ydE9wdGlvbnM+ID0ge1xuICAgIGRlYnVnTG9nOiBjb25maWcubG9nZ2VyLmRlYnVnLFxuICAgIGltcG9ydHM6IFt7IG5hbWU6ICdkZWZpbmVDb25maWcnLCBmcm9tOiAnd3h0JyB9XSxcbiAgICBwcmVzZXRzOiBbeyBwYWNrYWdlOiAnd3h0L2NsaWVudCcgfSwgeyBwYWNrYWdlOiAnd3h0L2Jyb3dzZXInIH1dLFxuICAgIHdhcm46IGNvbmZpZy5sb2dnZXIud2FybixcbiAgICBkaXJzOiBbJ2NvbXBvbmVudHMnLCAnY29tcG9zYWJsZXMnLCAnaG9va3MnLCAndXRpbHMnXSxcbiAgfTtcblxuICByZXR1cm4gbWVyZ2VDb25maWcoXG4gICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgY29uZmlnLmltcG9ydHMsXG4gICkgYXMgUGFydGlhbDxVbmltcG9ydE9wdGlvbnM+O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBXcmFwcyBhIHVzZXIncyBlbnRyeXBvaW50IHdpdGggYSB2aXR1YWwgdmVyc2lvbiB3aXRoIGFkZGl0aW9uYWwgbG9naWMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXJ0dWFsRW50cnlwb2luKFxuICB0eXBlOiBFbnRyeXBvaW50Wyd0eXBlJ10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQbHVnaW4ge1xuICBjb25zdCB2aXJ0dWFsSWQgPSBgdmlydHVhbDp3eHQtJHt0eXBlfT9gO1xuICBjb25zdCByZXNvbHZlZFZpcnR1YWxJZCA9IGBcXDAke3ZpcnR1YWxJZH1gO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogYHd4dDp2aXJ0dWFsLWVudHJ5cG9pbnRgLFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgLy8gSWQgZG9lc24ndCBzdGFydCB3aXRoIHByZWZpeCwgaXQgbG9va3MgbGlrZSB0aGlzOlxuICAgICAgLy8gL3BhdGgvdG8vcHJvamVjdC92aXJ0dWFsOmJhY2tncm91bmQ/L3BhdGgvdG8vcHJvamVjdC9lbnRyeXBvaW50cy9iYWNrZ3JvdW5kLnRzXG4gICAgICBjb25zdCBpbmRleCA9IGlkLmluZGV4T2YodmlydHVhbElkKTtcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgY29uc3QgaW5wdXRQYXRoID0gbm9ybWFsaXplUGF0aChpZC5zdWJzdHJpbmcoaW5kZXggKyB2aXJ0dWFsSWQubGVuZ3RoKSk7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRWaXJ0dWFsSWQgKyBpbnB1dFBhdGg7XG4gICAgfSxcbiAgICBhc3luYyBsb2FkKGlkKSB7XG4gICAgICBpZiAoIWlkLnN0YXJ0c1dpdGgocmVzb2x2ZWRWaXJ0dWFsSWQpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlucHV0UGF0aCA9IGlkLnJlcGxhY2UocmVzb2x2ZWRWaXJ0dWFsSWQsICcnKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICAgYG5vZGVfbW9kdWxlcy93eHQvZGlzdC92aXJ0dWFsLW1vZHVsZXMvJHt0eXBlfS1lbnRyeXBvaW50LmpzYCxcbiAgICAgICAgKSxcbiAgICAgICAgJ3V0Zi04JyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShgdmlydHVhbDp1c2VyLSR7dHlwZX1gLCBpbnB1dFBhdGgpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgcGF0aHMgZnJvbSAndml0ZS10c2NvbmZpZy1wYXRocyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0c2NvbmZpZ1BhdGhzKGNvbmZpZzogSW50ZXJuYWxDb25maWcpIHtcbiAgY29uc3QgZm46IHR5cGVvZiBwYXRocyA9XG4gICAgdHlwZW9mIHBhdGhzID09PSAnZnVuY3Rpb24nID8gcGF0aHMgOiAocGF0aHMgYXMgYW55KS5kZWZhdWx0O1xuICByZXR1cm4gZm4oe1xuICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcblxuLyoqXG4gKiBJbiBkZXYgbW9kZSwgaWYgdGhlcmUncyBub3QgYSBiYWNrZ3JvdW5kIHNjcmlwdCBsaXN0ZWQsIHdlIG5lZWQgdG8gYWRkIG9uZS5cbiAqXG4gKiBUaGlzIGRlZmluZSdzIGEgdmlydHVhbCBtb2R1bGUgdGhhdCBpcyBiYXNpY2FsbHkganVzdCBhIG5vb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wQmFja2dyb3VuZCgpOiBQbHVnaW4ge1xuICBjb25zdCB2aXJ0dWFsTW9kdWxlSWQgPSBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQ7XG4gIGNvbnN0IHJlc29sdmVkVmlydHVhbE1vZHVsZUlkID0gJ1xcMCcgKyB2aXJ0dWFsTW9kdWxlSWQ7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3d4dDpub29wLWJhY2tncm91bmQnLFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgaWYgKGlkID09PSB2aXJ0dWFsTW9kdWxlSWQpIHJldHVybiByZXNvbHZlZFZpcnR1YWxNb2R1bGVJZDtcbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGlmIChpZCA9PT0gcmVzb2x2ZWRWaXJ0dWFsTW9kdWxlSWQpIHtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyBkZWZpbmVCYWNrZ3JvdW5kIH0gZnJvbSAnd3h0L2NsaWVudCc7XFxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQmFja2dyb3VuZCgoKSA9PiB2b2lkIDApYDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEID0gJ3ZpcnR1YWw6dXNlci1iYWNrZ3JvdW5kJztcbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2VudHJ5cG9pbnRzJztcblxuLyoqXG4gKiBSZW5hbWUgQ1NTIGVudHJ5cG9pbnQgb3V0cHV0cyB0byBlbnN1cmUgYSBKUyBmaWxlIGlzIG5vdCBnZW5lcmF0ZWQsIGFuZCB0aGF0IHRoZSBDU1MgZmlsZSBpc1xuICogcGxhY2VkIGluIHRoZSBjb3JyZWN0IHBsYWNlLlxuICpcbiAqIEl0OlxuICogMS4gUmVuYW1lcyBDU1MgZmlsZXMgdG8gdGhlaXIgZmluYWwgcGF0aHNcbiAqIDIuIFJlbW92ZXMgdGhlIEpTIGZpbGUgdGhhdCBnZXQncyBvdXRwdXQgYnkgbGliIG1vZGVcbiAqXG4gKiBUSElTIFBMVUdJTiBTSE9VTEQgT05MWSBCRSBBUFBMSUVEIFRPIENTUyBMSUIgTU9ERSBCVUlMRFMuIEl0IHNob3VsZCBub3QgYmUgYWRkZWQgdG8gZXZlcnkgYnVpbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NFbnRyeXBvaW50cyhcbiAgZW50cnlwb2ludDogRW50cnlwb2ludCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmNzcy1lbnRyeXBvaW50JyxcbiAgICBjb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWlsZDoge1xuICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogKCkgPT5cbiAgICAgICAgICAgICAgICBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChlbnRyeXBvaW50LCBjb25maWcub3V0RGlyLCAnLmNzcycpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIGdlbmVyYXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgT2JqZWN0LmtleXMoYnVuZGxlKS5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuanMnKSkgZGVsZXRlIGJ1bmRsZVtmaWxlXTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEZzQ2FjaGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5cbi8qKlxuICogQSBiYXNpYyBmaWxlIHN5c3RlbSBjYWNoZSBzdG9yZWQgYXQgYDxzcmNEaXI+Ly53eHQvY2FjaGUvPGtleT5gLiBKdXN0IGNhY2hlcyBhIHN0cmluZyBpbiBhXG4gKiBmaWxlIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBwYXJhbSBzcmNEaXIgQWJzb2x1dGUgcGF0aCB0byBzb3VyY2UgZGlyZWN0b3J5LiBTZWUgYEludGVybmFsQ29uZmlnLnNyY0RpcmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZzQ2FjaGUod3h0RGlyOiBzdHJpbmcpOiBGc0NhY2hlIHtcbiAgY29uc3QgZ2V0UGF0aCA9IChrZXk6IHN0cmluZykgPT5cbiAgICByZXNvbHZlKHd4dERpciwgJ2NhY2hlJywgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChrZXkpO1xuICAgICAgYXdhaXQgZW5zdXJlRGlyKGRpcm5hbWUocGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGgsIHZhbHVlLCAndXRmLTgnKTtcbiAgICB9LFxuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChrZXkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueTsgdHlwZTogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiAnX19NQU5JRkVTVF9WRVJTSU9OX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgICB0eXBlOiBgMiB8IDNgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fQlJPV1NFUl9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlcixcbiAgICAgIHR5cGU6IGBzdHJpbmdgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfQ0hST01FX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnY2hyb21lJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX0ZJUkVGT1hfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX1NBRkFSSV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19FREdFX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnZWRnZScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19PUEVSQV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ29wZXJhJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0NPTU1BTkRfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmNvbW1hbmQsXG4gICAgICB0eXBlOiBgXCJidWlsZFwiIHwgXCJzZXJ2ZVwiYCxcbiAgICB9LFxuICBdO1xufVxuIiwgImltcG9ydCB7IEJ1aWxkT3V0cHV0LCBXeHREZXZTZXJ2ZXIsIElubGluZUNvbmZpZyB9IGZyb20gJy4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyBnZXRJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgZGV0ZWN0RGV2Q2hhbmdlcyB9IGZyb20gJy4vY29yZS91dGlscy9kZXRlY3REZXZDaGFuZ2VzJztcbmltcG9ydCB7IE11dGV4IH0gZnJvbSAnYXN5bmMtbXV0ZXgnO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE91dHB1dEZpbGUgfSBmcm9tICcuL2NvcmUvdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgYnVpbGRJbnRlcm5hbCwgcmVidWlsZCB9IGZyb20gJy4vY29yZS9idWlsZCc7XG5pbXBvcnQge1xuICBnZXRTZXJ2ZXJJbmZvLFxuICByZWxvYWRDb250ZW50U2NyaXB0cyxcbiAgcmVsb2FkSHRtbFBhZ2VzLFxuICBzZXR1cFNlcnZlcixcbn0gZnJvbSAnLi9jb3JlL3NlcnZlcic7XG5cbmV4cG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3R5cGVzL2V4dGVybmFsJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS91dGlscy9kZWZpbmVDb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3V0aWxzL2RlZmluZVJ1bm5lckNvbmZpZyc7XG5cbi8qKlxuICogQnVuZGxlcyB0aGUgZXh0ZW5zaW9uIGZvciBwcm9kdWN0aW9uLiBSZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgYnVpbGQgcmVzdWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGQoY29uZmlnOiBJbmxpbmVDb25maWcpOiBQcm9taXNlPEJ1aWxkT3V0cHV0PiB7XG4gIGNvbnN0IGludGVybmFsQ29uZmlnID0gYXdhaXQgZ2V0SW50ZXJuYWxDb25maWcoY29uZmlnLCAnYnVpbGQnKTtcbiAgcmV0dXJuIGF3YWl0IGJ1aWxkSW50ZXJuYWwoaW50ZXJuYWxDb25maWcpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZXYgc2VydmVyLCBwcmUtYnVpbGRzIGFsbCB0aGUgZmlsZXMgdGhhdCBuZWVkIHRvIGV4aXN0IHRvIGxvYWQgdGhlIGV4dGVuc2lvbiwgYW5kIG9wZW5cbiAqIHRoZSBicm93c2VyIHdpdGggdGhlIGV4dGVuc2lvbiBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXIoXG4gIGNvbmZpZz86IElubGluZUNvbmZpZyxcbik6IFByb21pc2U8V3h0RGV2U2VydmVyPiB7XG4gIGNvbnN0IHNlcnZlckluZm8gPSBhd2FpdCBnZXRTZXJ2ZXJJbmZvKCk7XG5cbiAgY29uc3QgZ2V0TGF0ZXN0SW50ZXJuYWxDb25maWcgPSAoKSA9PiB7XG4gICAgY29uc3Qgdml0ZUNvbmZpZzogdml0ZS5JbmxpbmVDb25maWcgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgICAgc2VydmVySW5mby52aXRlU2VydmVyQ29uZmlnLFxuICAgICAgY29uZmlnPy52aXRlID8/IHt9LFxuICAgICk7XG4gICAgcmV0dXJuIGdldEludGVybmFsQ29uZmlnKHsgLi4uY29uZmlnLCB2aXRlOiB2aXRlQ29uZmlnIH0sICdzZXJ2ZScpO1xuICB9O1xuXG4gIGxldCBpbnRlcm5hbENvbmZpZyA9IGF3YWl0IGdldExhdGVzdEludGVybmFsQ29uZmlnKCk7XG4gIGNvbnN0IHNlcnZlciA9IGF3YWl0IHNldHVwU2VydmVyKHNlcnZlckluZm8sIGludGVybmFsQ29uZmlnKTtcbiAgaW50ZXJuYWxDb25maWcuc2VydmVyID0gc2VydmVyO1xuXG4gIGNvbnN0IGZpbGVDaGFuZ2VkTXV0ZXggPSBuZXcgTXV0ZXgoKTtcbiAgY29uc3QgY2hhbmdlUXVldWU6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+ID0gW107XG5cbiAgc2VydmVyLndzLm9uKCd3eHQ6YmFja2dyb3VuZC1pbml0aWFsaXplZCcsICgpID0+IHtcbiAgICAvLyBSZWdpc3RlciBjb250ZW50IHNjcmlwdHMgZm9yIHRoZSBmaXJzdCB0aW1lIHNpbmNlIHRoZXkncmUgbm90IGxpc3RlZCBpbiB0aGUgbWFuaWZlc3RcbiAgICByZWxvYWRDb250ZW50U2NyaXB0cyhzZXJ2ZXIuY3VycmVudE91dHB1dC5zdGVwcywgaW50ZXJuYWxDb25maWcsIHNlcnZlcik7XG4gIH0pO1xuXG4gIHNlcnZlci53YXRjaGVyLm9uKCdhbGwnLCBhc3luYyAoZXZlbnQsIHBhdGgsIF9zdGF0cykgPT4ge1xuICAgIC8vIEhlcmUsIFwicGF0aFwiIGlzIGEgbm9uLW5vcm1hbGl6ZWQgcGF0aCAoaWU6IEM6XFxcXHVzZXJzXFxcXC4uLiBpbnN0ZWFkIG9mIEM6L3VzZXJzLy4uLilcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKGludGVybmFsQ29uZmlnLm91dEJhc2VEaXIpKSByZXR1cm47XG4gICAgY2hhbmdlUXVldWUucHVzaChbZXZlbnQsIHBhdGhdKTtcblxuICAgIGF3YWl0IGZpbGVDaGFuZ2VkTXV0ZXgucnVuRXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gY2hhbmdlUXVldWUuc3BsaWNlKDAsIGNoYW5nZVF1ZXVlLmxlbmd0aCk7XG4gICAgICBpZiAoZmlsZUNoYW5nZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBkZXRlY3REZXZDaGFuZ2VzKGZpbGVDaGFuZ2VzLCBzZXJ2ZXIuY3VycmVudE91dHB1dCk7XG4gICAgICBpZiAoY2hhbmdlcy50eXBlID09PSAnbm8tY2hhbmdlJykgcmV0dXJuO1xuXG4gICAgICAvLyBMb2cgdGhlIGVudHJ5cG9pbnRzIHRoYXQgd2VyZSBlZmZlY3RlZFxuICAgICAgaW50ZXJuYWxDb25maWcubG9nZ2VyLmluZm8oXG4gICAgICAgIGBDaGFuZ2VkOiAke0FycmF5LmZyb20obmV3IFNldChmaWxlQ2hhbmdlcy5tYXAoKGNoYW5nZSkgPT4gY2hhbmdlWzFdKSkpXG4gICAgICAgICAgLm1hcCgoZmlsZSkgPT4gcGMuZGltKHJlbGF0aXZlKGludGVybmFsQ29uZmlnLnJvb3QsIGZpbGUpKSlcbiAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlYnVpbHROYW1lcyA9IGNoYW5nZXMucmVidWlsZEdyb3Vwc1xuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBjLmN5YW4oXG4gICAgICAgICAgICByZWxhdGl2ZShpbnRlcm5hbENvbmZpZy5vdXREaXIsIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKGVudHJ5LCAnJykpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKHBjLmRpbSgnLCAnKSk7XG5cbiAgICAgIC8vIEdldCBsYXRlc3QgY29uZmlnIGFuZCBSZWJ1aWxkIGdyb3VwcyB3aXRoIGNoYW5nZXNcbiAgICAgIGludGVybmFsQ29uZmlnID0gYXdhaXQgZ2V0TGF0ZXN0SW50ZXJuYWxDb25maWcoKTtcbiAgICAgIGludGVybmFsQ29uZmlnLnNlcnZlciA9IHNlcnZlcjtcbiAgICAgIGNvbnN0IHsgb3V0cHV0OiBuZXdPdXRwdXQgfSA9IGF3YWl0IHJlYnVpbGQoXG4gICAgICAgIGludGVybmFsQ29uZmlnLFxuICAgICAgICAvLyBUT0RPOiB0aGlzIGV4Y2x1ZGVzIG5ldyBlbnRyeXBvaW50cywgc28gdGhleSdyZSBub3QgYnVpbHQgdW50aWwgdGhlIGRldiBjb21tYW5kIGlzIHJlc3RhcnRlZFxuICAgICAgICBjaGFuZ2VzLnJlYnVpbGRHcm91cHMsXG4gICAgICAgIGNoYW5nZXMuY2FjaGVkT3V0cHV0LFxuICAgICAgKTtcbiAgICAgIHNlcnZlci5jdXJyZW50T3V0cHV0ID0gbmV3T3V0cHV0O1xuXG4gICAgICAvLyBQZXJmb3JtIHJlbG9hZHNcbiAgICAgIHN3aXRjaCAoY2hhbmdlcy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2V4dGVuc2lvbi1yZWxvYWQnOlxuICAgICAgICAgIHNlcnZlci5yZWxvYWRFeHRlbnNpb24oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaHRtbC1yZWxvYWQnOlxuICAgICAgICAgIHJlbG9hZEh0bWxQYWdlcyhjaGFuZ2VzLnJlYnVpbGRHcm91cHMsIHNlcnZlciwgaW50ZXJuYWxDb25maWcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdC1yZWxvYWQnOlxuICAgICAgICAgIHJlbG9hZENvbnRlbnRTY3JpcHRzKGNoYW5nZXMuY2hhbmdlZFN0ZXBzLCBpbnRlcm5hbENvbmZpZywgc2VydmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGEuc3VjY2VzcyhgUmVsb2FkZWQ6ICR7cmVidWlsdE5hbWVzfWApO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBhbGwgZWxlbWVudHMgb2YgdGhlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlcnk8VD4oXG4gIGFycmF5OiBUW10sXG4gIHByZWRpY2F0ZTogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4pOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKylcbiAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpXSwgaSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRPdXRwdXQsIEJ1aWxkU3RlcE91dHB1dCwgRW50cnlwb2ludEdyb3VwIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGV2ZXJ5IH0gZnJvbSAnLi9hcnJheXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIENvbXBhcmUgdGhlIGNoYW5nZWQgZmlsZXMgdnMgdGhlIGJ1aWxkIG91dHB1dCBhbmQgZGV0ZXJtaW5lIHdoYXQga2luZCBvZiByZWxvYWQgbmVlZHMgdG8gaGFwcGVuOlxuICpcbiAqIC0gRG8gbm90aGluZ1xuICogICAtIENTUyBvciBKUyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhbiBIVE1MIHBhZ2UgaXMgY2hhbmdlZCAtIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZVxuICogICAgIGRldiBzZXJ2ZXJcbiAqICAgLSBDaGFuZ2UgaXNuJ3QgdXNlZCBieSBhbnkgb2YgdGhlIGVudHJ5cG9pbnRzXG4gKiAtIFJlbG9hZCBDb250ZW50IHNjcmlwdFxuICogICAtIENTUyBvciBKUyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRlbnQgc2NyaXB0XG4gKiAgIC0gQmFja2dyb3VuZCBzY3JpcHQgd2lsbCBiZSB0b2xkIHRvIHJlbG9hZCB0aGUgY29udGVudCBzY3JpcHRcbiAqIC0gUmVsb2FkIEhUTUwgZmlsZVxuICogICAtIEhUTUwgZmlsZSBpdHNlbGYgaXMgc2F2ZWQgLSBITVIgZG9lc24ndCBoYW5kbGUgdGhpcyBiZWNhdXNlIHRoZSBIVE1MIHBhZ2VzIGFyZSBwcmUtcmVuZGVyZWRcbiAqICAgLSBDaHJvbWUgaXMgT0sgcmVsb2FkaW5nIHRoZSBwYWdlIHdoZW4gdGhlIEhUTUwgZmlsZSBpcyBjaGFuZ2VkIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSB3aG9sZVxuICogICAgIGV4dGVuc2lvbi4gTm90IHN1cmUgYWJvdXQgZmlyZWZveCwgdGhpcyBtaWdodCBuZWVkIHRvIGNoYW5nZSB0byBhbiBleHRlbnNpb24gcmVsb2FkXG4gKiAtIFJlbG9hZCBleHRlbnNpb25cbiAqICAgLSBCYWNrZ3JvdW5kIHNjcmlwdCBpcyBjaGFuZ2VkXG4gKiAgIC0gTWFuaWZlc3QgaXMgZGlmZmVyZW50XG4gKiAtIFJlc3RhcnQgYnJvd3NlclxuICogICAtIENvbmZpZyBmaWxlIGNoYW5nZWQgKHd4dC5jb25maWcudHMsIC5lbnYsIHdlYi1leHQuY29uZmlnLnRzLCBldGMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REZXZDaGFuZ2VzKFxuICBjaGFuZ2VkRmlsZXM6IFtldmVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmddW10sXG4gIGN1cnJlbnRPdXRwdXQ6IEJ1aWxkT3V0cHV0IHwgdW5kZWZpbmVkLFxuKTogRGV2TW9kZUNoYW5nZSB7XG4gIGlmIChjdXJyZW50T3V0cHV0ID09IG51bGwpIHJldHVybiB7IHR5cGU6ICduby1jaGFuZ2UnIH07XG5cbiAgY29uc3QgY2hhbmdlZFN0ZXBzID0gbmV3IFNldChcbiAgICBjaGFuZ2VkRmlsZXMuZmxhdE1hcCgoY2hhbmdlZEZpbGUpID0+XG4gICAgICBmaW5kRWZmZWN0ZWRTdGVwcyhjaGFuZ2VkRmlsZSwgY3VycmVudE91dHB1dCksXG4gICAgKSxcbiAgKTtcbiAgaWYgKGNoYW5nZWRTdGVwcy5zaXplID09PSAwKSByZXR1cm4geyB0eXBlOiAnbm8tY2hhbmdlJyB9O1xuXG4gIGNvbnN0IHVuY2hhbmdlZE91dHB1dDogQnVpbGRPdXRwdXQgPSB7XG4gICAgbWFuaWZlc3Q6IGN1cnJlbnRPdXRwdXQubWFuaWZlc3QsXG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH07XG4gIGNvbnN0IGNoYW5nZWRPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBjdXJyZW50T3V0cHV0Lm1hbmlmZXN0LFxuICAgIHN0ZXBzOiBbXSxcbiAgICBwdWJsaWNBc3NldHM6IFtdLFxuICB9O1xuXG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjdXJyZW50T3V0cHV0LnN0ZXBzKSB7XG4gICAgaWYgKGNoYW5nZWRTdGVwcy5oYXMoc3RlcCkpIHtcbiAgICAgIGNoYW5nZWRPdXRwdXQuc3RlcHMucHVzaChzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5jaGFuZ2VkT3V0cHV0LnN0ZXBzLnB1c2goc3RlcCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgYXNzZXQgb2YgY3VycmVudE91dHB1dC5wdWJsaWNBc3NldHMpIHtcbiAgICBpZiAoY2hhbmdlZFN0ZXBzLmhhcyhhc3NldCkpIHtcbiAgICAgIGNoYW5nZWRPdXRwdXQucHVibGljQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmNoYW5nZWRPdXRwdXQucHVibGljQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzT25seUh0bWxDaGFuZ2VzID1cbiAgICBjaGFuZ2VkRmlsZXMubGVuZ3RoID4gMCAmJlxuICAgIGV2ZXJ5KGNoYW5nZWRGaWxlcywgKFtfLCBmaWxlXSkgPT4gZmlsZS5lbmRzV2l0aCgnLmh0bWwnKSk7XG4gIGlmIChpc09ubHlIdG1sQ2hhbmdlcykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaHRtbC1yZWxvYWQnLFxuICAgICAgY2FjaGVkT3V0cHV0OiB1bmNoYW5nZWRPdXRwdXQsXG4gICAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGlzT25seUNvbnRlbnRTY3JpcHRzID1cbiAgICBjaGFuZ2VkT3V0cHV0LnN0ZXBzLmxlbmd0aCA+IDAgJiZcbiAgICBldmVyeShcbiAgICAgIGNoYW5nZWRPdXRwdXQuc3RlcHMuZmxhdE1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgICAoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09ICdjb250ZW50LXNjcmlwdCcsXG4gICAgKTtcbiAgaWYgKGlzT25seUNvbnRlbnRTY3JpcHRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdjb250ZW50LXNjcmlwdC1yZWxvYWQnLFxuICAgICAgY2FjaGVkT3V0cHV0OiB1bmNoYW5nZWRPdXRwdXQsXG4gICAgICBjaGFuZ2VkU3RlcHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMsXG4gICAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2V4dGVuc2lvbi1yZWxvYWQnLFxuICAgIGNhY2hlZE91dHB1dDogdW5jaGFuZ2VkT3V0cHV0LFxuICAgIHJlYnVpbGRHcm91cHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmVudHJ5cG9pbnRzKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgYSBzaW5nbGUgY2hhbmdlLCByZXR1cm4gYWxsIHRoZSBzdGVwIG9mIHRoZSBidWlsZCBvdXRwdXQgdGhhdCB3ZXJlIGVmZmVjdGVkIGJ5IGl0LlxuICovXG5mdW5jdGlvbiBmaW5kRWZmZWN0ZWRTdGVwcyhcbiAgY2hhbmdlZEZpbGU6IFtldmVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmddLFxuICBjdXJyZW50T3V0cHV0OiBCdWlsZE91dHB1dCxcbik6IERldGVjdGVkQ2hhbmdlW10ge1xuICBjb25zdCBjaGFuZ2VzOiBEZXRlY3RlZENoYW5nZVtdID0gW107XG4gIGNvbnN0IGNoYW5nZWRQYXRoID0gbm9ybWFsaXplUGF0aChjaGFuZ2VkRmlsZVsxXSk7XG5cbiAgY29uc3QgaXNDaHVua0VmZmVjdGVkID0gKFxuICAgIGNodW5rOiB2aXRlLlJvbGx1cC5PdXRwdXRDaHVuayB8IHZpdGUuUm9sbHVwLk91dHB1dEFzc2V0LFxuICApOiBib29sZWFuID0+XG4gICAgLy8gSWYgaXQncyBhbiBIVE1MIGZpbGUgd2l0aCB0aGUgc2FtZSBwYXRoLCBpcyBpcyBlZmZlY3RlZCBiZWNhdXNlIEhUTUwgZmlsZXMgbmVlZCB0byBiZSBwcmUtcmVuZGVyZWRcbiAgICAvLyBmaWxlTmFtZSBpcyBub3JtYWxpemVkLCByZWxhdGl2ZSBidW5kbGUgcGF0aFxuICAgIChjaHVuay50eXBlID09PSAnYXNzZXQnICYmIGNoYW5nZWRQYXRoLmVuZHNXaXRoKGNodW5rLmZpbGVOYW1lKSkgfHxcbiAgICAvLyBJZiBpdCdzIGEgY2h1bmsgdGhhdCBkZXBlbmRzIG9uIHRoZSBjaGFuZ2VkIGZpbGUsIGl0IGlzIGVmZmVjdGVkXG4gICAgLy8gbW9kdWxlSWRzIGFyZSBhYnNvbHV0ZSwgbm9ybWFsaXplZCBwYXRoc1xuICAgIChjaHVuay50eXBlID09PSAnY2h1bmsnICYmIGNodW5rLm1vZHVsZUlkcy5pbmNsdWRlcyhjaGFuZ2VkUGF0aCkpO1xuXG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjdXJyZW50T3V0cHV0LnN0ZXBzKSB7XG4gICAgY29uc3QgZWZmZWN0ZWRDaHVuayA9IHN0ZXAuY2h1bmtzLmZpbmQoKGNodW5rKSA9PiBpc0NodW5rRWZmZWN0ZWQoY2h1bmspKTtcbiAgICBpZiAoZWZmZWN0ZWRDaHVuaykgY2hhbmdlcy5wdXNoKHN0ZXApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ZWRBc3NldCA9IGN1cnJlbnRPdXRwdXQucHVibGljQXNzZXRzLmZpbmQoKGNodW5rKSA9PlxuICAgIGlzQ2h1bmtFZmZlY3RlZChjaHVuayksXG4gICk7XG4gIGlmIChlZmZlY3RlZEFzc2V0KSBjaGFuZ2VzLnB1c2goZWZmZWN0ZWRBc3NldCk7XG5cbiAgcmV0dXJuIGNoYW5nZXM7XG59XG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBmaWxlcyBjaGFuZ2VkLCB3aGF0IG5lZWRzIHJlYnVpbHQsIGFuZCB0aGUgdHlwZSBvZiByZWxvYWQgdGhhdCBpc1xuICogcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERldk1vZGVDaGFuZ2UgPVxuICB8IE5vQ2hhbmdlXG4gIHwgSHRtbFJlbG9hZFxuICB8IEV4dGVuc2lvblJlbG9hZFxuICB8IENvbnRlbnRTY3JpcHRSZWxvYWQ7XG4vLyB8IEJyb3dzZXJSZXN0YXJ0XG5cbmludGVyZmFjZSBOb0NoYW5nZSB7XG4gIHR5cGU6ICduby1jaGFuZ2UnO1xufVxuXG5pbnRlcmZhY2UgUmVidWlsZENoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlbnRyeXBvaW50cyB0aGF0IG5lZWQgcmVidWlsdC5cbiAgICovXG4gIHJlYnVpbGRHcm91cHM6IEVudHJ5cG9pbnRHcm91cFtdO1xuICAvKipcbiAgICogVGhlIHByZXZpb3VzIG91dHB1dCBzdHJpcHBlZCBvZiBhbnkgZmlsZXMgYXJlIGdvaW5nIHRvIGNoYW5nZS5cbiAgICovXG4gIGNhY2hlZE91dHB1dDogQnVpbGRPdXRwdXQ7XG59XG5cbmludGVyZmFjZSBIdG1sUmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdodG1sLXJlbG9hZCc7XG59XG5cbmludGVyZmFjZSBFeHRlbnNpb25SZWxvYWQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbiAgdHlwZTogJ2V4dGVuc2lvbi1yZWxvYWQnO1xufVxuXG4vLyBpbnRlcmZhY2UgQnJvd3NlclJlc3RhcnQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbi8vICAgdHlwZTogJ2Jyb3dzZXItcmVzdGFydCc7XG4vLyB9XG5cbmludGVyZmFjZSBDb250ZW50U2NyaXB0UmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdjb250ZW50LXNjcmlwdC1yZWxvYWQnO1xuICBjaGFuZ2VkU3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdO1xufVxuXG4vKipcbiAqIFdoZW4gZmlndXJpbmcgb3V0IHdoYXQgbmVlZHMgcmVsb2FkZWQsIHRoaXMgc3RvcmVzIHRoZSBzdGVwIHRoYXQgd2FzIGNoYW5nZWQsIG9yIHRoZSBwdWJsaWNcbiAqIGRpcmVjdG9yeSBhc3NldCB0aGF0IHdhcyBjaGFuZ2VkLiBJdCBkb2Vzbid0IGtub3cgd2hhdCB0eXBlIG9mIGNoYW5nZSBpcyByZXF1aXJlZCB5ZXQuIEp1c3QgYW5cbiAqIGludGVybWVkaWF0ZSB0eXBlLlxuICovXG50eXBlIERldGVjdGVkQ2hhbmdlID0gQnVpbGRTdGVwT3V0cHV0IHwgdml0ZS5Sb2xsdXAuT3V0cHV0QXNzZXQ7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7XG4gIEJ1aWxkT3V0cHV0LFxuICBCdWlsZFN0ZXBPdXRwdXQsXG4gIEVudHJ5cG9pbnQsXG4gIEVudHJ5cG9pbnRHcm91cCxcbiAgSW50ZXJuYWxDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHd4dFBsdWdpbnMgZnJvbSAnLi4vdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IHJlbW92ZUVtcHR5RGlycyB9IGZyb20gJy4uL3V0aWxzL3JlbW92ZUVtcHR5RGlycyc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRQdWJsaWNGaWxlcyB9IGZyb20gJy4uL3V0aWxzL3B1YmxpYyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEVudHJ5cG9pbnRzKFxuICBncm91cHM6IEVudHJ5cG9pbnRHcm91cFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPj4ge1xuICBjb25zdCBzdGVwczogQnVpbGRTdGVwT3V0cHV0W10gPSBbXTtcbiAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcbiAgICBjb25zdCBzdGVwID0gQXJyYXkuaXNBcnJheShncm91cClcbiAgICAgID8gYXdhaXQgYnVpbGRNdWx0aXBsZUVudHJ5cG9pbnRzKGdyb3VwLCBjb25maWcpXG4gICAgICA6IGF3YWl0IGJ1aWxkU2luZ2xlRW50cnlwb2ludChncm91cCwgY29uZmlnKTtcbiAgICBzdGVwcy5wdXNoKHN0ZXApO1xuICB9XG4gIGNvbnN0IHB1YmxpY0Fzc2V0cyA9IGF3YWl0IGNvcHlQdWJsaWNEaXJlY3RvcnkoY29uZmlnKTtcblxuICAvLyBSZW1vdmUgYW55IGVtcHR5IGRpcmVjdG9yaWVzIGZyb20gbW92aW5nIG91dHB1dHMgYXJvdW5kXG4gIGF3YWl0IHJlbW92ZUVtcHR5RGlycyhjb25maWcub3V0RGlyKTtcblxuICByZXR1cm4geyBwdWJsaWNBc3NldHMsIHN0ZXBzIH07XG59XG5cbi8qKlxuICogVXNlIFZpdGUncyBsaWIgbW9kZSArIElJRkUgZm9ybWF0IHRvIGJ1bmRsZSB0aGUgZW50cnlwb2ludCB0byBhIHNpbmdsZSBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZFNpbmdsZUVudHJ5cG9pbnQoXG4gIGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkU3RlcE91dHB1dD4ge1xuICAvLyBTaG91bGQgdGhpcyBlbnRyeXBvaW50IGJlIHdyYXBwZWQgYnkgdGhlIHZpdGUtcGx1Z2lucy92aXJ0dWFsRW50cnlwb2ludCBwbHVnaW4/XG4gIGNvbnN0IGlzVmlydHVhbCA9IFsnYmFja2dyb3VuZCcsICdjb250ZW50LXNjcmlwdCddLmluY2x1ZGVzKGVudHJ5cG9pbnQudHlwZSk7XG4gIGNvbnN0IGVudHJ5ID0gaXNWaXJ0dWFsXG4gICAgPyBgdmlydHVhbDp3eHQtJHtlbnRyeXBvaW50LnR5cGV9PyR7ZW50cnlwb2ludC5pbnB1dFBhdGh9YFxuICAgIDogZW50cnlwb2ludC5pbnB1dFBhdGg7XG5cbiAgY29uc3QgcGx1Z2luczogTm9uTnVsbGFibGU8dml0ZS5Vc2VyQ29uZmlnWydwbHVnaW5zJ10+ID0gW107XG4gIGlmIChcbiAgICBlbnRyeXBvaW50LnR5cGUgPT09ICdjb250ZW50LXNjcmlwdC1zdHlsZScgfHxcbiAgICBlbnRyeXBvaW50LnR5cGUgPT09ICd1bmxpc3RlZC1zdHlsZSdcbiAgKSB7XG4gICAgcGx1Z2lucy5wdXNoKHd4dFBsdWdpbnMuY3NzRW50cnlwb2ludHMoZW50cnlwb2ludCwgY29uZmlnKSk7XG4gIH1cblxuICBjb25zdCBsaWJNb2RlOiB2aXRlLlVzZXJDb25maWcgPSB7XG4gICAgcGx1Z2lucyxcbiAgICBidWlsZDoge1xuICAgICAgbGliOiB7XG4gICAgICAgIGVudHJ5LFxuICAgICAgICBmb3JtYXRzOiBbJ2lpZmUnXSxcbiAgICAgICAgbmFtZTogJ18nLFxuICAgICAgICBmaWxlTmFtZTogZW50cnlwb2ludC5uYW1lLFxuICAgICAgfSxcbiAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgLy8gVGhlcmUncyBvbmx5IGEgc2luZ2xlIG91dHB1dCBmb3IgdGhpcyBidWlsZCwgc28gd2UgdXNlIHRoZSBkZXNpcmVkIGJ1bmRsZSBwYXRoIGZvciB0aGVcbiAgICAgICAgICAvLyBlbnRyeSBvdXRwdXQgKGxpa2UgXCJjb250ZW50LXNjcmlwdHMvb3ZlcmxheS5qc1wiKVxuICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICAgICAgJy5qcycsXG4gICAgICAgICAgKSxcbiAgICAgICAgICAvLyBPdXRwdXQgY29udGVudCBzY3JpcHQgQ1NTIHRvIGFzc2V0cy8gd2l0aCBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHMuIERlZmF1bHRzIHRvXG4gICAgICAgICAgLy8gXCJbbmFtZV0uW2V4dF1cIiBpbiBsaWIgbW9kZSwgd2hpY2ggdXN1YWxseSByZXN1bHRzIGluIFwic3R5bGUuY3NzXCIuIFRoYXQgbWVhbnMgbXVsdGlwbGVcbiAgICAgICAgICAvLyBjb250ZW50IHNjcmlwdHMgd2l0aCBzdHlsZXMgd291bGQgb3ZlcndyaXRlIGVhY2ggb3RoZXIgaWYgaXQgd2VyZW4ndCBjaGFuZ2VkIGJlbG93LlxuICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBgYXNzZXRzLyR7ZW50cnlwb2ludC5uYW1lfS5bZXh0XWAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGVudHJ5Q29uZmlnID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICBsaWJNb2RlLFxuICAgIGNvbmZpZy52aXRlLFxuICApIGFzIHZpdGUuSW5saW5lQ29uZmlnO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZpdGUuYnVpbGQoZW50cnlDb25maWcpO1xuICByZXR1cm4ge1xuICAgIGVudHJ5cG9pbnRzOiBlbnRyeXBvaW50LFxuICAgIGNodW5rczogZ2V0QnVpbGRPdXRwdXRDaHVua3MocmVzdWx0KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBVc2UgVml0ZSdzIG11bHRpcGFnZSBidWlsZCB0byBidW5kbGUgYWxsIHRoZSBlbnRyeXBvaW50cyBpbiBhIHNpbmdsZSBzdGVwLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZE11bHRpcGxlRW50cnlwb2ludHMoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkU3RlcE91dHB1dD4ge1xuICBjb25zdCBtdWx0aVBhZ2U6IHZpdGUuVXNlckNvbmZpZyA9IHtcbiAgICBwbHVnaW5zOiBbd3h0UGx1Z2lucy5tdWx0aXBhZ2VNb3ZlKGVudHJ5cG9pbnRzLCBjb25maWcpXSxcbiAgICBidWlsZDoge1xuICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICBpbnB1dDogZW50cnlwb2ludHMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KChpbnB1dCwgZW50cnkpID0+IHtcbiAgICAgICAgICBpbnB1dFtlbnRyeS5uYW1lXSA9IGVudHJ5LmlucHV0UGF0aDtcbiAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH0sIHt9KSxcbiAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgLy8gSW5jbHVkZSBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHNcbiAgICAgICAgICBjaHVua0ZpbGVOYW1lczogJ2NodW5rcy9bbmFtZV0tW2hhc2hdLmpzJyxcbiAgICAgICAgICAvLyBJbmNsdWRlIGEgaGFzaCB0byBwcmV2ZW50IGNvbmZsaWN0c1xuICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiAnY2h1bmtzL1tuYW1lXS1baGFzaF0uanMnLFxuICAgICAgICAgIC8vIFdlIGNhbid0IGNvbnRyb2wgdGhlIFwibmFtZVwiLCBzbyB3ZSBuZWVkIGEgaGFzaCB0byBwcmV2ZW50IGNvbmZsaWN0c1xuICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAnYXNzZXRzL1tuYW1lXS1baGFzaF0uW2V4dF0nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGVudHJ5Q29uZmlnID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICBtdWx0aVBhZ2UsXG4gICAgY29uZmlnLnZpdGUsXG4gICkgYXMgdml0ZS5Vc2VyQ29uZmlnO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZpdGUuYnVpbGQoZW50cnlDb25maWcpO1xuICByZXR1cm4ge1xuICAgIGVudHJ5cG9pbnRzLFxuICAgIGNodW5rczogZ2V0QnVpbGRPdXRwdXRDaHVua3MocmVzdWx0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QnVpbGRPdXRwdXRDaHVua3MoXG4gIHJlc3VsdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiB2aXRlLmJ1aWxkPj4sXG4pOiBCdWlsZFN0ZXBPdXRwdXRbJ2NodW5rcyddIHtcbiAgaWYgKCdvbicgaW4gcmVzdWx0KSB0aHJvdyBFcnJvcignd3h0IGRvZXMgbm90IHN1cHBvcnQgdml0ZSB3YXRjaCBtb2RlLicpO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4gcmVzdWx0LmZsYXRNYXAoKHsgb3V0cHV0IH0pID0+IG91dHB1dCk7XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5UHVibGljRGlyZWN0b3J5KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZE91dHB1dFsncHVibGljQXNzZXRzJ10+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBnZXRQdWJsaWNGaWxlcyhjb25maWcpO1xuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgcHVibGljQXNzZXRzOiBCdWlsZE91dHB1dFsncHVibGljQXNzZXRzJ10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3Qgc3JjUGF0aCA9IHJlc29sdmUoY29uZmlnLnB1YmxpY0RpciwgZmlsZSk7XG4gICAgY29uc3Qgb3V0UGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgZmlsZSk7XG5cbiAgICBhd2FpdCBmcy5lbnN1cmVEaXIoZGlybmFtZShvdXRQYXRoKSk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoc3JjUGF0aCwgb3V0UGF0aCk7XG4gICAgcHVibGljQXNzZXRzLnB1c2goe1xuICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgIGZpbGVOYW1lOiBmaWxlLFxuICAgICAgbmFtZTogZmlsZSxcbiAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICBzb3VyY2U6IGF3YWl0IGZzLnJlYWRGaWxlKHNyY1BhdGgpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHB1YmxpY0Fzc2V0cztcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVFbXB0eURpcnMoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcik7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZSk7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgYXdhaXQgcmVtb3ZlRW1wdHlEaXJzKGZpbGVQYXRoKTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGZzLnJtZGlyKGRpcik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIG5vb3Agb24gZmFpbHVyZSAtIHRoaXMgbWVhbnMgdGhlIGRpcmVjdG9yeSB3YXMgbm90IGVtcHR5LlxuICB9XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IHVubm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIEdldCBhbGwgdGhlIGZpbGVzIGluIHRoZSBwcm9qZWN0J3MgcHVibGljIGRpcmVjdG9yeS4gUmV0dXJuZWQgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZVxuICogYGNvbmZpZy5wdWJsaWNEaXJgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljRmlsZXMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGlmICghKGF3YWl0IGZzLmV4aXN0cyhjb25maWcucHVibGljRGlyKSkpIHJldHVybiBbXTtcblxuICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7IGN3ZDogY29uZmlnLnB1YmxpY0RpciB9KTtcbiAgcmV0dXJuIGZpbGVzLm1hcCh1bm5vcm1hbGl6ZVBhdGgpO1xufVxuIiwgImltcG9ydCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBCYWNrZ3JvdW5kRW50cnlwb2ludCxcbiAgQmFja2dyb3VuZFNjcmlwdERlZmludGl0aW9uLFxuICBDb250ZW50U2NyaXB0RGVmaW5pdGlvbixcbiAgQ29udGVudFNjcmlwdEVudHJ5cG9pbnQsXG4gIEVudHJ5cG9pbnQsXG4gIEludGVybmFsQ29uZmlnLFxuICBPcHRpb25zRW50cnlwb2ludCxcbiAgUG9wdXBFbnRyeXBvaW50LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgbWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IHBhcnNlSFRNTCB9IGZyb20gJ2xpbmtlZG9tJztcbmltcG9ydCBKU09ONSBmcm9tICdqc29uNSc7XG5pbXBvcnQgeyBpbXBvcnRUc0ZpbGUgfSBmcm9tICcuLi91dGlscy9pbXBvcnRUc0ZpbGUnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnROYW1lIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEIH0gZnJvbSAnLi4vdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kJztcbmltcG9ydCB7IENTU19FWFRFTlNJT05TX1BBVFRFUk4gfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogUmV0dXJuIGVudHJ5cG9pbnRzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGJ5IGxvb2tpbmcgdGhyb3VnaCB0aGUgcHJvamVjdCdzIGZpbGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEVudHJ5cG9pbnRzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxFbnRyeXBvaW50W10+IHtcbiAgY29uc3QgcmVsYXRpdmVQYXRocyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7XG4gICAgY3dkOiBjb25maWcuZW50cnlwb2ludHNEaXIsXG4gIH0pO1xuICAvLyBFbnN1cmUgY29uc2lzdGVudCBvdXRwdXRcbiAgcmVsYXRpdmVQYXRocy5zb3J0KCk7XG5cbiAgY29uc3QgcGF0aEdsb2JzID0gT2JqZWN0LmtleXMoUEFUSF9HTE9CX1RPX1RZUEVfTUFQKTtcbiAgY29uc3QgZXhpc3RpbmdOYW1lczogUmVjb3JkPHN0cmluZywgRW50cnlwb2ludCB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICBjb25zdCBlbnRyeXBvaW50czogRW50cnlwb2ludFtdID0gW107XG4gIGxldCBoYXNCYWNrZ3JvdW5kID0gZmFsc2U7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlbGF0aXZlUGF0aHMubWFwKGFzeW5jIChyZWxhdGl2ZVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcmVsYXRpdmVQYXRoKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nR2xvYiA9IHBhdGhHbG9icy5maW5kKChnbG9iKSA9PlxuICAgICAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBnbG9iKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChtYXRjaGluZ0dsb2IgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAgIGAke3JlbGF0aXZlUGF0aH0gZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGVudHJ5cG9pbnQuIEtub3duIGVudHJ5cG9pbnRzOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBQQVRIX0dMT0JfVE9fVFlQRV9NQVAsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBQQVRIX0dMT0JfVE9fVFlQRV9NQVBbbWF0Y2hpbmdHbG9iXTtcbiAgICAgIGlmICh0eXBlID09PSAnaWdub3JlZCcpIHJldHVybjtcblxuICAgICAgbGV0IGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQ7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAncG9wdXAnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRQb3B1cEVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldE9wdGlvbnNFbnRyeXBvaW50KGNvbmZpZywgcGF0aCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JhY2tncm91bmQnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRCYWNrZ3JvdW5kRW50cnlwb2ludChjb25maWcsIHBhdGgpO1xuICAgICAgICAgIGhhc0JhY2tncm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdCc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29udGVudC1zY3JpcHQtc3R5bGUnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogY29uZmlnLm91dERpcixcbiAgICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3aXRoU2FtZU5hbWUgPSBleGlzdGluZ05hbWVzW2VudHJ5cG9pbnQubmFtZV07XG4gICAgICBpZiAod2l0aFNhbWVOYW1lKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIGBNdWx0aXBsZSBlbnRyeXBvaW50cyB3aXRoIHRoZSBuYW1lIFwiJHtcbiAgICAgICAgICAgIGVudHJ5cG9pbnQubmFtZVxuICAgICAgICAgIH1cIiBkZXRlY3RlZCwgYnV0IG9ubHkgb25lIGlzIGFsbG93ZWQ6ICR7W1xuICAgICAgICAgICAgcmVsYXRpdmUoY29uZmlnLnJvb3QsIHdpdGhTYW1lTmFtZS5pbnB1dFBhdGgpLFxuICAgICAgICAgICAgcmVsYXRpdmUoY29uZmlnLnJvb3QsIGVudHJ5cG9pbnQuaW5wdXRQYXRoKSxcbiAgICAgICAgICBdLmpvaW4oJywgJyl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVudHJ5cG9pbnRzLnB1c2goZW50cnlwb2ludCk7XG4gICAgICBleGlzdGluZ05hbWVzW2VudHJ5cG9pbnQubmFtZV0gPSBlbnRyeXBvaW50O1xuICAgIH0pLFxuICApO1xuICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgJiYgIWhhc0JhY2tncm91bmQpIHtcbiAgICBlbnRyeXBvaW50cy5wdXNoKFxuICAgICAgYXdhaXQgZ2V0QmFja2dyb3VuZEVudHJ5cG9pbnQoY29uZmlnLCBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5cG9pbnRzO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwYXRoIEFic29sdXRlIHBhdGggdG8gdGhlIHBvcHVwIEhUTUwgZmlsZS5cbiAqIEBwYXJhbSBjb250ZW50IFN0cmluZyBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UG9wdXBFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPFBvcHVwRW50cnlwb2ludD4ge1xuICBjb25zdCBvcHRpb25zOiBQb3B1cEVudHJ5cG9pbnRbJ29wdGlvbnMnXSA9IHt9O1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvbnRlbnQpO1xuXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGl0bGUnKTtcbiAgaWYgKHRpdGxlICE9IG51bGwpIG9wdGlvbnMuZGVmYXVsdFRpdGxlID0gdGl0bGUudGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGRlZmF1bHRJY29uQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmRlZmF1bHRfaWNvbiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGRlZmF1bHRJY29uQ29udGVudCkge1xuICAgIHRyeSB7XG4gICAgICBvcHRpb25zLmRlZmF1bHRJY29uID0gSlNPTjUucGFyc2UoZGVmYXVsdEljb25Db250ZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZmF0YWwoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgZGVmYXVsdF9pY29uIG1ldGEgdGFnIGNvbnRlbnQgYXMgSlNPTjUuIGNvbnRlbnQ9JHtkZWZhdWx0SWNvbkNvbnRlbnR9YCxcbiAgICAgICAgZXJyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtdjJLZXlDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QudHlwZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG12MktleUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm12MktleSA9XG4gICAgICBtdjJLZXlDb250ZW50ID09PSAncGFnZV9hY3Rpb24nID8gJ3BhZ2VfYWN0aW9uJyA6ICdicm93c2VyX2FjdGlvbic7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdwb3B1cCcsXG4gICAgbmFtZTogJ3BvcHVwJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgb3B0aW9ucyBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnNFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPE9wdGlvbnNFbnRyeXBvaW50PiB7XG4gIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnNFbnRyeXBvaW50WydvcHRpb25zJ10gPSB7fTtcblxuICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aCwgJ3V0Zi04Jyk7XG4gIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHBhcnNlSFRNTChjb250ZW50KTtcblxuICBjb25zdCBvcGVuSW5UYWJDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3Qub3Blbl9pbl90YWInXVwiKVxuICAgID8uZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGlmIChvcGVuSW5UYWJDb250ZW50KSB7XG4gICAgb3B0aW9ucy5vcGVuSW5UYWIgPSBvcGVuSW5UYWJDb250ZW50ID09PSAndHJ1ZSc7XG4gIH1cblxuICBjb25zdCBjaHJvbWVTdHlsZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5jaHJvbWVfc3R5bGUnXVwiKVxuICAgID8uZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGlmIChjaHJvbWVTdHlsZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmNocm9tZVN0eWxlID0gY2hyb21lU3R5bGVDb250ZW50ID09PSAndHJ1ZSc7XG4gIH1cblxuICBjb25zdCBicm93c2VyU3R5bGVDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QuYnJvd3Nlcl9zdHlsZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGJyb3dzZXJTdHlsZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmJyb3dzZXJTdHlsZSA9IGJyb3dzZXJTdHlsZUNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ29wdGlvbnMnLFxuICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgYmFja2dyb3VuZCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEJhY2tncm91bmRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEJhY2tncm91bmRFbnRyeXBvaW50PiB7XG4gIGxldCBvcHRpb25zOiBPbWl0PEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbiwgJ21haW4nPiA9IHt9O1xuICBpZiAocGF0aCAhPT0gVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9IGF3YWl0IGltcG9ydFRzRmlsZTxCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24+KFxuICAgICAgcGF0aCxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICAgIGlmIChkZWZhdWx0RXhwb3J0ID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdCYWNrZ3JvdW5kIHNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCBleHBvcnQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBtYWluOiBfLCAuLi5tb2R1bGVPcHRpb25zIH0gPSBkZWZhdWx0RXhwb3J0O1xuICAgIG9wdGlvbnMgPSBtb2R1bGVPcHRpb25zO1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2JhY2tncm91bmQnLFxuICAgIG5hbWU6ICdiYWNrZ3JvdW5kJyxcbiAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgY29udGVudCBzY3JpcHQncyBUUyBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDb250ZW50U2NyaXB0RW50cnlwb2ludChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPENvbnRlbnRTY3JpcHRFbnRyeXBvaW50PiB7XG4gIGNvbnN0IHsgbWFpbjogXywgLi4ub3B0aW9ucyB9ID0gYXdhaXQgaW1wb3J0VHNGaWxlPENvbnRlbnRTY3JpcHREZWZpbml0aW9uPihcbiAgICBwYXRoLFxuICAgIGNvbmZpZyxcbiAgKTtcbiAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKGBDb250ZW50IHNjcmlwdCAke25hbWV9IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IGV4cG9ydGApO1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgICBuYW1lOiBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIHBhdGgpLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IHJlc29sdmUoY29uZmlnLm91dERpciwgQ09OVEVOVF9TQ1JJUFRfT1VUX0RJUiksXG4gICAgb3B0aW9ucyxcbiAgfTtcbn1cblxuY29uc3QgUEFUSF9HTE9CX1RPX1RZUEVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBFbnRyeXBvaW50Wyd0eXBlJ10gfCAnaWdub3JlZCc+ID0ge1xuICAnc2FuZGJveC5odG1sJzogJ3NhbmRib3gnLFxuICAnc2FuZGJveC9pbmRleC5odG1sJzogJ3NhbmRib3gnLFxuICAnKi5zYW5kYm94Lmh0bWwnOiAnc2FuZGJveCcsXG4gICcqLnNhbmRib3gvaW5kZXguaHRtbCc6ICdzYW5kYm94JyxcblxuICAnYm9va21hcmtzLmh0bWwnOiAnYm9va21hcmtzJyxcbiAgJ2Jvb2ttYXJrcy9pbmRleC5odG1sJzogJ2Jvb2ttYXJrcycsXG5cbiAgJ2hpc3RvcnkuaHRtbCc6ICdoaXN0b3J5JyxcbiAgJ2hpc3RvcnkvaW5kZXguaHRtbCc6ICdoaXN0b3J5JyxcblxuICAnbmV3dGFiLmh0bWwnOiAnbmV3dGFiJyxcbiAgJ25ld3RhYi9pbmRleC5odG1sJzogJ25ld3RhYicsXG5cbiAgJ3NpZGVwYW5lbC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICdzaWRlcGFuZWwvaW5kZXguaHRtbCc6ICdzaWRlcGFuZWwnLFxuICAnKi5zaWRlcGFuZWwuaHRtbCc6ICdzaWRlcGFuZWwnLFxuICAnKi5zaWRlcGFuZWwvaW5kZXguaHRtbCc6ICdzaWRlcGFuZWwnLFxuXG4gICdkZXZ0b29scy5odG1sJzogJ2RldnRvb2xzJyxcbiAgJ2RldnRvb2xzL2luZGV4Lmh0bWwnOiAnZGV2dG9vbHMnLFxuXG4gICdiYWNrZ3JvdW5kLnRzJzogJ2JhY2tncm91bmQnLFxuICBbVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEXTogJ2JhY2tncm91bmQnLFxuXG4gICdjb250ZW50LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICdjb250ZW50L2luZGV4LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICcqLmNvbnRlbnQudHM/KHgpJzogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgJyouY29udGVudC9pbmRleC50cz8oeCknOiAnY29udGVudC1zY3JpcHQnLFxuICBbYGNvbnRlbnQuJHtDU1NfRVhURU5TSU9OU19QQVRURVJOfWBdOiAnY29udGVudC1zY3JpcHQtc3R5bGUnLFxuICBbYCouY29udGVudC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgY29udGVudC9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgKi5jb250ZW50L2luZGV4LiR7Q1NTX0VYVEVOU0lPTlNfUEFUVEVSTn1gXTogJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyxcblxuICAncG9wdXAuaHRtbCc6ICdwb3B1cCcsXG4gICdwb3B1cC9pbmRleC5odG1sJzogJ3BvcHVwJyxcblxuICAnb3B0aW9ucy5odG1sJzogJ29wdGlvbnMnLFxuICAnb3B0aW9ucy9pbmRleC5odG1sJzogJ29wdGlvbnMnLFxuXG4gICcqLmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqL2luZGV4Lmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqLnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gICcqL2luZGV4LnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gIFtgKi4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG4gIFtgKi9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG5cbiAgLy8gRG9uJ3Qgd2FybiBhYm91dCBhbnkgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGxpa2UgQ1NTIG9yIEpTIGVudHJ5cG9pbnRzIGZvciBIVE1MIGZpbGVzXG4gICcqLyonOiAnaWdub3JlZCcsXG59O1xuXG5jb25zdCBDT05URU5UX1NDUklQVF9PVVRfRElSID0gJ2NvbnRlbnQtc2NyaXB0cyc7XG4iLCAiaW1wb3J0IGNyZWF0ZUpJVEkgZnJvbSAnaml0aSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVVuaW1wb3J0IH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB0cmFuc2Zvcm0gZnJvbSAnaml0aS9kaXN0L2JhYmVsJztcbmltcG9ydCB7IGdldFVuaW1wb3J0T3B0aW9ucyB9IGZyb20gJy4vYXV0by1pbXBvcnRzJztcbmltcG9ydCB7IHJlbW92ZUltcG9ydFN0YXRlbWVudHMgfSBmcm9tICcuL3N0cmluZ3MnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBleHBvcnQgb2YgYSBgcGF0aGAuXG4gKlxuICogSXQgd29ya3MgYnk6XG4gKlxuICogMS4gUmVhZGluZyB0aGUgZmlsZSB0ZXh0XG4gKiAyLiBTdHJpcHBpbmcgYWxsIGltcG9ydHMgZnJvbSBpdCB2aWEgcmVnZXhcbiAqIDMuIEF1dG8taW1wb3J0IG9ubHkgdGhlIGNsaWVudCBoZWxwZXIgZnVuY3Rpb25zXG4gKlxuICogVGhpcyBwcmV2ZW50cyByZXNvbHZpbmcgaW1wb3J0cyBvZiBpbXBvcnRzLCBzcGVlZGluZyB0aGluZ3MgdXAgYW5kIHByZXZlbnRpbmcgXCJ4eHggaXMgbm90XG4gKiBkZWZpbmVkXCIgZXJyb3JzLlxuICpcbiAqIERvd25zaWRlIGlzIHRoYXQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgbWFpbiBmdWNudGlvbiBmb3IgdGhlIGVudHJ5cG9pbnQsXG4gKiBvdGhlcndpc2UgeW91IHdpbGwgc2VlIFwieHh4IGlzIG5vdCBkZWZpbmVkXCIgZXJyb3JzIGZvciBhbnkgaW1wb3J0cyB1c2VkIG91dHNpZGUgb2YgbWFpbiBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFRzRmlsZTxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgZmlsZSBtZXRhZGF0YTonLCBwYXRoKTtcbiAgLy8gSklUSSAmIEJhYmVsIHVzZXMgbm9ybWFsaXplZCBwYXRocy5cbiAgY29uc3Qgbm9ybWFsUGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XG5cbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydCh7XG4gICAgLi4uZ2V0VW5pbXBvcnRPcHRpb25zKGNvbmZpZyksXG4gICAgLy8gT25seSBhbGxvdyBzcGVjaWZpYyBpbXBvcnRzLCBub3QgYWxsIGZyb20gdGhlIHByb2plY3RcbiAgICBkaXJzOiBbXSxcbiAgfSk7XG4gIGF3YWl0IHVuaW1wb3J0LmluaXQoKTtcblxuICBjb25zdCB0ZXh0ID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aCwgJ3V0Zi04Jyk7XG4gIGNvbnN0IHRleHROb0ltcG9ydHMgPSByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQpO1xuICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHVuaW1wb3J0LmluamVjdEltcG9ydHModGV4dE5vSW1wb3J0cyk7XG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgWydUZXh0OicsIHRleHQsICdObyBpbXBvcnRzOicsIHRleHROb0ltcG9ydHMsICdDb2RlOicsIGNvZGVdLmpvaW4oJ1xcbicpLFxuICApO1xuXG4gIGNvbnN0IGppdGkgPSBjcmVhdGVKSVRJKF9fZmlsZW5hbWUsIHtcbiAgICBjYWNoZTogZmFsc2UsXG4gICAgZXNtUmVzb2x2ZTogdHJ1ZSxcbiAgICBpbnRlcm9wRGVmYXVsdDogdHJ1ZSxcbiAgICBhbGlhczoge1xuICAgICAgJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc6IHJlc29sdmUoXG4gICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAnbm9kZV9tb2R1bGVzL3d4dC9kaXN0L3ZpcnR1YWwtbW9kdWxlcy9mYWtlLWJyb3dzZXIuanMnLFxuICAgICAgKSxcbiAgICB9LFxuICAgIHRyYW5zZm9ybShvcHRzKSB7XG4gICAgICBpZiAob3B0cy5maWxlbmFtZSA9PT0gbm9ybWFsUGF0aClcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybSh7IC4uLm9wdHMsIHNvdXJjZTogY29kZSB9KTtcbiAgICAgIGVsc2UgcmV0dXJuIHRyYW5zZm9ybShvcHRzKTtcbiAgICB9LFxuICB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBqaXRpKHBhdGgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25maWcubG9nZ2VyLmVycm9yKGVycik7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGtlYmFiQ2FzZUFscGhhbnVtZXJpYyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOS1cXHNdL2csICcnKSAvLyBSZW1vdmUgYWxsIG5vbi1hbHBoYW51bWVyaWMsIG5vbi1oeXBoZW4gY2hhcmFjdGVyc1xuICAgIC5yZXBsYWNlKC9cXHMrL2csICctJyk7IC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggaHlwaGVuc1xufVxuXG4vKipcbiAqIFJlbW92ZXMgaW1wb3J0IHN0YXRlbWVudHMgZnJvbSB0aGUgdG9wIG9mIGEgZmlsZS4gS2VlcHMgaW1wb3J0Lm1ldGEgYW5kIGlubGluZSwgYXN5bmMgYGltcG9ydCgpYFxuICogY2FsbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoXG4gICAgLyhpbXBvcnRcXHM/W3tcXHddW1xcc1xcU10qP2Zyb21cXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107P3xpbXBvcnRcXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107PykvZ20sXG4gICAgJycsXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlVW5pbXBvcnQgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFscyB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IHsgZ2V0UHVibGljRmlsZXMgfSBmcm9tICcuLi91dGlscy9wdWJsaWMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBHZW5lcmF0ZSBhbmQgd3JpdGUgYWxsIHRoZSBmaWxlcyBpbnNpZGUgdGhlIGBJbnRlcm5hbENvbmZpZy50eXBlc0RpcmAgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlc0RpcihcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLnR5cGVzRGlyKTtcblxuICBjb25zdCByZWZlcmVuY2VzOiBzdHJpbmdbXSA9IFtdO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVJbXBvcnRzRGVjbGFyYXRpb25GaWxlKGNvbmZpZykpO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVQYXRoc0RlY2xhcmF0aW9uRmlsZShlbnRyeXBvaW50cywgY29uZmlnKSk7XG4gIHJlZmVyZW5jZXMucHVzaChhd2FpdCB3cml0ZUdsb2JhbHNEZWNsYXJhdGlvbkZpbGUoY29uZmlnKSk7XG5cbiAgY29uc3QgbWFpblJlZmVyZW5jZSA9IGF3YWl0IHdyaXRlTWFpbkRlY2xhcmF0aW9uRmlsZShyZWZlcmVuY2VzLCBjb25maWcpO1xuICBhd2FpdCB3cml0ZVRzQ29uZmlnRmlsZShtYWluUmVmZXJlbmNlLCBjb25maWcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUltcG9ydHNEZWNsYXJhdGlvbkZpbGUoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAnaW1wb3J0cy5kLnRzJyk7XG4gIGNvbnN0IHVuaW1wb3J0ID0gY3JlYXRlVW5pbXBvcnQoZ2V0VW5pbXBvcnRPcHRpb25zKGNvbmZpZykpO1xuXG4gIC8vIExvYWQgcHJvamVjdCBpbXBvcnRzIGludG8gdW5pbXBvcnQgbWVtb3J5IHNvIHRoZXkgYXJlIG91dHB1dCB2aWEgZ2VuZXJhdGVUeXBlRGVjbGFyYXRpb25zXG4gIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuXG4gIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICBbJy8vIEdlbmVyYXRlZCBieSB3eHQnLCBhd2FpdCB1bmltcG9ydC5nZW5lcmF0ZVR5cGVEZWNsYXJhdGlvbnMoKV0uam9pbihcbiAgICAgICdcXG4nLFxuICAgICkgKyAnXFxuJyxcbiAgKTtcblxuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlUGF0aHNEZWNsYXJhdGlvbkZpbGUoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAncGF0aHMuZC50cycpO1xuICBjb25zdCB1bmlvbnMgPSBlbnRyeXBvaW50c1xuICAgIC5tYXAoKGVudHJ5KSA9PlxuICAgICAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGVudHJ5LFxuICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICBlbnRyeS5pbnB1dFBhdGguZW5kc1dpdGgoJy5odG1sJykgPyAnLmh0bWwnIDogJy5qcycsXG4gICAgICApLFxuICAgIClcbiAgICAuY29uY2F0KGF3YWl0IGdldFB1YmxpY0ZpbGVzKGNvbmZpZykpXG4gICAgLm1hcChub3JtYWxpemVQYXRoKVxuICAgIC5tYXAoKHBhdGgpID0+IGAgICAgfCBcIi8ke3BhdGh9XCJgKVxuICAgIC5zb3J0KClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBgLy8gR2VuZXJhdGVkIGJ5IHd4dFxuaW1wb3J0IFwid3h0L2Jyb3dzZXJcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJ3eHQvYnJvd3NlclwiIHtcbiAgdHlwZSBQdWJsaWNQYXRoID1cbnt7IHVuaW9uIH19XG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lLlN0YXRpYyB7XG4gICAgZ2V0VVJMKHBhdGg6IFB1YmxpY1BhdGgpOiBzdHJpbmc7XG4gIH1cbn1cbmA7XG5cbiAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIHRlbXBsYXRlLnJlcGxhY2UoJ3t7IHVuaW9uIH19JywgdW5pb25zIHx8ICcgICAgfCBuZXZlcicpLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHbG9iYWxzRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ2dsb2JhbHMuZC50cycpO1xuICBjb25zdCBnbG9iYWxzID0gZ2V0R2xvYmFscyhjb25maWcpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgZmlsZVBhdGgsXG4gICAgW1xuICAgICAgJy8vIEdlbmVyYXRlZCBieSB3eHQnLFxuICAgICAgJ2V4cG9ydCB7fScsXG4gICAgICAnZGVjbGFyZSBnbG9iYWwgeycsXG4gICAgICAuLi5nbG9iYWxzLm1hcCgoZ2xvYmFsKSA9PiBgICBjb25zdCAke2dsb2JhbC5uYW1lfTogJHtnbG9iYWwudHlwZX07YCksXG4gICAgICAnfScsXG4gICAgXS5qb2luKCdcXG4nKSArICdcXG4nLFxuICAgICd1dGYtOCcsXG4gICk7XG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVNYWluRGVjbGFyYXRpb25GaWxlKFxuICByZWZlcmVuY2VzOiBzdHJpbmdbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRpciA9IGNvbmZpZy53eHREaXI7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShkaXIsICd3eHQuZC50cycpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgZmlsZVBhdGgsXG4gICAgW1xuICAgICAgJy8vIEdlbmVyYXRlZCBieSB3eHQnLFxuICAgICAgYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZS9jbGllbnRcIiAvPmAsXG4gICAgICAuLi5yZWZlcmVuY2VzLm1hcChcbiAgICAgICAgKHJlZikgPT5cbiAgICAgICAgICBgLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuLyR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIHJlZikpfVwiIC8+YCxcbiAgICAgICksXG4gICAgXS5qb2luKCdcXG4nKSArICdcXG4nLFxuICApO1xuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlVHNDb25maWdGaWxlKFxuICBtYWluUmVmZXJlbmNlOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgY29uc3QgZGlyID0gY29uZmlnLnd4dERpcjtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgIHJlc29sdmUoZGlyLCAndHNjb25maWcuanNvbicpLFxuICAgIGB7XG4gIFwiY29tcGlsZXJPcHRpb25zXCI6IHtcbiAgICBcInRhcmdldFwiOiBcIkVTTmV4dFwiLFxuICAgIFwibW9kdWxlXCI6IFwiRVNOZXh0XCIsXG4gICAgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwiQnVuZGxlclwiLFxuICAgIFwibm9FbWl0XCI6IHRydWUsXG4gICAgXCJlc01vZHVsZUludGVyb3BcIjogdHJ1ZSxcbiAgICBcImZvcmNlQ29uc2lzdGVudENhc2luZ0luRmlsZU5hbWVzXCI6IHRydWUsXG4gICAgXCJyZXNvbHZlSnNvbk1vZHVsZVwiOiB0cnVlLFxuICAgIFwic3RyaWN0XCI6IHRydWUsXG4gICAgXCJsaWJcIjogW1wiRE9NXCIsIFwiV2ViV29ya2VyXCJdLFxuICAgIFwic2tpcExpYkNoZWNrXCI6IHRydWUsXG4gICAgXCJiYXNlVXJsXCI6IFwiJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLnJvb3QpKX1cIixcbiAgICBcInBhdGhzXCI6IHtcbiAgICAgIFwiQEBcIjogW1wiLlwiXSxcbiAgICAgIFwiQEAvKlwiOiBbXCIuLypcIl0sXG4gICAgICBcIn5+XCI6IFtcIi5cIl0sXG4gICAgICBcIn5+LypcIjogW1wiLi8qXCJdLFxuICAgICAgXCJAXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfVwiXSxcbiAgICAgIFwiQC8qXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfS8qXCJdLFxuICAgICAgXCJ+XCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfVwiXSxcbiAgICAgIFwifi8qXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShjb25maWcucm9vdCwgY29uZmlnLnNyY0RpcikpfS8qXCJdXG4gICAgfVxuICB9LFxuICBcImluY2x1ZGVcIjogW1xuICAgIFwiJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLnJvb3QpKX0vKiovKlwiLFxuICAgIFwiLi8ke25vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBtYWluUmVmZXJlbmNlKSl9XCJcbiAgXSxcbiAgXCJleGNsdWRlXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIGNvbmZpZy5vdXRCYXNlRGlyKSl9XCJdXG59YCxcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBFbnRyeXBvaW50IH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgTWFuaWZlc3QgfSBmcm9tICd3ZWJleHRlbnNpb24tcG9seWZpbGwnO1xuaW1wb3J0IHtcbiAgQmFja2dyb3VuZEVudHJ5cG9pbnQsXG4gIEJ1aWxkT3V0cHV0LFxuICBDb250ZW50U2NyaXB0RW50cnlwb2ludCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIE9wdGlvbnNFbnRyeXBvaW50LFxuICBQb3B1cEVudHJ5cG9pbnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4vZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgQ29udGVudFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi9Db250ZW50U2VjdXJpdHlQb2xpY3knO1xuaW1wb3J0IHtcbiAgaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zLFxuICBtYXBXeHRPcHRpb25zVG9Db250ZW50U2NyaXB0LFxufSBmcm9tICcuL2NvbnRlbnQtc2NyaXB0cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlSnNvbiB9IGZyb20gJy4vcGFja2FnZSc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbi8qKlxuICogV3JpdGVzIHRoZSBtYW5pZmVzdCB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeSBhbmQgdGhlIGJ1aWxkIG91dHB1dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlTWFuaWZlc3QoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgb3V0cHV0OiBCdWlsZE91dHB1dCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdHIgPVxuICAgIGNvbmZpZy5tb2RlID09PSAncHJvZHVjdGlvbidcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpXG4gICAgICA6IEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0LCBudWxsLCAyKTtcblxuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLm91dERpcik7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShyZXNvbHZlKGNvbmZpZy5vdXREaXIsICdtYW5pZmVzdC5qc29uJyksIHN0ciwgJ3V0Zi04Jyk7XG5cbiAgb3V0cHV0LnB1YmxpY0Fzc2V0cy51bnNoaWZ0KHtcbiAgICB0eXBlOiAnYXNzZXQnLFxuICAgIGZpbGVOYW1lOiAnbWFuaWZlc3QuanNvbicsXG4gICAgbmFtZTogJ21hbmlmZXN0JyxcbiAgICBuZWVkc0NvZGVSZWZlcmVuY2U6IGZhbHNlLFxuICAgIHNvdXJjZTogc3RyLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIG1hbmlmZXN0IGJhc2VkIG9uIHRoZSBjb25maWcgYW5kIGVudHJ5cG9pbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNYWluZmVzdChcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgYnVpbGRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdD4ge1xuICBjb25zdCBwa2cgPSBhd2FpdCBnZXRQYWNrYWdlSnNvbihjb25maWcpO1xuXG4gIGNvbnN0IG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgbWFuaWZlc3RfdmVyc2lvbjogY29uZmlnLm1hbmlmZXN0VmVyc2lvbixcbiAgICAgIG5hbWU6IHBrZz8ubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwa2c/LmRlc2NyaXB0aW9uLFxuICAgICAgdmVyc2lvbjogcGtnPy52ZXJzaW9uICYmIHNpbXBsaWZ5VmVyc2lvbihwa2cudmVyc2lvbiksXG4gICAgICAvLyBPbmx5IGFkZCB0aGUgdmVyc2lvbiBuYW1lIHRvIGNocm9taXVtIGFuZCBpZiB0aGUgdXNlciBoYXNuJ3Qgc3BlY2lmaWVkIGEgY3VzdG9tIHZlcnNpb24uXG4gICAgICB2ZXJzaW9uX25hbWU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyICE9PSAnZmlyZWZveCcgJiYgIWNvbmZpZy5tYW5pZmVzdC52ZXJzaW9uXG4gICAgICAgICAgPyBwa2c/LnZlcnNpb25cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHNob3J0X25hbWU6IHBrZz8uc2hvcnROYW1lLFxuICAgICAgaWNvbnM6IGRpc2NvdmVySWNvbnMoYnVpbGRPdXRwdXQpLFxuICAgIH0sXG4gICAgY29uZmlnLm1hbmlmZXN0LFxuICApO1xuXG4gIGFkZEVudHJ5cG9pbnRzKG1hbmlmZXN0LCBlbnRyeXBvaW50cywgYnVpbGRPdXRwdXQsIGNvbmZpZyk7XG5cbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnKSBhZGREZXZNb2RlQ3NwKG1hbmlmZXN0LCBjb25maWcpO1xuICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScpIGFkZERldk1vZGVQZXJtaXNzaW9ucyhtYW5pZmVzdCwgY29uZmlnKTtcblxuICAvLyBUT0RPOiB0cmFuc2Zvcm0gbWFuaWZlc3QgaGVyZS5cblxuICBpZiAobWFuaWZlc3QubmFtZSA9PSBudWxsKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJNYW5pZmVzdCAnbmFtZScgaXMgbWlzc2luZy4gRWl0aGVyOlxcbjEuIFNldCB0aGUgbmFtZSBpbiB5b3VyIDxyb290RGlyPi9wYWNrYWdlLmpzb25cXG4yLiBTZXQgYSBuYW1lIHZpYSB0aGUgbWFuaWZlc3Qgb3B0aW9uIGluIHlvdXIgd3h0LmNvbmZpZy50c1wiLFxuICAgICk7XG4gIGlmIChtYW5pZmVzdC52ZXJzaW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiTWFuaWZlc3QgJ3ZlcnNpb24nIGlzIG1pc3NpbmcuIEVpdGhlcjpcXG4xLiBBZGQgYSB2ZXJzaW9uIGluIHlvdXIgPHJvb3REaXI+L3BhY2thZ2UuanNvblxcbjIuIFBhc3MgdGhlIHZlcnNpb24gdmlhIHRoZSBtYW5pZmVzdCBvcHRpb24gaW4geW91ciB3eHQuY29uZmlnLnRzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHN1ZmZpeGVzIGZyb20gdGhlIHZlcnNpb24sIGxpa2UgWC5ZLlotYWxwaGExICh3aGljaCBicm9zZXJzIGRvbid0IGFsbG93KSwgc28gaXQncyBhXG4gKiBzaW1wbGUgdmVyc2lvbiBudW1iZXIsIGxpa2UgWCBvciBYLlkgb3IgWC5ZLlosIHdoaWNoIGJyb3dzZXJzIGFsbG93LlxuICovXG5mdW5jdGlvbiBzaW1wbGlmeVZlcnNpb24odmVyc2lvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlZ2V4IGFkYXB0ZWQgZnJvbSBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvQWRkLW9ucy9XZWJFeHRlbnNpb25zL21hbmlmZXN0Lmpzb24vdmVyc2lvbiN2ZXJzaW9uX2Zvcm1hdFxuICBjb25zdCB2ZXJzaW9uID0gL14oKDB8WzEtOV1bMC05XXswLDh9KShbLl0oMHxbMS05XVswLTldezAsOH0pKXswLDN9KS4qJC8uZXhlYyhcbiAgICB2ZXJzaW9uTmFtZSxcbiAgKT8uWzFdO1xuXG4gIGlmICh2ZXJzaW9uID09IG51bGwpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNpbXBsaWZ5IHBhY2thZ2UuanNvbiB2ZXJzaW9uIFwiJHt2ZXJzaW9uTmFtZX1cIiB0byBhIHZhbGlkIGV4dGVuc2lvbiB2ZXJzaW9uLCBcIlguWS5aXCJgLFxuICAgICk7XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmZ1bmN0aW9uIGFkZEVudHJ5cG9pbnRzKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBlbnRyaWVzQnlUeXBlID0gZW50cnlwb2ludHMucmVkdWNlPFxuICAgIFBhcnRpYWw8UmVjb3JkPEVudHJ5cG9pbnRbJ3R5cGUnXSwgRW50cnlwb2ludFtdPj5cbiAgPigobWFwLCBlbnRyeXBvaW50KSA9PiB7XG4gICAgbWFwW2VudHJ5cG9pbnQudHlwZV0gPz89IFtdO1xuICAgIG1hcFtlbnRyeXBvaW50LnR5cGVdPy5wdXNoKGVudHJ5cG9pbnQpO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcblxuICBjb25zdCBiYWNrZ3JvdW5kID0gZW50cmllc0J5VHlwZVsnYmFja2dyb3VuZCddPy5bMF0gYXNcbiAgICB8IEJhY2tncm91bmRFbnRyeXBvaW50XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvb2ttYXJrcyA9IGVudHJpZXNCeVR5cGVbJ2Jvb2ttYXJrcyddPy5bMF07XG4gIGNvbnN0IGNvbnRlbnRTY3JpcHRzID0gZW50cmllc0J5VHlwZVsnY29udGVudC1zY3JpcHQnXSBhc1xuICAgIHwgQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbXVxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXZ0b29scyA9IGVudHJpZXNCeVR5cGVbJ2RldnRvb2xzJ10/LlswXTtcbiAgY29uc3QgaGlzdG9yeSA9IGVudHJpZXNCeVR5cGVbJ2hpc3RvcnknXT8uWzBdO1xuICBjb25zdCBuZXd0YWIgPSBlbnRyaWVzQnlUeXBlWyduZXd0YWInXT8uWzBdO1xuICBjb25zdCBvcHRpb25zID0gZW50cmllc0J5VHlwZVsnb3B0aW9ucyddPy5bMF0gYXNcbiAgICB8IE9wdGlvbnNFbnRyeXBvaW50XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHBvcHVwID0gZW50cmllc0J5VHlwZVsncG9wdXAnXT8uWzBdIGFzIFBvcHVwRW50cnlwb2ludCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2FuZGJveGVzID0gZW50cmllc0J5VHlwZVsnc2FuZGJveCddO1xuICBjb25zdCBzaWRlcGFuZWxzID0gZW50cmllc0J5VHlwZVsnc2lkZXBhbmVsJ107XG5cbiAgaWYgKGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBzY3JpcHQgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChiYWNrZ3JvdW5kLCBjb25maWcub3V0RGlyLCAnLmpzJyk7XG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0X3ZlcnNpb24gPT09IDMpIHtcbiAgICAgIG1hbmlmZXN0LmJhY2tncm91bmQgPSB7XG4gICAgICAgIHR5cGU6IGJhY2tncm91bmQub3B0aW9ucy50eXBlLFxuICAgICAgICBzZXJ2aWNlX3dvcmtlcjogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuYmFja2dyb3VuZCA9IHtcbiAgICAgICAgcGVyc2lzdGVudDogYmFja2dyb3VuZC5vcHRpb25zLnBlcnNpc3RlbnQsXG4gICAgICAgIHNjcmlwdHM6IFtzY3JpcHRdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoYm9va21hcmtzKSB7XG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ0Jvb2ttYXJrcyBhcmUgbm90IHN1cHBvcnRlZCBieSBGaXJlZm94LiBjaHJvbWVfdXJsX292ZXJyaWRlcy5ib29rbWFya3Mgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMgPz89IHt9O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYm9va21hcmtzIGlzIHVudHlwZWQgaW4gd2ViZXh0ZW5zaW9uLXBvbHlmaWxsLCBidXQgc3VwcG9ydGVkIGJ5IGNocm9tZVxuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMuYm9va21hcmtzID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGJvb2ttYXJrcyxcbiAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgJy5odG1sJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhpc3RvcnkpIHtcbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnQm9va21hcmtzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IEZpcmVmb3guIGNocm9tZV91cmxfb3ZlcnJpZGVzLmhpc3Rvcnkgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMgPz89IHt9O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogaGlzdG9yeSBpcyB1bnR5cGVkIGluIHdlYmV4dGVuc2lvbi1wb2x5ZmlsbCwgYnV0IHN1cHBvcnRlZCBieSBjaHJvbWVcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzLmhpc3RvcnkgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgJy5odG1sJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5ld3RhYikge1xuICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzID8/PSB7fTtcbiAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcy5uZXd0YWIgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIG5ld3RhYixcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG4gIH1cblxuICBpZiAocG9wdXApIHtcbiAgICBjb25zdCBkZWZhdWx0X3BvcHVwID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICBwb3B1cCxcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uczogTWFuaWZlc3QuQWN0aW9uTWFuaWZlc3QgPSB7XG4gICAgICBkZWZhdWx0X2ljb246IHBvcHVwLm9wdGlvbnMuZGVmYXVsdEljb24sXG4gICAgICBkZWZhdWx0X3RpdGxlOiBwb3B1cC5vcHRpb25zLmRlZmF1bHRUaXRsZSxcbiAgICB9O1xuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgICBtYW5pZmVzdC5hY3Rpb24gPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRfcG9wdXAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5pZmVzdFtwb3B1cC5vcHRpb25zLm12MktleSA/PyAnYnJvd3Nlcl9hY3Rpb24nXSA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVmYXVsdF9wb3B1cCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGRldnRvb2xzKSB7XG4gICAgbWFuaWZlc3QuZGV2dG9vbHNfcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgZGV2dG9vbHMsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYWdlID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgob3B0aW9ucywgY29uZmlnLm91dERpciwgJy5odG1sJyk7XG4gICAgbWFuaWZlc3Qub3B0aW9uc191aSA9IHtcbiAgICAgIG9wZW5faW5fdGFiOiBvcHRpb25zLm9wdGlvbnMub3BlbkluVGFiLFxuICAgICAgYnJvd3Nlcl9zdHlsZTpcbiAgICAgICAgY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyA/IG9wdGlvbnMub3B0aW9ucy5icm93c2VyU3R5bGUgOiB1bmRlZmluZWQsXG4gICAgICBjaHJvbWVfc3R5bGU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyICE9PSAnZmlyZWZveCcgPyBvcHRpb25zLm9wdGlvbnMuY2hyb21lU3R5bGUgOiB1bmRlZmluZWQsXG4gICAgICBwYWdlLFxuICAgIH07XG4gIH1cblxuICBpZiAoc2FuZGJveGVzPy5sZW5ndGgpIHtcbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnU2FuZGJveGVkIHBhZ2VzIG5vdCBzdXBwb3J0ZWQgYnkgRmlyZWZveC4gc2FuZGJveC5wYWdlcyB3YXMgbm90IGFkZGVkIHRvIHRoZSBtYW5pZmVzdCcsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBzYW5kYm94IG5vdCB0eXBlZFxuICAgICAgbWFuaWZlc3Quc2FuZGJveCA9IHtcbiAgICAgICAgcGFnZXM6IHNhbmRib3hlcy5tYXAoKGVudHJ5KSA9PlxuICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmh0bWwnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHNpZGVwYW5lbHM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRTaWRlcGFuZWwgPVxuICAgICAgc2lkZXBhbmVscy5maW5kKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gJ3NpZGVwYW5lbCcpID8/IHNpZGVwYW5lbHNbMF07XG4gICAgY29uc3QgcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgZGVmYXVsdFNpZGVwYW5lbCxcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG5cbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgbWFuaWZlc3Quc2lkZWJhcl9hY3Rpb24gPSB7XG4gICAgICAgIC8vIFRPRE86IEFkZCBvcHRpb25zIHRvIHNpZGUgcGFuZWxcbiAgICAgICAgLy8gLi4uZGVmYXVsdFNpZGVwYW5lbC5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0X3BhbmVsOiBwYWdlLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPT09IDMpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IFVudHlwZWRcbiAgICAgIG1hbmlmZXN0LnNpZGVfcGFuZWwgPSB7XG4gICAgICAgIGRlZmF1bHRfcGF0aDogcGFnZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ1NpZGUgcGFuZWwgbm90IHN1cHBvcnRlZCBieSBDaHJvbWl1bSB1c2luZyBNVjIuIHNpZGVfcGFuZWwuZGVmYXVsdF9wYXRoIHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRlbnRTY3JpcHRzPy5sZW5ndGgpIHtcbiAgICAvLyBEb24ndCBhZGQgY29udGVudCBzY3JpcHRzIHRvIHRoZSBtYW5pZmVzdCBpbiBkZXYgbW9kZSBmb3IgTVYzIC0gdGhleSdyZSBtYW5hZ2VkIGFuZCByZWxvYWRlZFxuICAgIC8vIGF0IHJ1bnRpbWVcbiAgICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgJiYgY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgICAgY29uc3QgaG9zdFBlcm1pc3Npb25zID0gbmV3IFNldDxzdHJpbmc+KG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz8gW10pO1xuICAgICAgY29udGVudFNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgIHNjcmlwdC5vcHRpb25zLm1hdGNoZXMuZm9yRWFjaCgobWF0Y2hQYXR0ZXJuKSA9PiB7XG4gICAgICAgICAgaG9zdFBlcm1pc3Npb25zLmFkZChtYXRjaFBhdHRlcm4pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaG9zdFBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+XG4gICAgICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhc2hUb0VudHJ5cG9pbnRzTWFwID0gY29udGVudFNjcmlwdHMucmVkdWNlKChtYXAsIHNjcmlwdCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoID0gaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zKHNjcmlwdC5vcHRpb25zKTtcbiAgICAgICAgaWYgKG1hcC5oYXMoaGFzaCkpIG1hcC5nZXQoaGFzaCk/LnB1c2goc2NyaXB0KTtcbiAgICAgICAgZWxzZSBtYXAuc2V0KGhhc2gsIFtzY3JpcHRdKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sIG5ldyBNYXA8c3RyaW5nLCBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdPigpKTtcblxuICAgICAgbWFuaWZlc3QuY29udGVudF9zY3JpcHRzID0gQXJyYXkuZnJvbShoYXNoVG9FbnRyeXBvaW50c01hcC5lbnRyaWVzKCkpLm1hcChcbiAgICAgICAgKFssIHNjcmlwdHNdKSA9PiAoe1xuICAgICAgICAgIC4uLm1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQoc2NyaXB0c1swXS5vcHRpb25zKSxcbiAgICAgICAgICAvLyBUT09EOiBTb3J0aW5nIGNzcyBhbmQganMgYXJyYXlzIGhlcmUgc28gd2UgZ2V0IGNvbnNpc3RlbnQgdGVzdCByZXN1bHRzLi4uIGJ1dCB3ZVxuICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvLiBXaGVyZSBpcyB0aGUgaW5jb25zaXN0ZW5jeSBjb21pbmcgZnJvbT9cbiAgICAgICAgICBjc3M6IGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhzY3JpcHRzLCBidWlsZE91dHB1dCk/LnNvcnQoKSxcbiAgICAgICAgICBqczogc2NyaXB0c1xuICAgICAgICAgICAgLm1hcCgoZW50cnkpID0+XG4gICAgICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmpzJyksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc29ydCgpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2NvdmVySWNvbnMoXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbik6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0WydpY29ucyddIHtcbiAgY29uc3QgaWNvbnM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgLy8gI3JlZ2lvbiBzbmlwcGV0XG4gIGNvbnN0IGljb25SZWdleCA9IFtcbiAgICAvXmljb24tKFswLTldKylcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgICAgICAgICAvLyBpY29uLTE2LnBuZ1xuICAgIC9eaWNvbi0oWzAtOV0rKXhbMC05XStcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgIC8vIGljb24tMTZ4MTYucG5nXG4gICAgL15pY29uQChbMC05XSspd1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNncucG5nXG4gICAgL15pY29uQChbMC05XSspaFxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNmgucG5nXG4gICAgL15pY29uQChbMC05XSspXFwuKHBuZ3xibXB8anBlZ3xqcGd8aWNvfGdpZikkLywgICAgICAgICAgICAgLy8gaWNvbkAxNi5wbmdcbiAgICAvXmljb25bXFwvXFxcXF0oWzAtOV0rKVxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAvLyBpY29uLzE2LnBuZ1xuICAgIC9eaWNvbltcXC9cXFxcXShbMC05XSspeFswLTldK1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sIC8vIGljb24vMTZ4MTYucG5nXG4gIF07XG4gIC8vICNlbmRyZWdpb24gc25pcHBldFxuXG4gIGJ1aWxkT3V0cHV0LnB1YmxpY0Fzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgIGxldCBzaXplOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCByZWdleCBvZiBpY29uUmVnZXgpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gYXNzZXQuZmlsZU5hbWUubWF0Y2gocmVnZXgpO1xuICAgICAgaWYgKG1hdGNoPy5bMV0gIT0gbnVsbCkge1xuICAgICAgICBzaXplID0gbWF0Y2hbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2l6ZSA9PSBudWxsKSByZXR1cm47XG5cbiAgICBpY29ucy5wdXNoKFtzaXplLCBub3JtYWxpemVQYXRoKGFzc2V0LmZpbGVOYW1lKV0pO1xuICB9KTtcblxuICByZXR1cm4gaWNvbnMubGVuZ3RoID4gMCA/IE9iamVjdC5mcm9tRW50cmllcyhpY29ucykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVDc3AoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBwZXJtaXNzaW9uID0gYGh0dHA6Ly8ke2NvbmZpZy5zZXJ2ZXI/Lmhvc3RuYW1lID8/ICcnfS8qYDtcbiAgY29uc3QgYWxsb3dlZENzcCA9IGNvbmZpZy5zZXJ2ZXI/Lm9yaWdpbiA/PyAnaHR0cDovL2xvY2FsaG9zdDoqJztcblxuICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIGNvbnN0IGNzcCA9IG5ldyBDb250ZW50U2VjdXJpdHlQb2xpY3koXG4gICAgbWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gM1xuICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yOiBleHRlbnNpb25fcGFnZXMgaXMgbm90IHR5cGVkXG4gICAgICAgIG1hbmlmZXN0LmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5Py5leHRlbnNpb25fcGFnZXMgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJyAnd2FzbS11bnNhZmUtZXZhbCc7IG9iamVjdC1zcmMgJ3NlbGYnO1wiIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjNcbiAgICAgIDogbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJzsgb2JqZWN0LXNyYyAnc2VsZic7XCIsIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjJcbiAgKTtcblxuICBpZiAoY29uZmlnLnNlcnZlcikgY3NwLmFkZCgnc2NyaXB0LXNyYycsIGFsbG93ZWRDc3ApO1xuXG4gIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz89IHt9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGV4dGVuc2lvbl9wYWdlcyBpcyBub3QgdHlwZWRcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeS5leHRlbnNpb25fcGFnZXMgPSBjc3AudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeSA9IGNzcC50b1N0cmluZygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVQZXJtaXNzaW9ucyhcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIC8vIEZvciByZWxvYWRpbmcgdGhlIHBhZ2VcbiAgYWRkUGVybWlzc2lvbihtYW5pZmVzdCwgJ3RhYnMnKTtcblxuICAvLyBGb3IgcmVnaXN0ZXJpbmcgY29udGVudCBzY3JpcHRzXG4gIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCAnc2NyaXB0aW5nJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYnVuZGxlIHBhdGhzIHRvIENTUyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYSBsaXN0IG9mIGNvbnRlbnQgc2NyaXB0cywgb3IgdW5kZWZpbmVkIGlmXG4gKiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIENTUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhcbiAgY29udGVudFNjcmlwdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY3NzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IGFsbENodW5rcyA9IGJ1aWxkT3V0cHV0LnN0ZXBzLmZsYXRNYXAoKHN0ZXApID0+IHN0ZXAuY2h1bmtzKTtcblxuICBjb250ZW50U2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICAvLyBUT0RPOiBvcHRpbWl6ZSBhbmQgcmVtb3ZlIGxvb3Agd2l0aCBhIG1hcFxuICAgIGNvbnN0IHJlbGF0ZWRDc3MgPSBhbGxDaHVua3MuZmluZChcbiAgICAgIChjaHVuaykgPT4gY2h1bmsuZmlsZU5hbWUgPT09IGBhc3NldHMvJHtzY3JpcHQubmFtZX0uY3NzYCxcbiAgICApO1xuICAgIGlmIChyZWxhdGVkQ3NzKSBjc3MucHVzaChyZWxhdGVkQ3NzLmZpbGVOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKGNzcy5sZW5ndGggPiAwKSByZXR1cm4gY3NzO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhZGRQZXJtaXNzaW9uKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIHBlcm1pc3Npb246IHN0cmluZyxcbik6IHZvaWQge1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucyA/Pz0gW107XG4gIGlmIChtYW5pZmVzdC5wZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKSkgcmV0dXJuO1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucy5wdXNoKHBlcm1pc3Npb24pO1xufVxuXG5mdW5jdGlvbiBhZGRIb3N0UGVybWlzc2lvbihcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBob3N0UGVybWlzc2lvbjogc3RyaW5nLFxuKTogdm9pZCB7XG4gIG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz89IFtdO1xuICBpZiAobWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5pbmNsdWRlcyhob3N0UGVybWlzc2lvbikpIHJldHVybjtcbiAgbWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5wdXNoKGhvc3RQZXJtaXNzaW9uKTtcbn1cbiIsICIvKipcbiAqIERpcmVjdGl2ZSBuYW1lcyB0aGF0IG1ha2UgdXAgQ1NQcy4gVGhlcmUgYXJlIG1vcmUsIHRoaXMgaXMgYWxsIEkgbmVlZCBmb3IgdGhlIHBsdWdpbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NwRGlyZWN0aXZlID0gJ2RlZmF1bHQtc3JjJyB8ICdzY3JpcHQtc3JjJyB8ICdvYmplY3Qtc3JjJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7XG4gIHByaXZhdGUgc3RhdGljIERJUkVDVElWRV9PUkRFUjogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHtcbiAgICAnZGVmYXVsdC1zcmMnOiAwLFxuICAgICdzY3JpcHQtc3JjJzogMSxcbiAgICAnb2JqZWN0LXNyYyc6IDIsXG4gIH07XG5cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG4gIGNvbnN0cnVjdG9yKGNzcD86IHN0cmluZykge1xuICAgIGlmIChjc3ApIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gY3NwLnNwbGl0KCc7JykubWFwKChzZWN0aW9uKSA9PiBzZWN0aW9uLnRyaW0oKSk7XG4gICAgICB0aGlzLmRhdGEgPSBzZWN0aW9ucy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nW10+PigoZGF0YSwgc2VjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCAuLi52YWx1ZXNdID0gc2VjdGlvbi5zcGxpdCgnICcpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpO1xuICAgICAgICBpZiAoa2V5KSBkYXRhW2tleV0gPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGEgc2V0IG9mIHZhbHVlcyBhcmUgbGlzdGVkIHVuZGVyIGEgZGlyZWN0aXZlLlxuICAgKi9cbiAgYWRkKGRpcmVjdGl2ZTogQ3NwRGlyZWN0aXZlLCAuLi5uZXdWYWx1ZXM6IHN0cmluZ1tdKTogQ29udGVudFNlY3VyaXR5UG9saWN5IHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmRhdGFbZGlyZWN0aXZlXSA/PyBbXTtcbiAgICBuZXdWYWx1ZXMuZm9yRWFjaCgobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKG5ld1ZhbHVlKSkgdmFsdWVzLnB1c2gobmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YVtkaXJlY3RpdmVdID0gdmFsdWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXJlY3RpdmVzID0gT2JqZWN0LmVudHJpZXModGhpcy5kYXRhKS5zb3J0KChbbF0sIFtyXSkgPT4ge1xuICAgICAgY29uc3QgbG8gPSBDb250ZW50U2VjdXJpdHlQb2xpY3kuRElSRUNUSVZFX09SREVSW2xdID8/IDI7XG4gICAgICBjb25zdCBybyA9IENvbnRlbnRTZWN1cml0eVBvbGljeS5ESVJFQ1RJVkVfT1JERVJbcl0gPz8gMjtcbiAgICAgIHJldHVybiBsbyAtIHJvO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3RpdmVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmZsYXQoKS5qb2luKCcgJykpLmpvaW4oJzsgJykgKyAnOyc7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBDb250ZW50U2NyaXB0RW50cnlwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgdW5pcXVlIGFuZCBjb25zaXN0ZW50IHN0cmluZyBoYXNoIGJhc2VkIG9uIGEgY29udGVudCBzY3JpcHRzIG9wdGlvbnMuXG4gKlxuICogSXQgaXMgYWJsZSB0byByZWNvZ25pemUgZGVmYXVsdCB2YWx1ZXMsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoQ29udGVudFNjcmlwdE9wdGlvbnMoXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10sXG4pOiBzdHJpbmcge1xuICBjb25zdCB3aXRoRGVmYXVsdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10gPSB7XG4gICAgZXhjbHVkZUdsb2JzOiBbXSxcbiAgICBleGNsdWRlTWF0Y2hlczogW10sXG4gICAgaW5jbHVkZUdsb2JzOiBbXSxcbiAgICBtYXRjaEFib3V0Qmxhbms6IGZhbHNlLFxuICAgIG1hdGNoT3JpZ2luQXNGYWxsYmFjazogZmFsc2UsXG4gICAgcnVuQXQ6ICdkb2N1bWVudF9pZGxlJyxcbiAgICBhbGxGcmFtZXM6IGZhbHNlLFxuICAgIHdvcmxkOiAnSVNPTEFURUQnLFxuICAgIC8vIFRPRE86IHN0cmlwIHVuZGVmaW5lZCBmaWVsZHMgZnJvbSBvcHRpb25zIG9iamVjdCB0byBpbXByb3ZlIGNvbnRlbnQgc2NyaXB0IGdyb3VwaW5nLlxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBPYmplY3QuZW50cmllcyh3aXRoRGVmYXVsdHMpXG4gICAgICAvLyBTb3J0IGFueSBhcnJheXMgc28gdGhlaXIgdmFsdWVzIGFyZSBjb25zaXN0ZW50XG4gICAgICAubWFwPFtzdHJpbmcsIHVua25vd25dPigoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFtrZXksIHZhbHVlLnNvcnQoKV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtrZXksIHZhbHVlXTtcbiAgICAgIH0pXG4gICAgICAvLyBTb3J0IGFsbCB0aGUgZmllbGRzIGFscGhhYmV0aWNhbGx5XG4gICAgICAuc29ydCgobCwgcikgPT4gbFswXS5sb2NhbGVDb21wYXJlKHJbMF0pKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQoXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10sXG4pOiBPbWl0PE1hbmlmZXN0LkNvbnRlbnRTY3JpcHQsICdqcycgfCAnY3NzJz4ge1xuICByZXR1cm4ge1xuICAgIG1hdGNoZXM6IG9wdGlvbnMubWF0Y2hlcyxcbiAgICBhbGxfZnJhbWVzOiBvcHRpb25zLmFsbEZyYW1lcyxcbiAgICBtYXRjaF9hYm91dF9ibGFuazogb3B0aW9ucy5tYXRjaEFib3V0QmxhbmssXG4gICAgZXhjbHVkZV9nbG9iczogb3B0aW9ucy5leGNsdWRlR2xvYnMsXG4gICAgZXhjbHVkZV9tYXRjaGVzOiBvcHRpb25zLmV4Y2x1ZGVNYXRjaGVzLFxuICAgIGluY2x1ZGVfZ2xvYnM6IG9wdGlvbnMuaW5jbHVkZUdsb2JzLFxuICAgIHJ1bl9hdDogb3B0aW9ucy5ydW5BdCxcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHVudHlwZWQgY2hyb21lIG9wdGlvbnNcbiAgICBtYXRjaF9vcmlnaW5fYXNfZmFsbGJhY2s6IG9wdGlvbnMubWF0Y2hPcmlnaW5Bc0ZhbGxiYWNrLFxuICAgIHdvcmxkOiBvcHRpb25zLndvcmxkLFxuICB9O1xufVxuIiwgImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG4vKipcbiAqIFJlYWQgdGhlIHByb2plY3QncyBwYWNrYWdlLmpzb24uXG4gKlxuICogVE9ETzogbG9vayBpbiByb290IGFuZCB1cCBkaXJlY3RvcmllcyB1bnRpbCBpdCdzIGZvdW5kXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWNrYWdlSnNvbihcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8UGFydGlhbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBmaWxlID0gcmVzb2x2ZShjb25maWcucm9vdCwgJ3BhY2thZ2UuanNvbicpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmcy5yZWFkSnNvbihmaWxlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBGYWlsZWQgdG8gcmVhZCBwYWNrYWdlLmpzb24gYXQ6ICR7ZmlsZX0uIFJldHVybmluZyB1bmRlZmluZWQuYCxcbiAgICApO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7IEJ1aWxkT3V0cHV0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi9idWlsZC9idWlsZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZpbmRFbnRyeXBvaW50cyB9IGZyb20gJy4vYnVpbGQvZmluZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGdlbmVyYXRlVHlwZXNEaXIgfSBmcm9tICcuL2J1aWxkL2dlbmVyYXRlVHlwZXNEaXInO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcsIEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYWluZmVzdCwgd3JpdGVNYW5pZmVzdCB9IGZyb20gJy4vdXRpbHMvbWFuaWZlc3QnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBncm91cEVudHJ5cG9pbnRzIH0gZnJvbSAnLi91dGlscy9ncm91cEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXREdXJhdGlvbic7XG5pbXBvcnQgeyBwcmludEJ1aWxkU3VtbWFyeSB9IGZyb20gJy4vbG9nL3ByaW50QnVpbGRTdW1tYXJ5JztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGV4dGVuc2lvbiBiYXNlZCBvbiBhbiBpbnRlcm5hbCBjb25maWcuXG4gKlxuICogVGhpcyBmdW5jdGlvbjpcbiAqIDEuIENsZWFucyB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICogMi4gRXhlY3V0ZXMgdGhlIHJlYnVpbGQgZnVuY3Rpb24gd2l0aCBhIGJsYW5rIHByZXZpb3VzIG91dHB1dCBzbyBldmVyeXRoaW5nIGlzIGJ1aWx0IChzZWVcbiAqICAgIGByZWJ1aWxkYCBmb3IgbW9yZSBkZXRhaWxzKVxuICogMy4gUHJpbnRzIHRoZSBzdW1tYXJ5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEludGVybmFsKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZE91dHB1dD4ge1xuICBjb25zdCB2ZXJiID0gY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgPyAnUHJlLXJlbmRlcmluZycgOiAnQnVpbGRpbmcnO1xuICBjb25zdCB0YXJnZXQgPSBgJHtjb25maWcuYnJvd3Nlcn0tbXYke2NvbmZpZy5tYW5pZmVzdFZlcnNpb259YDtcbiAgY29uZmlnLmxvZ2dlci5pbmZvKFxuICAgIGAke3ZlcmJ9ICR7cGMuY3lhbih0YXJnZXQpfSBmb3IgJHtwYy5jeWFuKGNvbmZpZy5tb2RlKX0gd2l0aCAke3BjLmdyZWVuKFxuICAgICAgYFZpdGUgJHt2aXRlLnZlcnNpb259YCxcbiAgICApfWAsXG4gICk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgLy8gQ2xlYW51cFxuICBhd2FpdCBmcy5ybShjb25maWcub3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcub3V0RGlyKTtcblxuICBjb25zdCBlbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBjb25zdCBncm91cHMgPSBncm91cEVudHJ5cG9pbnRzKGVudHJ5cG9pbnRzKTtcbiAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHJlYnVpbGQoY29uZmlnLCBncm91cHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9zdC1idWlsZFxuICBhd2FpdCBwcmludEJ1aWxkU3VtbWFyeShcbiAgICBjb25maWcubG9nZ2VyLnN1Y2Nlc3MsXG4gICAgYEJ1aWx0IGV4dGVuc2lvbiBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgb3V0cHV0LFxuICAgIGNvbmZpZyxcbiAgKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEdpdmVuIGEgY29uZmlndXJhdGlvbiwgbGlzdCBvZiBlbnRyeXBvaW50cywgYW5kIGFuIGV4aXN0aW5nLCBwYXJ0aWFsIG91dHB1dCwgYnVpbGQgdGhlXG4gKiBlbnRyeXBvaW50cyBhbmQgbWVyZ2UgdGhlIG5ldyBvdXRwdXQgd2l0aCB0aGUgZXhpc3Rpbmcgb3V0cHV0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbDpcbiAqIDEuIEdlbmVyYXRlIHRoZSAud3h0IGRpcmVjdG9yeSdzIHR5cGVzXG4gKiAyLiBCdWlsZCB0aGUgYGVudHJ5cG9pbnRHcm91cHNgIChhbmQgY29waWVzIHB1YmxpYyBmaWxlcylcbiAqIDMuIEdlbmVyYXRlIHRoZSBsYXRlc3QgbWFuaWZlc3QgZm9yIGFsbCBlbnRyeXBvaW50c1xuICogNC4gV3JpdGUgdGhlIG5ldyBtYW5pZmVzdCB0byB0aGUgZmlsZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYnVpbGQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIGVudHJ5cG9pbnRHcm91cHM6IEVudHJ5cG9pbnRHcm91cFtdLFxuICBleGlzdGluZ091dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4gPSB7XG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH0sXG4pOiBQcm9taXNlPHsgb3V0cHV0OiBCdWlsZE91dHB1dDsgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0IH0+IHtcbiAgLy8gVXBkYXRlIHR5cGVzIGRpcmVjdG9yeSB3aXRoIG5ldyBmaWxlcyBhbmQgdHlwZXNcbiAgY29uc3QgYWxsRW50cnlwb2ludHMgPSBhd2FpdCBmaW5kRW50cnlwb2ludHMoY29uZmlnKTtcbiAgYXdhaXQgZ2VuZXJhdGVUeXBlc0RpcihhbGxFbnRyeXBvaW50cywgY29uZmlnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgY29uZmlnLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gdXBkYXRlIC53eHQgZGlyZWN0b3J5OicsIGVycik7XG4gICAgLy8gVGhyb3cgdGhlIGVycm9yIGlmIGRvaW5nIGEgcmVndWxhciBidWlsZCwgZG9uJ3QgZm9yIGRldiBtb2RlLlxuICAgIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ2J1aWxkJykgdGhyb3cgZXJyO1xuICB9KTtcblxuICAvLyBCdWlsZCBhbmQgbWVyZ2UgdGhlIG91dHB1dHNcbiAgY29uc3QgbmV3T3V0cHV0ID0gYXdhaXQgYnVpbGRFbnRyeXBvaW50cyhlbnRyeXBvaW50R3JvdXBzLCBjb25maWcpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+ID0ge1xuICAgIHN0ZXBzOiBbLi4uZXhpc3RpbmdPdXRwdXQuc3RlcHMsIC4uLm5ld091dHB1dC5zdGVwc10sXG4gICAgcHVibGljQXNzZXRzOiBbLi4uZXhpc3RpbmdPdXRwdXQucHVibGljQXNzZXRzLCAuLi5uZXdPdXRwdXQucHVibGljQXNzZXRzXSxcbiAgfTtcblxuICBjb25zdCBuZXdNYW5pZmVzdCA9IGF3YWl0IGdlbmVyYXRlTWFpbmZlc3QoXG4gICAgYWxsRW50cnlwb2ludHMsXG4gICAgbWVyZ2VkT3V0cHV0LFxuICAgIGNvbmZpZyxcbiAgKTtcbiAgY29uc3QgZmluYWxPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgICAuLi5uZXdPdXRwdXQsXG4gIH07XG5cbiAgLy8gV3JpdGUgbWFuaWZlc3RcbiAgYXdhaXQgd3JpdGVNYW5pZmVzdChuZXdNYW5pZmVzdCwgZmluYWxPdXRwdXQsIGNvbmZpZyk7XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXQ6IHtcbiAgICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgICAgIHN0ZXBzOiBbLi4uZXhpc3RpbmdPdXRwdXQuc3RlcHMsIC4uLmZpbmFsT3V0cHV0LnN0ZXBzXSxcbiAgICAgIHB1YmxpY0Fzc2V0czogW1xuICAgICAgICAuLi5leGlzdGluZ091dHB1dC5wdWJsaWNBc3NldHMsXG4gICAgICAgIC4uLmZpbmFsT3V0cHV0LnB1YmxpY0Fzc2V0cyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBtYW5pZmVzdDogbmV3TWFuaWZlc3QsXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBFbnRyeXBvaW50cyBjYW4gYmUgYnVpbGQgaW4gZ3JvdXBzLiBIVE1MIHBhZ2VzIGNhbiBhbGwgYmUgYnVpbHQgdG9nZXRoZXIgaW4gYSBzaW5nbGUgc3RlcCwgd2hpbGVcbiAqIGNvbnRlbnQgc2NyaXB0cyBtdXN0IGJlIGJ1aWxkIGluZGl2aWR1YWxseS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVudHJ5cG9pbnRzIHB1dCBpbnRvIHRoZXNlIHR5cGVzIG9mIGdyb3Vwcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwRW50cnlwb2ludHMoZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSk6IEVudHJ5cG9pbnRHcm91cFtdIHtcbiAgY29uc3QgZ3JvdXBJbmRleE1hcDogUGFydGlhbDxSZWNvcmQ8R3JvdXAsIG51bWJlcj4+ID0ge307XG4gIGNvbnN0IGdyb3VwczogRW50cnlwb2ludEdyb3VwW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJ5cG9pbnRzKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBFTlRSWV9UWVBFX1RPX0dST1VQX01BUFtlbnRyeS50eXBlXTtcbiAgICBpZiAoZ3JvdXAgPT09ICduby1ncm91cCcpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKGVudHJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGdyb3VwSW5kZXggPSBncm91cEluZGV4TWFwW2dyb3VwXTtcbiAgICAgIGlmIChncm91cEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgZ3JvdXBJbmRleCA9IGdyb3Vwcy5wdXNoKFtdKSAtIDE7XG4gICAgICAgIGdyb3VwSW5kZXhNYXBbZ3JvdXBdID0gZ3JvdXBJbmRleDtcbiAgICAgIH1cbiAgICAgIChncm91cHNbZ3JvdXBJbmRleF0gYXMgRW50cnlwb2ludFtdKS5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG5jb25zdCBFTlRSWV9UWVBFX1RPX0dST1VQX01BUDogUmVjb3JkPEVudHJ5cG9pbnRbJ3R5cGUnXSwgR3JvdXA+ID0ge1xuICBzYW5kYm94OiAnc2FuZGJveC1wYWdlJyxcblxuICBwb3B1cDogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgbmV3dGFiOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBoaXN0b3J5OiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBvcHRpb25zOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBkZXZ0b29sczogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgYm9va21hcmtzOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBzaWRlcGFuZWw6ICdleHRlbnNpb24tcGFnZScsXG4gICd1bmxpc3RlZC1wYWdlJzogJ2V4dGVuc2lvbi1wYWdlJyxcblxuICBiYWNrZ3JvdW5kOiAnbm8tZ3JvdXAnLFxuICAnY29udGVudC1zY3JpcHQnOiAnbm8tZ3JvdXAnLFxuICAndW5saXN0ZWQtc2NyaXB0JzogJ25vLWdyb3VwJyxcbiAgJ3VubGlzdGVkLXN0eWxlJzogJ25vLWdyb3VwJyxcbiAgJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJzogJ25vLWdyb3VwJyxcbn07XG5cbnR5cGUgR3JvdXAgPSAnZXh0ZW5zaW9uLXBhZ2UnIHwgJ3NhbmRib3gtcGFnZScgfCAnbm8tZ3JvdXAnO1xuIiwgImV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGR1cmF0aW9uIDwgMWUzKSByZXR1cm4gYCR7ZHVyYXRpb259IG1zYDtcbiAgaWYgKGR1cmF0aW9uIDwgMTBlMykgcmV0dXJuIGAkeyhkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgzKX0gc2A7XG4gIGlmIChkdXJhdGlvbiA8IDYwZTMpIHJldHVybiBgJHsoZHVyYXRpb24gLyAxZTMpLnRvRml4ZWQoMSl9IHNgO1xuICByZXR1cm4gYCR7KGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDApfSBzYDtcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBCdWlsZE91dHB1dCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwcmludEZpbGVMaXN0IH0gZnJvbSAnLi9wcmludEZpbGVMaXN0JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByaW50QnVpbGRTdW1tYXJ5KFxuICBsb2c6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIG91dHB1dDogQnVpbGRPdXRwdXQsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgY29uc3QgY2h1bmtzID0gW1xuICAgIC4uLm91dHB1dC5zdGVwcy5mbGF0TWFwKChzdGVwKSA9PiBzdGVwLmNodW5rcyksXG4gICAgLi4ub3V0cHV0LnB1YmxpY0Fzc2V0cyxcbiAgXS5zb3J0KChsLCByKSA9PiB7XG4gICAgY29uc3QgbFdlaWdodCA9IGdldENodW5rU29ydFdlaWdodChsLmZpbGVOYW1lKTtcbiAgICBjb25zdCByV2VpZ2h0ID0gZ2V0Q2h1bmtTb3J0V2VpZ2h0KHIuZmlsZU5hbWUpO1xuICAgIGNvbnN0IGRpZmYgPSBsV2VpZ2h0IC0gcldlaWdodDtcbiAgICBpZiAoZGlmZiAhPT0gMCkgcmV0dXJuIGRpZmY7XG4gICAgcmV0dXJuIGwuZmlsZU5hbWUubG9jYWxlQ29tcGFyZShyLmZpbGVOYW1lKTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsZXMgPSBjaHVua3MubWFwKChjaHVuaykgPT4gcmVzb2x2ZShjb25maWcub3V0RGlyLCBjaHVuay5maWxlTmFtZSkpO1xuICBhd2FpdCBwcmludEZpbGVMaXN0KGxvZywgaGVhZGVyLCBjb25maWcub3V0RGlyLCBmaWxlcyk7XG59XG5cbmNvbnN0IERFRkFVTFRfU09SVF9XRUlHSFQgPSAxMDA7XG5jb25zdCBDSFVOS19TT1JUX1dFSUdIVFM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICdtYW5pZmVzdC5qc29uJzogMCxcbiAgJy5odG1sJzogMSxcbiAgJy5qcy5tYXAnOiAyLFxuICAnLmpzJzogMixcbiAgJy5jc3MnOiAzLFxufTtcbmZ1bmN0aW9uIGdldENodW5rU29ydFdlaWdodChmaWxlbmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LmVudHJpZXMoQ0hVTktfU09SVF9XRUlHSFRTKS5maW5kKChba2V5XSkgPT5cbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKGtleSksXG4gICAgKT8uWzFdID8/IERFRkFVTFRfU09SVF9XRUlHSFRcbiAgKTtcbn1cbiIsICJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnO1xuaW1wb3J0IHsgcHJpbnRUYWJsZSB9IGZyb20gJy4vcHJpbnRUYWJsZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmludEZpbGVMaXN0KFxuICBsb2c6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQsXG4gIGhlYWRlcjogc3RyaW5nLFxuICBiYXNlRGlyOiBzdHJpbmcsXG4gIGZpbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgdG90YWxTaXplID0gMDtcblxuICBjb25zdCBmaWxlUm93czogc3RyaW5nW11bXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVzLm1hcChhc3luYyAoZmlsZSwgaSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgYmFzZURpcikgKyBwYXRoLnNlcCxcbiAgICAgICAgcGF0aC5yZWxhdGl2ZShiYXNlRGlyLCBmaWxlKSxcbiAgICAgIF07XG4gICAgICBjb25zdCBwcmVmaXggPSBpID09PSBmaWxlcy5sZW5ndGggLSAxID8gJyAgXHUyNTE0XHUyNTAwJyA6ICcgIFx1MjUxQ1x1MjUwMCc7XG4gICAgICBjb25zdCBjb2xvciA9IGdldENodW5rQ29sb3IoZmlsZSk7XG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLmxzdGF0KGZpbGUpO1xuICAgICAgdG90YWxTaXplICs9IHN0YXRzLnNpemU7XG4gICAgICBjb25zdCBzaXplID0gU3RyaW5nKGZpbGVzaXplKHN0YXRzLnNpemUpKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke3BjLmdyYXkocHJlZml4KX0gJHtwYy5kaW0ocGFydHNbMF0pfSR7Y29sb3IocGFydHNbMV0pfWAsXG4gICAgICAgIHBjLmRpbShzaXplKSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG5cbiAgZmlsZVJvd3MucHVzaChbYCR7cGMuY3lhbignXHUwM0EzIFRvdGFsIHNpemU6Jyl9ICR7U3RyaW5nKGZpbGVzaXplKHRvdGFsU2l6ZSkpfWBdKTtcblxuICBwcmludFRhYmxlKGxvZywgaGVhZGVyLCBmaWxlUm93cyk7XG59XG5cbmNvbnN0IERFRkFVTFRfQ09MT1IgPSBwYy5ibHVlO1xuY29uc3QgQ0hVTktfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmc+ID0ge1xuICAnLmpzLm1hcCc6IHBjLmdyYXksXG4gICcuaHRtbCc6IHBjLmdyZWVuLFxuICAnLmNzcyc6IHBjLm1hZ2VudGEsXG4gICcuanMnOiBwYy5jeWFuLFxuICAnLnppcCc6IHBjLnllbGxvdyxcbn07XG5mdW5jdGlvbiBnZXRDaHVua0NvbG9yKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZW50cmllcyhDSFVOS19DT0xPUlMpLmZpbmQoKFtrZXldKSA9PiBmaWxlbmFtZS5lbmRzV2l0aChrZXkpKT8uWzFdID8/XG4gICAgREVGQVVMVF9DT0xPUlxuICApO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBwcmludFRhYmxlKFxuICBsb2c6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQsXG4gIGhlYWRlcjogc3RyaW5nLFxuICByb3dzOiBzdHJpbmdbXVtdLFxuICBnYXAgPSAyLFxuKTogdm9pZCB7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGNvbHVtbldpZHRocyA9IHJvd3MucmVkdWNlKFxuICAgICh3aWR0aHMsIHJvdykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh3aWR0aHMubGVuZ3RoLCByb3cubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgIHdpZHRoc1tpXSA9IE1hdGgubWF4KHJvd1tpXT8ubGVuZ3RoID8/IDAsIHdpZHRoc1tpXSA/PyAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aWR0aHM7XG4gICAgfSxcbiAgICByb3dzWzBdLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubGVuZ3RoKSxcbiAgKTtcblxuICBsZXQgc3RyID0gJyc7XG4gIHJvd3MuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgcm93LmZvckVhY2goKGNvbCwgaikgPT4ge1xuICAgICAgc3RyICs9IGNvbC5wYWRFbmQoY29sdW1uV2lkdGhzW2pdLCAnICcpO1xuICAgICAgaWYgKGogIT09IHJvdy5sZW5ndGggLSAxKSBzdHIgKz0gJycucGFkRW5kKGdhcCwgJyAnKTtcbiAgICB9KTtcbiAgICBpZiAoaSAhPT0gcm93cy5sZW5ndGggLSAxKSBzdHIgKz0gJ1xcbic7XG4gIH0pO1xuXG4gIGxvZyhgJHtoZWFkZXJ9XFxuJHtzdHJ9YCk7XG59XG4iLCAiaW1wb3J0IHtcbiAgQnVpbGRTdGVwT3V0cHV0LFxuICBFbnRyeXBvaW50R3JvdXAsXG4gIEludGVybmFsQ29uZmlnLFxuICBXeHREZXZTZXJ2ZXIsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IFNjcmlwdGluZyB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZ2V0Q29udGVudFNjcmlwdENzc0ZpbGVzIH0gZnJvbSAnLi91dGlscy9tYW5pZmVzdCc7XG5pbXBvcnQgeyBjcmVhdGVXZWJFeHRSdW5uZXIgfSBmcm9tICcuL3J1bm5lcnMvY3JlYXRlV2ViRXh0UnVubmVyJztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwgfSBmcm9tICcuL2J1aWxkJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNlcnZlckluZm8oKTogUHJvbWlzZTxTZXJ2ZXJJbmZvPiB7XG4gIGNvbnN0IHsgZGVmYXVsdDogZ2V0UG9ydCwgcG9ydE51bWJlcnMgfSA9IGF3YWl0IGltcG9ydCgnZ2V0LXBvcnQnKTtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IGdldFBvcnQoeyBwb3J0OiBwb3J0TnVtYmVycygzMDAwLCAzMDEwKSB9KTtcbiAgY29uc3QgaG9zdG5hbWUgPSAnbG9jYWxob3N0JztcbiAgY29uc3Qgb3JpZ2luID0gYGh0dHA6Ly8ke2hvc3RuYW1lfToke3BvcnR9YDtcbiAgY29uc3Qgc2VydmVyQ29uZmlnOiB2aXRlLklubGluZUNvbmZpZyA9IHtcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIG9yaWdpbixcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcG9ydCxcbiAgICBob3N0bmFtZSxcbiAgICBvcmlnaW4sXG4gICAgdml0ZVNlcnZlckNvbmZpZzogc2VydmVyQ29uZmlnLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBTZXJ2ZXIoXG4gIHNlcnZlckluZm86IFNlcnZlckluZm8sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPFd4dERldlNlcnZlcj4ge1xuICBjb25zdCBydW5uZXIgPSBjcmVhdGVXZWJFeHRSdW5uZXIoKTtcblxuICBjb25zdCB2aXRlU2VydmVyID0gYXdhaXQgdml0ZS5jcmVhdGVTZXJ2ZXIoXG4gICAgdml0ZS5tZXJnZUNvbmZpZyhzZXJ2ZXJJbmZvLCBjb25maWcudml0ZSksXG4gICk7XG5cbiAgY29uc3Qgc3RhcnQgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdml0ZVNlcnZlci5saXN0ZW4oc2VydmVyLnBvcnQpO1xuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcyhgU3RhcnRlZCBkZXYgc2VydmVyIEAgJHtzZXJ2ZXJJbmZvLm9yaWdpbn1gKTtcblxuICAgIHNlcnZlci5jdXJyZW50T3V0cHV0ID0gYXdhaXQgYnVpbGRJbnRlcm5hbChjb25maWcpO1xuICAgIGNvbmZpZy5sb2dnZXIuaW5mbygnT3BlbmluZyBicm93c2VyLi4uJyk7XG4gICAgYXdhaXQgcnVubmVyLm9wZW5Ccm93c2VyKGNvbmZpZyk7XG4gICAgY29uZmlnLmxvZ2dlci5zdWNjZXNzKCdPcGVuZWQhJyk7XG4gIH07XG5cbiAgY29uc3QgcmVsb2FkRXh0ZW5zaW9uID0gKCkgPT4ge1xuICAgIHZpdGVTZXJ2ZXIud3Muc2VuZCgnd3h0OnJlbG9hZC1leHRlbnNpb24nKTtcbiAgfTtcbiAgY29uc3QgcmVsb2FkUGFnZSA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAvLyBDYW4ndCB1c2UgVml0ZSdzIGJ1aWx0LWluIFwiZnVsbC1yZWxvYWRcIiBldmVudCBiZWNhdXNlIGl0IGRvZXNuJ3QgbGlrZSBvdXIgcGF0aHMsIGl0IGV4cGVjdHNcbiAgICAvLyBwYXRocyBlbmRpbmcgaW4gXCIvaW5kZXguaHRtbFwiXG4gICAgdml0ZVNlcnZlci53cy5zZW5kKCd3eHQ6cmVsb2FkLXBhZ2UnLCBwYXRoKTtcbiAgfTtcbiAgY29uc3QgcmVsb2FkQ29udGVudFNjcmlwdCA9IChcbiAgICBjb250ZW50U2NyaXB0OiBPbWl0PFNjcmlwdGluZy5SZWdpc3RlcmVkQ29udGVudFNjcmlwdCwgJ2lkJz4sXG4gICkgPT4ge1xuICAgIHZpdGVTZXJ2ZXIud3Muc2VuZCgnd3h0OnJlbG9hZC1jb250ZW50LXNjcmlwdCcsIGNvbnRlbnRTY3JpcHQpO1xuICB9O1xuXG4gIGNvbnN0IHNlcnZlcjogV3h0RGV2U2VydmVyID0ge1xuICAgIC4uLnZpdGVTZXJ2ZXIsXG4gICAgc3RhcnQsXG4gICAgY3VycmVudE91dHB1dDoge1xuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgbWFuaWZlc3RfdmVyc2lvbjogMyxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZlcnNpb246ICcnLFxuICAgICAgfSxcbiAgICAgIHB1YmxpY0Fzc2V0czogW10sXG4gICAgICBzdGVwczogW10sXG4gICAgfSxcbiAgICBwb3J0OiBzZXJ2ZXJJbmZvLnBvcnQsXG4gICAgaG9zdG5hbWU6IHNlcnZlckluZm8uaG9zdG5hbWUsXG4gICAgb3JpZ2luOiBzZXJ2ZXJJbmZvLm9yaWdpbixcbiAgICByZWxvYWRFeHRlbnNpb24sXG4gICAgcmVsb2FkUGFnZSxcbiAgICByZWxvYWRDb250ZW50U2NyaXB0LFxuICB9O1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbi8qKlxuICogRnJvbSB0aGUgc2VydmVyLCB0ZWxsIHRoZSBjbGllbnQgdG8gcmVsb2FkIGNvbnRlbnQgc2NyaXB0cyBmcm9tIHRoZSBwcm92aWRlZCBidWlsZCBzdGVwIG91dHB1dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRDb250ZW50U2NyaXB0cyhcbiAgc3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBzZXJ2ZXI6IFd4dERldlNlcnZlcixcbikge1xuICBpZiAoY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgIHN0ZXBzLmZvckVhY2goKHN0ZXApID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gc3RlcC5lbnRyeXBvaW50cztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSB8fCBlbnRyeS50eXBlICE9PSAnY29udGVudC1zY3JpcHQnKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGpzID0gW2dldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmpzJyldO1xuICAgICAgY29uc3QgY3NzID0gZ2V0Q29udGVudFNjcmlwdENzc0ZpbGVzKFtlbnRyeV0sIHNlcnZlci5jdXJyZW50T3V0cHV0KTtcblxuICAgICAgc2VydmVyLnJlbG9hZENvbnRlbnRTY3JpcHQoe1xuICAgICAgICAuLi5lbnRyeS5vcHRpb25zLFxuICAgICAgICBqcyxcbiAgICAgICAgY3NzLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyLnJlbG9hZEV4dGVuc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRIdG1sUGFnZXMoXG4gIGdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIHNlcnZlcjogV3h0RGV2U2VydmVyLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGdyb3Vwcy5mbGF0KCkuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuaHRtbCcpO1xuICAgIHNlcnZlci5yZWxvYWRQYWdlKHBhdGgpO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIFNlcnZlckluZm8ge1xuICBwb3J0OiBudW1iZXI7XG4gIGhvc3RuYW1lOiBzdHJpbmc7XG4gIG9yaWdpbjogc3RyaW5nO1xuICB2aXRlU2VydmVyQ29uZmlnOiB2aXRlLklubGluZUNvbmZpZztcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFdlYkV4dFJ1bkluc3RhbmNlIH0gZnJvbSAnd2ViLWV4dCc7XG5pbXBvcnQgeyBFeHRlbnNpb25SdW5uZXIgfSBmcm9tICcuL0V4dGVuc2lvblJ1bm5lcic7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBFeHRlbnNpb25SdW5uZXJgIGJhY2tlZCBieSBgd2ViLWV4dGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJFeHRSdW5uZXIoKTogRXh0ZW5zaW9uUnVubmVyIHtcbiAgbGV0IHJ1bm5lcjogV2ViRXh0UnVuSW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBvcGVuQnJvd3Nlcihjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScpIHtcbiAgICAgICAgY29uZmlnLmxvZ2dlci53YXJuKCdDYW5ub3Qgb3BlbiBzYWZhcmkgYXV0b21hdGljYWxseS4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgdGhlIHBsdWdpbidzIGxvZ2dlciBpbnN0ZWFkIG9mIHdlYi1leHQncyBidWlsdC1pbiBvbmUuXG4gICAgICBjb25zdCB3ZWJFeHRMb2dnZXIgPSBhd2FpdCBpbXBvcnQoJ3dlYi1leHQvdXRpbC9sb2dnZXInKTtcbiAgICAgIHdlYkV4dExvZ2dlci5jb25zb2xlU3RyZWFtLndyaXRlID0gKHsgbGV2ZWwsIG1zZywgbmFtZSB9KSA9PiB7XG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUl9MT0dfTEVWRUwpIGNvbmZpZy5sb2dnZXIuZXJyb3IobmFtZSwgbXNnKTtcbiAgICAgICAgaWYgKGxldmVsID49IFdBUk5fTE9HX0xFVkVMKSBjb25maWcubG9nZ2VyLndhcm4obXNnKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHd4dFVzZXJDb25maWcgPSBjb25maWcucnVubmVyQ29uZmlnLmNvbmZpZztcbiAgICAgIGNvbnN0IHVzZXJDb25maWcgPSB7XG4gICAgICAgIGNvbnNvbGU6IHd4dFVzZXJDb25maWc/Lm9wZW5Db25zb2xlLFxuICAgICAgICBkZXZ0b29sczogd3h0VXNlckNvbmZpZz8ub3BlbkRldnRvb2xzLFxuICAgICAgICBzdGFydFVybDogd3h0VXNlckNvbmZpZz8uc3RhcnRVcmxzLFxuICAgICAgICAuLi4oY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94J1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBmaXJlZm94OiB3eHRVc2VyQ29uZmlnPy5iaW5hcmllcz8uZmlyZWZveCxcbiAgICAgICAgICAgICAgZmlyZWZveFByb2ZpbGU6IHd4dFVzZXJDb25maWc/LmZpcmVmb3hQcm9maWxlLFxuICAgICAgICAgICAgICBwcmVmczogd3h0VXNlckNvbmZpZz8uZmlyZWZveFByZWZzLFxuICAgICAgICAgICAgICBhcmdzOiB3eHRVc2VyQ29uZmlnPy5maXJlZm94QXJncyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgY2hyb21pdW1CaW5hcnk6IHd4dFVzZXJDb25maWc/LmJpbmFyaWVzPy5bY29uZmlnLmJyb3dzZXJdLFxuICAgICAgICAgICAgICBjaHJvbWl1bVByb2ZpbGU6IHd4dFVzZXJDb25maWc/LmNocm9taXVtUHJvZmlsZSxcbiAgICAgICAgICAgICAgYXJnczogd3h0VXNlckNvbmZpZz8uY2hyb21pdW1BcmdzLFxuICAgICAgICAgICAgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5hbENvbmZpZyA9IHtcbiAgICAgICAgLi4udXNlckNvbmZpZyxcbiAgICAgICAgdGFyZ2V0OiBjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnID8gJ2ZpcmVmb3gtZGVza3RvcCcgOiAnY2hyb21pdW0nLFxuICAgICAgICBzb3VyY2VEaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgICAgIC8vIFdYVCBoYW5kbGVzIHJlbG9hZHMsIHNvIGRpc2FibGUgYXV0by1yZWxvYWQgYmVoYXZpb3JzIGluIHdlYi1leHRcbiAgICAgICAgbm9SZWxvYWQ6IHRydWUsXG4gICAgICAgIG5vSW5wdXQ6IHRydWUsXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgLy8gRG9uJ3QgY2FsbCBgcHJvY2Vzcy5leGl0KDApYCBhZnRlciBzdGFydGluZyB3ZWItZXh0XG4gICAgICAgIHNob3VsZEV4aXRQcm9ncmFtOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCd3ZWItZXh0IGNvbmZpZzonLCBmaW5hbENvbmZpZyk7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCd3ZWItZXh0IG9wdGlvbnM6Jywgb3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IHdlYkV4dCA9IGF3YWl0IGltcG9ydCgnd2ViLWV4dCcpO1xuICAgICAgcnVubmVyID0gYXdhaXQgd2ViRXh0LmRlZmF1bHQuY21kLnJ1bihmaW5hbENvbmZpZywgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlQnJvd3NlcigpIHtcbiAgICAgIHJldHVybiBhd2FpdCBydW5uZXI/LmV4aXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS93ZWItZXh0L2Jsb2IvZTM3ZTYwYTI3Mzg0NzhmNTEyZjEyNTVjNTM3MTMzMzIxZjMwMTc3MS9zcmMvdXRpbC9sb2dnZXIuanMjTDEyXG5jb25zdCBXQVJOX0xPR19MRVZFTCA9IDQwO1xuY29uc3QgRVJST1JfTE9HX0xFVkVMID0gNTA7XG4iLCAiaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgcHJpbnRIZWFkZXIgfSBmcm9tICcuLi8uLi9jb3JlL2xvZy9wcmludEhlYWRlcic7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZm9ybWF0RHVyYXRpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29tbWFuZDxUQXJncyBleHRlbmRzIGFueVtdPihcbiAgY2I6ICguLi5hcmdzOiBUQXJncykgPT4gdm9pZCB8IGJvb2xlYW4gfCBQcm9taXNlPHZvaWQgfCBib29sZWFuPixcbiAgb3B0aW9ucz86IHtcbiAgICBkaXNhYmxlRmluaXNoZWRMb2c/OiBib29sZWFuO1xuICB9LFxuKSB7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRyeSB7XG4gICAgICBwcmludEhlYWRlcigpO1xuXG4gICAgICBjb25zdCBvbmdvaW5nID0gYXdhaXQgY2IoLi4uYXJncyk7XG5cbiAgICAgIGlmICghb25nb2luZyAmJiAhb3B0aW9ucz8uZGlzYWJsZUZpbmlzaGVkTG9nKVxuICAgICAgICBjb25zb2xhLnN1Y2Nlc3MoXG4gICAgICAgICAgYEZpbmlzaGVkIGluICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSl9YCxcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGEuZmFpbChcbiAgICAgICAgYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSl9YCxcbiAgICAgICk7XG4gICAgICBjb25zb2xhLmVycm9yKGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9O1xufVxuIiwgImltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludEhlYWRlcigpIHtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sYS5sb2coYCR7cGMuZ3JheSgnV1hUJyl9ICR7cGMuZ3JheShwYy5ib2xkKHZlcnNpb24pKX1gKTtcbn1cbiIsICJpbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuXG5leHBvcnQgY29uc3QgYnVpbGQgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgYnJvd3Nlcj86IHd4dC5UYXJnZXRCcm93c2VyO1xuICAgICAgbXYzPzogYm9vbGVhbjtcbiAgICAgIG12Mj86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgbW9kZSA9IGZsYWdzLm1vZGUgPz8gJ3Byb2R1Y3Rpb24nO1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBtb2RlLFxuICAgIGJyb3dzZXI6IGZsYWdzLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBmbGFncy5tdjMgPyAzIDogZmxhZ3MubXYyID8gMiA6IHVuZGVmaW5lZCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gIH07XG5cbiAgYXdhaXQgd3h0LmJ1aWxkKGNsaUNvbmZpZyk7XG59KTtcbiIsICJpbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuXG5leHBvcnQgY29uc3QgZGV2ID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGJyb3dzZXI/OiB3eHQuVGFyZ2V0QnJvd3NlcjtcbiAgICAgIG12Mz86IGJvb2xlYW47XG4gICAgICBtdjI/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IG1vZGUgPSBmbGFncy5tb2RlID8/ICdkZXZlbG9wbWVudCc7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIG1vZGUsXG4gICAgYnJvd3NlcjogZmxhZ3MuYnJvd3NlcixcbiAgICBtYW5pZmVzdFZlcnNpb246IGZsYWdzLm12MyA/IDMgOiBmbGFncy5tdjIgPyAyIDogdW5kZWZpbmVkLFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgfTtcblxuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB3eHQuY3JlYXRlU2VydmVyKGNsaUNvbmZpZyk7XG4gIGF3YWl0IHNlcnZlci5zdGFydCgpO1xuXG4gIHJldHVybiB0cnVlO1xufSk7XG4iLCAiaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuaW1wb3J0IHByb21wdHMgZnJvbSAncHJvbXB0cyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBkb3dubG9hZFRlbXBsYXRlIH0gZnJvbSAnZ2lnZXQnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tICdwaWNvY29sb3JzL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGluaXQgPSBkZWZpbmVDb21tYW5kPFxuICBbZGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM6IHsgdGVtcGxhdGU/OiBzdHJpbmc7IHBtPzogc3RyaW5nIH1dXG4+KFxuICBhc3luYyAodXNlckRpcmVjdG9yeSwgZmxhZ3MpID0+IHtcbiAgICBjb25zb2xhLmluZm8oJ0luaXRhbGl6aW5nIG5ldyBwcm9qZWN0Jyk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBsaXN0VGVtcGxhdGVzKCk7XG4gICAgY29uc3QgZGVmYXVsdFRlbXBsYXRlID0gdGVtcGxhdGVzLmZpbmQoXG4gICAgICAodGVtcGxhdGUpID0+IHRlbXBsYXRlLm5hbWUgPT09IGZsYWdzLnRlbXBsYXRlPy50b0xvd2VyQ2FzZSgpLnRyaW0oKSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCBwcm9tcHRzKFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RpcmVjdG9yeScsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKHVzZXJEaXJlY3RvcnkgPT0gbnVsbCA/ICd0ZXh0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ1Byb2plY3QgRGlyZWN0b3J5JyxcbiAgICAgICAgICBpbml0aWFsOiB1c2VyRGlyZWN0b3J5LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3RlbXBsYXRlJyxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAoZGVmYXVsdFRlbXBsYXRlID09IG51bGwgPyAnc2VsZWN0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHRlbXBsYXRlJyxcbiAgICAgICAgICBjaG9pY2VzOiB0ZW1wbGF0ZXMubWFwKCh0ZW1wbGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICBURU1QTEFURV9DT0xPUlNbdGVtcGxhdGUubmFtZV0/Lih0ZW1wbGF0ZS5uYW1lKSA/PyB0ZW1wbGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHRlbXBsYXRlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwYWNrYWdlTWFuYWdlcicsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKGZsYWdzLnBtID09IG51bGwgPyAnc2VsZWN0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ1BhY2thZ2UgTWFuYWdlcicsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyB0aXRsZTogJ25wbScsIHZhbHVlOiAnbnBtJyB9LFxuICAgICAgICAgICAgeyB0aXRsZTogJ3BucG0nLCB2YWx1ZTogJ3BucG0nIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiAneWFybicsIHZhbHVlOiAneWFybicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHtcbiAgICAgICAgb25DYW5jZWw6ICgpID0+IHByb2Nlc3MuZXhpdCgxKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBpbnB1dC5kaXJlY3RvcnkgPz89IHVzZXJEaXJlY3Rvcnk7XG4gICAgaW5wdXQudGVtcGxhdGUgPz89IGRlZmF1bHRUZW1wbGF0ZTtcbiAgICBpbnB1dC5wYWNrYWdlTWFuYWdlciA/Pz0gZmxhZ3MucG07XG5cbiAgICBhd2FpdCBjbG9uZVByb2plY3QoaW5wdXQpO1xuXG4gICAgY29uc3QgY2RQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBwYXRoLnJlc29sdmUoaW5wdXQuZGlyZWN0b3J5KSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xhLmxvZyhcbiAgICAgIGBcdTI3MjggV1hUIHByb2plY3QgY3JlYXRlZCB3aXRoIHRoZSAke1xuICAgICAgICBURU1QTEFURV9DT0xPUlNbaW5wdXQudGVtcGxhdGUubmFtZV0/LihpbnB1dC50ZW1wbGF0ZS5uYW1lKSA/P1xuICAgICAgICBpbnB1dC50ZW1wbGF0ZS5uYW1lXG4gICAgICB9IHRlbXBsYXRlLmAsXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGEubG9nKCdOZXh0IHN0ZXBzOicpO1xuICAgIGxldCBzdGVwID0gMDtcbiAgICBpZiAoY2RQYXRoICE9PSAnLicpIGNvbnNvbGEubG9nKGAgICR7KytzdGVwfS5gLCBwYy5jeWFuKGBjZCAke2NkUGF0aH1gKSk7XG4gICAgY29uc29sYS5sb2coYCAgJHsrK3N0ZXB9LmAsIHBjLmN5YW4oYCR7aW5wdXQucGFja2FnZU1hbmFnZXJ9IGluc3RhbGxgKSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfSxcbiAgeyBkaXNhYmxlRmluaXNoZWRMb2c6IHRydWUgfSxcbik7XG5cbmludGVyZmFjZSBUZW1wbGF0ZSB7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSdzIG5hbWUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRlbXBsYXRlIGRpcmVjdG9yeSBpbiBnaXRodWIgcmVwby5cbiAgICovXG4gIHBhdGg6IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFRlbXBsYXRlcygpOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2FrbGlua2VyMS93eHQvY29udGVudHMvdGVtcGxhdGVzJyxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsXG4gICAgICAgICAgJ1gtR2l0SHViLUFwaS1WZXJzaW9uJzogJzIwMjItMTEtMjgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGlmIChyZXMuc3RhdHVzID49IDMwMClcbiAgICAgIHRocm93IEVycm9yKGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YCk7XG5cbiAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIEFycmF5PHtcbiAgICAgIHR5cGU6ICdmaWxlJyB8ICdkaXInO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgIH0+O1xuICAgIHJldHVybiBkYXRhXG4gICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2RpcicpXG4gICAgICAubWFwKChpdGVtKSA9PiAoeyBuYW1lOiBpdGVtLm5hbWUsIHBhdGg6IGl0ZW0ucGF0aCB9KSlcbiAgICAgIC5zb3J0KChsLCByKSA9PiB7XG4gICAgICAgIGNvbnN0IGxXZWlnaHQgPSBURU1QTEFURV9TT1JUX1dFSUdIVFtsLm5hbWVdID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICBjb25zdCByV2VpZ2h0ID0gVEVNUExBVEVfU09SVF9XRUlHSFRbci5uYW1lXSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgY29uc3QgZGlmZiA9IGxXZWlnaHQgLSByV2VpZ2h0O1xuICAgICAgICBpZiAoZGlmZiAhPT0gMCkgcmV0dXJuIGRpZmY7XG4gICAgICAgIHJldHVybiBsLm5hbWUubG9jYWxlQ29tcGFyZShyLm5hbWUpO1xuICAgICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IEVycm9yKGBDYW5ub3QgbG9hZCB0ZW1wbGF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZXJyLCBudWxsLCAyKX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbG9uZVByb2plY3Qoe1xuICBkaXJlY3RvcnksXG4gIHRlbXBsYXRlLFxuICBwYWNrYWdlTWFuYWdlcixcbn06IHtcbiAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gIHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbn0pIHtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnRG93bmxvYWRpbmcgdGVtcGxhdGUnKS5zdGFydCgpO1xuICB0cnkge1xuICAgIC8vIDEuIENsb25lIHJlcG9cbiAgICBhd2FpdCBkb3dubG9hZFRlbXBsYXRlKGBnaDpha2xpbmtlcjEvd3h0LyR7dGVtcGxhdGUucGF0aH1gLCB7XG4gICAgICBkaXI6IGRpcmVjdG9yeSxcbiAgICAgIGZvcmNlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gMi4gTW92ZSBfZ2l0aWdub3JlIC0+IC5naXRpZ25vcmVcbiAgICBhd2FpdCBmc1xuICAgICAgLm1vdmUoXG4gICAgICAgIHBhdGguam9pbihkaXJlY3RvcnksICdfZ2l0aWdub3JlJyksXG4gICAgICAgIHBhdGguam9pbihkaXJlY3RvcnksICcuZ2l0aWdub3JlJyksXG4gICAgICApXG4gICAgICAuY2F0Y2goKGVycikgPT5cbiAgICAgICAgY29uc29sYS53YXJuKCdGYWlsZWQgdG8gbW92ZSBfZ2l0aWdub3JlIHRvIC5naXRpZ25vcmU6JywgZXJyKSxcbiAgICAgICk7XG5cbiAgICAvLyAzLiBBZGQgLm5wbXJjIGZvciBwbnBtXG4gICAgaWYgKHBhY2thZ2VNYW5hZ2VyID09PSAncG5wbScpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgcGF0aC5qb2luKGRpcmVjdG9yeSwgJy5ucG1yYycpLFxuICAgICAgICAnc2hhbWVmdWxseS1ob2lzdD10cnVlXFxuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHNwaW5uZXIuZmFpbCgpO1xuICAgIHRocm93IEVycm9yKGBGYWlsZWQgdG8gc2V0dXAgbmV3IHByb2plY3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyLCBudWxsLCAyKX1gKTtcbiAgfVxufVxuXG5jb25zdCBURU1QTEFURV9DT0xPUlM6IFJlY29yZDxzdHJpbmcsIEZvcm1hdHRlcj4gPSB7XG4gIHZhbmlsbGE6IHBjLmJsdWUsXG4gIHZ1ZTogcGMuZ3JlZW4sXG4gIHJlYWN0OiBwYy5jeWFuLFxuICBzdmVsdGU6IHBjLnJlZCxcbiAgc29saWQ6IHBjLmJsdWUsXG59O1xuXG5jb25zdCBURU1QTEFURV9TT1JUX1dFSUdIVDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgdmFuaWxsYTogMCxcbiAgdnVlOiAxLFxuICByZWFjdDogMixcbn07XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgY2xpQ3Vyc29yIGZyb20gJ2NsaS1jdXJzb3InO1xuaW1wb3J0IGNsaVNwaW5uZXJzIGZyb20gJ2NsaS1zcGlubmVycyc7XG5pbXBvcnQgbG9nU3ltYm9scyBmcm9tICdsb2ctc3ltYm9scyc7XG5pbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knO1xuaW1wb3J0IHdjd2lkdGggZnJvbSAnd2N3aWR0aCc7XG5pbXBvcnQgaXNJbnRlcmFjdGl2ZSBmcm9tICdpcy1pbnRlcmFjdGl2ZSc7XG5pbXBvcnQgaXNVbmljb2RlU3VwcG9ydGVkIGZyb20gJ2lzLXVuaWNvZGUtc3VwcG9ydGVkJztcbmltcG9ydCBzdGRpbkRpc2NhcmRlciBmcm9tICdzdGRpbi1kaXNjYXJkZXInO1xuXG5jbGFzcyBPcmEge1xuXHQjbGluZXNUb0NsZWFyID0gMDtcblx0I2lzRGlzY2FyZGluZ1N0ZGluID0gZmFsc2U7XG5cdCNsaW5lQ291bnQgPSAwO1xuXHQjZnJhbWVJbmRleCA9IDA7XG5cdCNvcHRpb25zO1xuXHQjc3Bpbm5lcjtcblx0I3N0cmVhbTtcblx0I2lkO1xuXHQjaW5pdGlhbEludGVydmFsO1xuXHQjaXNFbmFibGVkO1xuXHQjaXNTaWxlbnQ7XG5cdCNpbmRlbnQ7XG5cdCN0ZXh0O1xuXHQjcHJlZml4VGV4dDtcblx0I3N1ZmZpeFRleHQ7XG5cblx0Y29sb3I7XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdG9wdGlvbnMgPSB7XG5cdFx0XHRcdHRleHQ6IG9wdGlvbnMsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMuI29wdGlvbnMgPSB7XG5cdFx0XHRjb2xvcjogJ2N5YW4nLFxuXHRcdFx0c3RyZWFtOiBwcm9jZXNzLnN0ZGVycixcblx0XHRcdGRpc2NhcmRTdGRpbjogdHJ1ZSxcblx0XHRcdGhpZGVDdXJzb3I6IHRydWUsXG5cdFx0XHQuLi5vcHRpb25zLFxuXHRcdH07XG5cblx0XHQvLyBQdWJsaWNcblx0XHR0aGlzLmNvbG9yID0gdGhpcy4jb3B0aW9ucy5jb2xvcjtcblxuXHRcdC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlc2UgdXNlIHRoZSBwdWJsaWMgc2V0dGVycy5cblx0XHR0aGlzLnNwaW5uZXIgPSB0aGlzLiNvcHRpb25zLnNwaW5uZXI7XG5cblx0XHR0aGlzLiNpbml0aWFsSW50ZXJ2YWwgPSB0aGlzLiNvcHRpb25zLmludGVydmFsO1xuXHRcdHRoaXMuI3N0cmVhbSA9IHRoaXMuI29wdGlvbnMuc3RyZWFtO1xuXHRcdHRoaXMuI2lzRW5hYmxlZCA9IHR5cGVvZiB0aGlzLiNvcHRpb25zLmlzRW5hYmxlZCA9PT0gJ2Jvb2xlYW4nID8gdGhpcy4jb3B0aW9ucy5pc0VuYWJsZWQgOiBpc0ludGVyYWN0aXZlKHtzdHJlYW06IHRoaXMuI3N0cmVhbX0pO1xuXHRcdHRoaXMuI2lzU2lsZW50ID0gdHlwZW9mIHRoaXMuI29wdGlvbnMuaXNTaWxlbnQgPT09ICdib29sZWFuJyA/IHRoaXMuI29wdGlvbnMuaXNTaWxlbnQgOiBmYWxzZTtcblxuXHRcdC8vIFNldCAqYWZ0ZXIqIGB0aGlzLiNzdHJlYW1gLlxuXHRcdC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlc2UgdXNlIHRoZSBwdWJsaWMgc2V0dGVycy5cblx0XHR0aGlzLnRleHQgPSB0aGlzLiNvcHRpb25zLnRleHQ7XG5cdFx0dGhpcy5wcmVmaXhUZXh0ID0gdGhpcy4jb3B0aW9ucy5wcmVmaXhUZXh0O1xuXHRcdHRoaXMuc3VmZml4VGV4dCA9IHRoaXMuI29wdGlvbnMuc3VmZml4VGV4dDtcblx0XHR0aGlzLmluZGVudCA9IHRoaXMuI29wdGlvbnMuaW5kZW50O1xuXG5cdFx0aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcblx0XHRcdHRoaXMuX3N0cmVhbSA9IHRoaXMuI3N0cmVhbTtcblx0XHRcdHRoaXMuX2lzRW5hYmxlZCA9IHRoaXMuI2lzRW5hYmxlZDtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfbGluZXNUb0NsZWFyJywge1xuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuI2xpbmVzVG9DbGVhcjtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KG5ld1ZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4jbGluZXNUb0NsZWFyID0gbmV3VmFsdWU7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfZnJhbWVJbmRleCcsIHtcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLiNmcmFtZUluZGV4O1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2xpbmVDb3VudCcsIHtcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLiNsaW5lQ291bnQ7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRnZXQgaW5kZW50KCkge1xuXHRcdHJldHVybiB0aGlzLiNpbmRlbnQ7XG5cdH1cblxuXHRzZXQgaW5kZW50KGluZGVudCA9IDApIHtcblx0XHRpZiAoIShpbmRlbnQgPj0gMCAmJiBOdW1iZXIuaXNJbnRlZ2VyKGluZGVudCkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgaW5kZW50YCBvcHRpb24gbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMCBhbmQgdXAnKTtcblx0XHR9XG5cblx0XHR0aGlzLiNpbmRlbnQgPSBpbmRlbnQ7XG5cdFx0dGhpcy51cGRhdGVMaW5lQ291bnQoKTtcblx0fVxuXG5cdGdldCBpbnRlcnZhbCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaW5pdGlhbEludGVydmFsIHx8IHRoaXMuI3NwaW5uZXIuaW50ZXJ2YWwgfHwgMTAwO1xuXHR9XG5cblx0Z2V0IHNwaW5uZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3NwaW5uZXI7XG5cdH1cblxuXHRzZXQgc3Bpbm5lcihzcGlubmVyKSB7XG5cdFx0dGhpcy4jZnJhbWVJbmRleCA9IDA7XG5cdFx0dGhpcy4jaW5pdGlhbEludGVydmFsID0gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHR5cGVvZiBzcGlubmVyID09PSAnb2JqZWN0Jykge1xuXHRcdFx0aWYgKHNwaW5uZXIuZnJhbWVzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gc3Bpbm5lciBtdXN0IGhhdmUgYSBgZnJhbWVzYCBwcm9wZXJ0eScpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLiNzcGlubmVyID0gc3Bpbm5lcjtcblx0XHR9IGVsc2UgaWYgKCFpc1VuaWNvZGVTdXBwb3J0ZWQoKSkge1xuXHRcdFx0dGhpcy4jc3Bpbm5lciA9IGNsaVNwaW5uZXJzLmxpbmU7XG5cdFx0fSBlbHNlIGlmIChzcGlubmVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNldCBkZWZhdWx0IHNwaW5uZXJcblx0XHRcdHRoaXMuI3NwaW5uZXIgPSBjbGlTcGlubmVycy5kb3RzO1xuXHRcdH0gZWxzZSBpZiAoc3Bpbm5lciAhPT0gJ2RlZmF1bHQnICYmIGNsaVNwaW5uZXJzW3NwaW5uZXJdKSB7XG5cdFx0XHR0aGlzLiNzcGlubmVyID0gY2xpU3Bpbm5lcnNbc3Bpbm5lcl07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gYnVpbHQtaW4gc3Bpbm5lciBuYW1lZCAnJHtzcGlubmVyfScuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2NsaS1zcGlubmVycy9ibG9iL21haW4vc3Bpbm5lcnMuanNvbiBmb3IgYSBmdWxsIGxpc3QuYCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IHRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3RleHQ7XG5cdH1cblxuXHRzZXQgdGV4dCh2YWx1ZSkge1xuXHRcdHRoaXMuI3RleHQgPSB2YWx1ZSB8fCAnJztcblx0XHR0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IHByZWZpeFRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3ByZWZpeFRleHQ7XG5cdH1cblxuXHRzZXQgcHJlZml4VGV4dCh2YWx1ZSkge1xuXHRcdHRoaXMuI3ByZWZpeFRleHQgPSB2YWx1ZSB8fCAnJztcblx0XHR0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IHN1ZmZpeFRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3N1ZmZpeFRleHQ7XG5cdH1cblxuXHRzZXQgc3VmZml4VGV4dCh2YWx1ZSkge1xuXHRcdHRoaXMuI3N1ZmZpeFRleHQgPSB2YWx1ZSB8fCAnJztcblx0XHR0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IGlzU3Bpbm5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2lkICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBUT0RPOiBVc2UgcHJpdmF0ZSBtZXRob2RzIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMTQuXG5cdGdldEZ1bGxQcmVmaXhUZXh0KHByZWZpeFRleHQgPSB0aGlzLiNwcmVmaXhUZXh0LCBwb3N0Zml4ID0gJyAnKSB7XG5cdFx0aWYgKHR5cGVvZiBwcmVmaXhUZXh0ID09PSAnc3RyaW5nJyAmJiBwcmVmaXhUZXh0ICE9PSAnJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeFRleHQgKyBwb3N0Zml4O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcHJlZml4VGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeFRleHQoKSArIHBvc3RmaXg7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0Z2V0RnVsbFN1ZmZpeFRleHQoc3VmZml4VGV4dCA9IHRoaXMuI3N1ZmZpeFRleHQsIHByZWZpeCA9ICcgJykge1xuXHRcdGlmICh0eXBlb2Ygc3VmZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgc3VmZml4VGV4dCAhPT0gJycpIHtcblx0XHRcdHJldHVybiBwcmVmaXggKyBzdWZmaXhUZXh0O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygc3VmZml4VGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeCArIHN1ZmZpeFRleHQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHR1cGRhdGVMaW5lQ291bnQoKSB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuI3N0cmVhbS5jb2x1bW5zIHx8IDgwO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gdGhpcy5nZXRGdWxsUHJlZml4VGV4dCh0aGlzLiNwcmVmaXhUZXh0LCAnLScpO1xuXHRcdGNvbnN0IGZ1bGxTdWZmaXhUZXh0ID0gdGhpcy5nZXRGdWxsU3VmZml4VGV4dCh0aGlzLiNzdWZmaXhUZXh0LCAnLScpO1xuXHRcdGNvbnN0IGZ1bGxUZXh0ID0gJyAnLnJlcGVhdCh0aGlzLiNpbmRlbnQpICsgZnVsbFByZWZpeFRleHQgKyAnLS0nICsgdGhpcy4jdGV4dCArICctLScgKyBmdWxsU3VmZml4VGV4dDtcblxuXHRcdHRoaXMuI2xpbmVDb3VudCA9IDA7XG5cdFx0Zm9yIChjb25zdCBsaW5lIG9mIHN0cmlwQW5zaShmdWxsVGV4dCkuc3BsaXQoJ1xcbicpKSB7XG5cdFx0XHR0aGlzLiNsaW5lQ291bnQgKz0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHdjd2lkdGgobGluZSkgLyBjb2x1bW5zKSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IGlzRW5hYmxlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaXNFbmFibGVkICYmICF0aGlzLiNpc1NpbGVudDtcblx0fVxuXG5cdHNldCBpc0VuYWJsZWQodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgaXNFbmFibGVkYCBvcHRpb24gbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0XHR9XG5cblx0XHR0aGlzLiNpc0VuYWJsZWQgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBpc1NpbGVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaXNTaWxlbnQ7XG5cdH1cblxuXHRzZXQgaXNTaWxlbnQodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgaXNTaWxlbnRgIG9wdGlvbiBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHRcdH1cblxuXHRcdHRoaXMuI2lzU2lsZW50ID0gdmFsdWU7XG5cdH1cblxuXHRmcmFtZSgpIHtcblx0XHRjb25zdCB7ZnJhbWVzfSA9IHRoaXMuI3NwaW5uZXI7XG5cdFx0bGV0IGZyYW1lID0gZnJhbWVzW3RoaXMuI2ZyYW1lSW5kZXhdO1xuXG5cdFx0aWYgKHRoaXMuY29sb3IpIHtcblx0XHRcdGZyYW1lID0gY2hhbGtbdGhpcy5jb2xvcl0oZnJhbWUpO1xuXHRcdH1cblxuXHRcdHRoaXMuI2ZyYW1lSW5kZXggPSArK3RoaXMuI2ZyYW1lSW5kZXggJSBmcmFtZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gKHR5cGVvZiB0aGlzLiNwcmVmaXhUZXh0ID09PSAnc3RyaW5nJyAmJiB0aGlzLiNwcmVmaXhUZXh0ICE9PSAnJykgPyB0aGlzLiNwcmVmaXhUZXh0ICsgJyAnIDogJyc7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSB0eXBlb2YgdGhpcy50ZXh0ID09PSAnc3RyaW5nJyA/ICcgJyArIHRoaXMudGV4dCA6ICcnO1xuXHRcdGNvbnN0IGZ1bGxTdWZmaXhUZXh0ID0gKHR5cGVvZiB0aGlzLiNzdWZmaXhUZXh0ID09PSAnc3RyaW5nJyAmJiB0aGlzLiNzdWZmaXhUZXh0ICE9PSAnJykgPyAnICcgKyB0aGlzLiNzdWZmaXhUZXh0IDogJyc7XG5cblx0XHRyZXR1cm4gZnVsbFByZWZpeFRleHQgKyBmcmFtZSArIGZ1bGxUZXh0ICsgZnVsbFN1ZmZpeFRleHQ7XG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHRpZiAoIXRoaXMuI2lzRW5hYmxlZCB8fCAhdGhpcy4jc3RyZWFtLmlzVFRZKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLiNzdHJlYW0uY3Vyc29yVG8oMCk7XG5cblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy4jbGluZXNUb0NsZWFyOyBpbmRleCsrKSB7XG5cdFx0XHRpZiAoaW5kZXggPiAwKSB7XG5cdFx0XHRcdHRoaXMuI3N0cmVhbS5tb3ZlQ3Vyc29yKDAsIC0xKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy4jc3RyZWFtLmNsZWFyTGluZSgxKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jaW5kZW50IHx8IHRoaXMubGFzdEluZGVudCAhPT0gdGhpcy4jaW5kZW50KSB7XG5cdFx0XHR0aGlzLiNzdHJlYW0uY3Vyc29yVG8odGhpcy4jaW5kZW50KTtcblx0XHR9XG5cblx0XHR0aGlzLmxhc3RJbmRlbnQgPSB0aGlzLiNpbmRlbnQ7XG5cdFx0dGhpcy4jbGluZXNUb0NsZWFyID0gMDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVuZGVyKCkge1xuXHRcdGlmICh0aGlzLiNpc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdHRoaXMuI3N0cmVhbS53cml0ZSh0aGlzLmZyYW1lKCkpO1xuXHRcdHRoaXMuI2xpbmVzVG9DbGVhciA9IHRoaXMuI2xpbmVDb3VudDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3RhcnQodGV4dCkge1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHR0aGlzLnRleHQgPSB0ZXh0O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNpc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLiNpc0VuYWJsZWQpIHtcblx0XHRcdGlmICh0aGlzLnRleHQpIHtcblx0XHRcdFx0dGhpcy4jc3RyZWFtLndyaXRlKGAtICR7dGhpcy50ZXh0fVxcbmApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1NwaW5uaW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jb3B0aW9ucy5oaWRlQ3Vyc29yKSB7XG5cdFx0XHRjbGlDdXJzb3IuaGlkZSh0aGlzLiNzdHJlYW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvcHRpb25zLmRpc2NhcmRTdGRpbiAmJiBwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG5cdFx0XHR0aGlzLiNpc0Rpc2NhcmRpbmdTdGRpbiA9IHRydWU7XG5cdFx0XHRzdGRpbkRpc2NhcmRlci5zdGFydCgpO1xuXHRcdH1cblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy4jaWQgPSBzZXRJbnRlcnZhbCh0aGlzLnJlbmRlci5iaW5kKHRoaXMpLCB0aGlzLmludGVydmFsKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoIXRoaXMuI2lzRW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLiNpZCk7XG5cdFx0dGhpcy4jaWQgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy4jZnJhbWVJbmRleCA9IDA7XG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdGlmICh0aGlzLiNvcHRpb25zLmhpZGVDdXJzb3IpIHtcblx0XHRcdGNsaUN1cnNvci5zaG93KHRoaXMuI3N0cmVhbSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuI29wdGlvbnMuZGlzY2FyZFN0ZGluICYmIHByb2Nlc3Muc3RkaW4uaXNUVFkgJiYgdGhpcy4jaXNEaXNjYXJkaW5nU3RkaW4pIHtcblx0XHRcdHN0ZGluRGlzY2FyZGVyLnN0b3AoKTtcblx0XHRcdHRoaXMuI2lzRGlzY2FyZGluZ1N0ZGluID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWNjZWVkKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLnN1Y2Nlc3MsIHRleHR9KTtcblx0fVxuXG5cdGZhaWwodGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMuZXJyb3IsIHRleHR9KTtcblx0fVxuXG5cdHdhcm4odGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMud2FybmluZywgdGV4dH0pO1xuXHR9XG5cblx0aW5mbyh0ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcEFuZFBlcnNpc3Qoe3N5bWJvbDogbG9nU3ltYm9scy5pbmZvLCB0ZXh0fSk7XG5cdH1cblxuXHRzdG9wQW5kUGVyc2lzdChvcHRpb25zID0ge30pIHtcblx0XHRpZiAodGhpcy4jaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByZWZpeFRleHQgPSBvcHRpb25zLnByZWZpeFRleHQgfHwgdGhpcy4jcHJlZml4VGV4dDtcblx0XHRjb25zdCBmdWxsUHJlZml4VGV4dCA9IHRoaXMuZ2V0RnVsbFByZWZpeFRleHQocHJlZml4VGV4dCwgJyAnKTtcblxuXHRcdGNvbnN0IHN5bWJvbFRleHQgPSBvcHRpb25zLnN5bWJvbCB8fCAnICc7XG5cblx0XHRjb25zdCB0ZXh0ID0gb3B0aW9ucy50ZXh0IHx8IHRoaXMudGV4dDtcblx0XHRjb25zdCBmdWxsVGV4dCA9ICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpID8gJyAnICsgdGV4dCA6ICcnO1xuXG5cdFx0Y29uc3Qgc3VmZml4VGV4dCA9IG9wdGlvbnMuc3VmZml4VGV4dCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5zdWZmaXhUZXh0IDogdGhpcy4jc3VmZml4VGV4dDtcblx0XHRjb25zdCBmdWxsU3VmZml4VGV4dCA9IHRoaXMuZ2V0RnVsbFN1ZmZpeFRleHQoc3VmZml4VGV4dCwgJyAnKTtcblxuXHRcdGNvbnN0IHRleHRUb1dyaXRlID0gZnVsbFByZWZpeFRleHQgKyBzeW1ib2xUZXh0ICsgZnVsbFRleHQgKyBmdWxsU3VmZml4VGV4dCArICdcXG4nO1xuXG5cdFx0dGhpcy5zdG9wKCk7XG5cdFx0dGhpcy4jc3RyZWFtLndyaXRlKHRleHRUb1dyaXRlKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yYShvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgT3JhKG9wdGlvbnMpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3JhUHJvbWlzZShhY3Rpb24sIG9wdGlvbnMpIHtcblx0Y29uc3QgYWN0aW9uSXNGdW5jdGlvbiA9IHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbic7XG5cdGNvbnN0IGFjdGlvbklzUHJvbWlzZSA9IHR5cGVvZiBhY3Rpb24udGhlbiA9PT0gJ2Z1bmN0aW9uJztcblxuXHRpZiAoIWFjdGlvbklzRnVuY3Rpb24gJiYgIWFjdGlvbklzUHJvbWlzZSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBgYWN0aW9uYCBtdXN0IGJlIGEgRnVuY3Rpb24gb3IgYSBQcm9taXNlJyk7XG5cdH1cblxuXHRjb25zdCB7c3VjY2Vzc1RleHQsIGZhaWxUZXh0fSA9IHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0J1xuXHRcdD8gb3B0aW9uc1xuXHRcdDoge3N1Y2Nlc3NUZXh0OiB1bmRlZmluZWQsIGZhaWxUZXh0OiB1bmRlZmluZWR9O1xuXG5cdGNvbnN0IHNwaW5uZXIgPSBvcmEob3B0aW9ucykuc3RhcnQoKTtcblxuXHR0cnkge1xuXHRcdGNvbnN0IHByb21pc2UgPSBhY3Rpb25Jc0Z1bmN0aW9uID8gYWN0aW9uKHNwaW5uZXIpIDogYWN0aW9uO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XG5cblx0XHRzcGlubmVyLnN1Y2NlZWQoXG5cdFx0XHRzdWNjZXNzVGV4dCA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogKHR5cGVvZiBzdWNjZXNzVGV4dCA9PT0gJ3N0cmluZycgPyBzdWNjZXNzVGV4dCA6IHN1Y2Nlc3NUZXh0KHJlc3VsdCkpLFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHNwaW5uZXIuZmFpbChcblx0XHRcdGZhaWxUZXh0ID09PSB1bmRlZmluZWRcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiAodHlwZW9mIGZhaWxUZXh0ID09PSAnc3RyaW5nJyA/IGZhaWxUZXh0IDogZmFpbFRleHQoZXJyb3IpKSxcblx0XHQpO1xuXG5cdFx0dGhyb3cgZXJyb3I7XG5cdH1cbn1cblxuZXhwb3J0IHtkZWZhdWx0IGFzIHNwaW5uZXJzfSBmcm9tICdjbGktc3Bpbm5lcnMnO1xuIiwgImNvbnN0IEFOU0lfQkFDS0dST1VORF9PRkZTRVQgPSAxMDtcblxuY29uc3Qgd3JhcEFuc2kxNiA9IChvZmZzZXQgPSAwKSA9PiBjb2RlID0+IGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcblxuY29uc3Qgd3JhcEFuc2kyNTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTs1OyR7Y29kZX1tYDtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAob2Zmc2V0ID0gMCkgPT4gKHJlZCwgZ3JlZW4sIGJsdWUpID0+IGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzI7JHtyZWR9OyR7Z3JlZW59OyR7Ymx1ZX1tYDtcblxuY29uc3Qgc3R5bGVzID0ge1xuXHRtb2RpZmllcjoge1xuXHRcdHJlc2V0OiBbMCwgMF0sXG5cdFx0Ly8gMjEgaXNuJ3Qgd2lkZWx5IHN1cHBvcnRlZCBhbmQgMjIgZG9lcyB0aGUgc2FtZSB0aGluZ1xuXHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0ZGltOiBbMiwgMjJdLFxuXHRcdGl0YWxpYzogWzMsIDIzXSxcblx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0b3ZlcmxpbmU6IFs1MywgNTVdLFxuXHRcdGludmVyc2U6IFs3LCAyN10sXG5cdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdHN0cmlrZXRocm91Z2g6IFs5LCAyOV0sXG5cdH0sXG5cdGNvbG9yOiB7XG5cdFx0YmxhY2s6IFszMCwgMzldLFxuXHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0Z3JlZW46IFszMiwgMzldLFxuXHRcdHllbGxvdzogWzMzLCAzOV0sXG5cdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0bWFnZW50YTogWzM1LCAzOV0sXG5cdFx0Y3lhbjogWzM2LCAzOV0sXG5cdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmxhY2tCcmlnaHQ6IFs5MCwgMzldLFxuXHRcdGdyYXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0Z3JleTogWzkwLCAzOV0sIC8vIEFsaWFzIG9mIGBibGFja0JyaWdodGBcblx0XHRyZWRCcmlnaHQ6IFs5MSwgMzldLFxuXHRcdGdyZWVuQnJpZ2h0OiBbOTIsIDM5XSxcblx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdGJsdWVCcmlnaHQ6IFs5NCwgMzldLFxuXHRcdG1hZ2VudGFCcmlnaHQ6IFs5NSwgMzldLFxuXHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdHdoaXRlQnJpZ2h0OiBbOTcsIDM5XSxcblx0fSxcblx0YmdDb2xvcjoge1xuXHRcdGJnQmxhY2s6IFs0MCwgNDldLFxuXHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRiZ0dyZWVuOiBbNDIsIDQ5XSxcblx0XHRiZ1llbGxvdzogWzQzLCA0OV0sXG5cdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRiZ01hZ2VudGE6IFs0NSwgNDldLFxuXHRcdGJnQ3lhbjogWzQ2LCA0OV0sXG5cdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRiZ0JsYWNrQnJpZ2h0OiBbMTAwLCA0OV0sXG5cdFx0YmdHcmF5OiBbMTAwLCA0OV0sIC8vIEFsaWFzIG9mIGBiZ0JsYWNrQnJpZ2h0YFxuXHRcdGJnR3JleTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ1JlZEJyaWdodDogWzEwMSwgNDldLFxuXHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRiZ1llbGxvd0JyaWdodDogWzEwMywgNDldLFxuXHRcdGJnQmx1ZUJyaWdodDogWzEwNCwgNDldLFxuXHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdGJnQ3lhbkJyaWdodDogWzEwNiwgNDldLFxuXHRcdGJnV2hpdGVCcmlnaHQ6IFsxMDcsIDQ5XSxcblx0fSxcbn07XG5cbmV4cG9ydCBjb25zdCBtb2RpZmllck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLm1vZGlmaWVyKTtcbmV4cG9ydCBjb25zdCBmb3JlZ3JvdW5kQ29sb3JOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5jb2xvcik7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuYmdDb2xvcik7XG5leHBvcnQgY29uc3QgY29sb3JOYW1lcyA9IFsuLi5mb3JlZ3JvdW5kQ29sb3JOYW1lcywgLi4uYmFja2dyb3VuZENvbG9yTmFtZXNdO1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gLFxuXHRcdFx0fTtcblxuXHRcdFx0Z3JvdXBbc3R5bGVOYW1lXSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG5cdFx0XHRjb2Rlcy5zZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCBncm91cE5hbWUsIHtcblx0XHRcdHZhbHVlOiBncm91cCxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0pO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgJ2NvZGVzJywge1xuXHRcdHZhbHVlOiBjb2Rlcyxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHN0eWxlcy5jb2xvci5hbnNpID0gd3JhcEFuc2kxNigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTI1NiA9IHdyYXBBbnNpMjU2KCk7XG5cdHN0eWxlcy5jb2xvci5hbnNpMTZtID0gd3JhcEFuc2kxNm0oKTtcblx0c3R5bGVzLmJnQ29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NihBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblx0c3R5bGVzLmJnQ29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXG5cdC8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL1FpeC0vY29sb3ItY29udmVydC9ibG9iLzNmMGUwZDRlOTJlMjM1Nzk2Y2NiMTdmNmU4NWM3MjA5NGE2NTFmNDkvY29udmVyc2lvbnMuanNcblx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3R5bGVzLCB7XG5cdFx0cmdiVG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZShyZWQsIGdyZWVuLCBibHVlKSB7XG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdFx0XHRcdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRcdFx0XHRpZiAocmVkID09PSBncmVlbiAmJiBncmVlbiA9PT0gYmx1ZSkge1xuXHRcdFx0XHRcdGlmIChyZWQgPCA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMTY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlZCA+IDI0OCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDIzMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHJlZCAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxNlxuXHRcdFx0XHRcdCsgKDM2ICogTWF0aC5yb3VuZChyZWQgLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrICg2ICogTWF0aC5yb3VuZChncmVlbiAvIDI1NSAqIDUpKVxuXHRcdFx0XHRcdCsgTWF0aC5yb3VuZChibHVlIC8gMjU1ICogNSk7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb1JnYjoge1xuXHRcdFx0dmFsdWUoaGV4KSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoZXMgPSAvW2EtZlxcZF17Nn18W2EtZlxcZF17M30vaS5leGVjKGhleC50b1N0cmluZygxNikpO1xuXHRcdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IFtjb2xvclN0cmluZ10gPSBtYXRjaGVzO1xuXG5cdFx0XHRcdGlmIChjb2xvclN0cmluZy5sZW5ndGggPT09IDMpIHtcblx0XHRcdFx0XHRjb2xvclN0cmluZyA9IFsuLi5jb2xvclN0cmluZ10ubWFwKGNoYXJhY3RlciA9PiBjaGFyYWN0ZXIgKyBjaGFyYWN0ZXIpLmpvaW4oJycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW50ZWdlciA9IE51bWJlci5wYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDE2KSAmIDB4RkYsXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gOCkgJiAweEZGLFxuXHRcdFx0XHRcdGludGVnZXIgJiAweEZGLFxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tYml0d2lzZSAqL1xuXHRcdFx0XHRdO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uc3R5bGVzLmhleFRvUmdiKGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRhbnNpMjU2VG9BbnNpOiB7XG5cdFx0XHR2YWx1ZShjb2RlKSB7XG5cdFx0XHRcdGlmIChjb2RlIDwgOCkge1xuXHRcdFx0XHRcdHJldHVybiAzMCArIGNvZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29kZSA8IDE2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDkwICsgKGNvZGUgLSA4KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCByZWQ7XG5cdFx0XHRcdGxldCBncmVlbjtcblx0XHRcdFx0bGV0IGJsdWU7XG5cblx0XHRcdFx0aWYgKGNvZGUgPj0gMjMyKSB7XG5cdFx0XHRcdFx0cmVkID0gKCgoY29kZSAtIDIzMikgKiAxMCkgKyA4KSAvIDI1NTtcblx0XHRcdFx0XHRncmVlbiA9IHJlZDtcblx0XHRcdFx0XHRibHVlID0gcmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvZGUgLT0gMTY7XG5cblx0XHRcdFx0XHRjb25zdCByZW1haW5kZXIgPSBjb2RlICUgMzY7XG5cblx0XHRcdFx0XHRyZWQgPSBNYXRoLmZsb29yKGNvZGUgLyAzNikgLyA1O1xuXHRcdFx0XHRcdGdyZWVuID0gTWF0aC5mbG9vcihyZW1haW5kZXIgLyA2KSAvIDU7XG5cdFx0XHRcdFx0Ymx1ZSA9IChyZW1haW5kZXIgJSA2KSAvIDU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IE1hdGgubWF4KHJlZCwgZ3JlZW4sIGJsdWUpICogMjtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gMzA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gMzAgKyAoKE1hdGgucm91bmQoYmx1ZSkgPDwgMikgfCAoTWF0aC5yb3VuZChncmVlbikgPDwgMSkgfCBNYXRoLnJvdW5kKHJlZCkpO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdFx0XHRcdHJlc3VsdCArPSA2MDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRyZ2JUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLnJnYlRvQW5zaTI1NihyZWQsIGdyZWVuLCBibHVlKSksXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaToge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMuYW5zaTI1NlRvQW5zaShzdHlsZXMuaGV4VG9BbnNpMjU2KGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0fSk7XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuY29uc3QgYW5zaVN0eWxlcyA9IGFzc2VtYmxlU3R5bGVzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGFuc2lTdHlsZXM7XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCB0dHkgZnJvbSAnbm9kZTp0dHknO1xuXG4vLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2hhcy1mbGFnL2Jsb2IvbWFpbi9pbmRleC5qc1xuZnVuY3Rpb24gaGFzRmxhZyhmbGFnLCBhcmd2ID0gZ2xvYmFsVGhpcy5EZW5vID8gZ2xvYmFsVGhpcy5EZW5vLmFyZ3MgOiBwcm9jZXNzLmFyZ3YpIHtcblx0Y29uc3QgcHJlZml4ID0gZmxhZy5zdGFydHNXaXRoKCctJykgPyAnJyA6IChmbGFnLmxlbmd0aCA9PT0gMSA/ICctJyA6ICctLScpO1xuXHRjb25zdCBwb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvc2l0aW9uID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zaXRpb24gIT09IC0xICYmICh0ZXJtaW5hdG9yUG9zaXRpb24gPT09IC0xIHx8IHBvc2l0aW9uIDwgdGVybWluYXRvclBvc2l0aW9uKTtcbn1cblxuY29uc3Qge2Vudn0gPSBwcm9jZXNzO1xuXG5sZXQgZmxhZ0ZvcmNlQ29sb3I7XG5pZiAoXG5cdGhhc0ZsYWcoJ25vLWNvbG9yJylcblx0fHwgaGFzRmxhZygnbm8tY29sb3JzJylcblx0fHwgaGFzRmxhZygnY29sb3I9ZmFsc2UnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1uZXZlcicpXG4pIHtcblx0ZmxhZ0ZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChcblx0aGFzRmxhZygnY29sb3InKVxuXHR8fCBoYXNGbGFnKCdjb2xvcnMnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj10cnVlJylcblx0fHwgaGFzRmxhZygnY29sb3I9YWx3YXlzJylcbikge1xuXHRmbGFnRm9yY2VDb2xvciA9IDE7XG59XG5cbmZ1bmN0aW9uIGVudkZvcmNlQ29sb3IoKSB7XG5cdGlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRcdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4oTnVtYmVyLnBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDMsXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9zdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHtzdHJlYW1Jc1RUWSwgc25pZmZGbGFncyA9IHRydWV9ID0ge30pIHtcblx0Y29uc3Qgbm9GbGFnRm9yY2VDb2xvciA9IGVudkZvcmNlQ29sb3IoKTtcblx0aWYgKG5vRmxhZ0ZvcmNlQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZsYWdGb3JjZUNvbG9yID0gbm9GbGFnRm9yY2VDb2xvcjtcblx0fVxuXG5cdGNvbnN0IGZvcmNlQ29sb3IgPSBzbmlmZkZsYWdzID8gZmxhZ0ZvcmNlQ29sb3IgOiBub0ZsYWdGb3JjZUNvbG9yO1xuXG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoc25pZmZGbGFncykge1xuXHRcdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKVxuXHRcdFx0fHwgaGFzRmxhZygnY29sb3I9ZnVsbCcpXG5cdFx0XHR8fCBoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0XHRyZXR1cm4gMjtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBmb3IgQXp1cmUgRGV2T3BzIHBpcGVsaW5lcy5cblx0Ly8gSGFzIHRvIGJlIGFib3ZlIHRoZSBgIXN0cmVhbUlzVFRZYCBjaGVjay5cblx0aWYgKCdURl9CVUlMRCcgaW4gZW52ICYmICdBR0VOVF9OQU1FJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmIChoYXZlU3RyZWFtICYmICFzdHJlYW1Jc1RUWSAmJiBmb3JjZUNvbG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgfHwgMDtcblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3MgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuXG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTBcblx0XHRcdCYmIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwXzU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0XzkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKCdHSVRIVUJfQUNUSU9OUycgaW4gZW52KSB7XG5cdFx0XHRyZXR1cm4gMztcblx0XHR9XG5cblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0JVSUxES0lURScsICdEUk9ORSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGVudi5URVJNID09PSAneHRlcm0ta2l0dHknKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG5cdFx0Y29uc3QgdmVyc2lvbiA9IE51bWJlci5wYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6IHtcblx0XHRcdFx0cmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6IHtcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHR9XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3VwcG9ydHNDb2xvcihzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBsZXZlbCA9IF9zdXBwb3J0c0NvbG9yKHN0cmVhbSwge1xuXHRcdHN0cmVhbUlzVFRZOiBzdHJlYW0gJiYgc3RyZWFtLmlzVFRZLFxuXHRcdC4uLm9wdGlvbnMsXG5cdH0pO1xuXG5cdHJldHVybiB0cmFuc2xhdGVMZXZlbChsZXZlbCk7XG59XG5cbmNvbnN0IHN1cHBvcnRzQ29sb3IgPSB7XG5cdHN0ZG91dDogY3JlYXRlU3VwcG9ydHNDb2xvcih7aXNUVFk6IHR0eS5pc2F0dHkoMSl9KSxcblx0c3RkZXJyOiBjcmVhdGVTdXBwb3J0c0NvbG9yKHtpc1RUWTogdHR5LmlzYXR0eSgyKX0pLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3VwcG9ydHNDb2xvcjtcbiIsICIvLyBUT0RPOiBXaGVuIHRhcmdldGluZyBOb2RlLmpzIDE2LCB1c2UgYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbGAuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpIHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zbGljZShlbmRJbmRleCwgaW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zbGljZShlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleChzdHJpbmcsIHByZWZpeCwgcG9zdGZpeCwgaW5kZXgpIHtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRjb25zdCBnb3RDUiA9IHN0cmluZ1tpbmRleCAtIDFdID09PSAnXFxyJztcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgsIChnb3RDUiA/IGluZGV4IC0gMSA6IGluZGV4KSkgKyBwcmVmaXggKyAoZ290Q1IgPyAnXFxyXFxuJyA6ICdcXG4nKSArIHBvc3RmaXg7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIDE7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zbGljZShlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbiIsICJpbXBvcnQgYW5zaVN0eWxlcyBmcm9tICcjYW5zaS1zdHlsZXMnO1xuaW1wb3J0IHN1cHBvcnRzQ29sb3IgZnJvbSAnI3N1cHBvcnRzLWNvbG9yJztcbmltcG9ydCB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L29yZGVyXG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleCxcbn0gZnJvbSAnLi91dGlsaXRpZXMuanMnO1xuXG5jb25zdCB7c3Rkb3V0OiBzdGRvdXRDb2xvciwgc3RkZXJyOiBzdGRlcnJDb2xvcn0gPSBzdXBwb3J0c0NvbG9yO1xuXG5jb25zdCBHRU5FUkFUT1IgPSBTeW1ib2woJ0dFTkVSQVRPUicpO1xuY29uc3QgU1RZTEVSID0gU3ltYm9sKCdTVFlMRVInKTtcbmNvbnN0IElTX0VNUFRZID0gU3ltYm9sKCdJU19FTVBUWScpO1xuXG4vLyBgc3VwcG9ydHNDb2xvci5sZXZlbGAgXHUyMTkyIGBhbnNpU3R5bGVzLmNvbG9yW25hbWVdYCBtYXBwaW5nXG5jb25zdCBsZXZlbE1hcHBpbmcgPSBbXG5cdCdhbnNpJyxcblx0J2Fuc2knLFxuXHQnYW5zaTI1NicsXG5cdCdhbnNpMTZtJyxcbl07XG5cbmNvbnN0IHN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IGFwcGx5T3B0aW9ucyA9IChvYmplY3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy5sZXZlbCAmJiAhKE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sZXZlbCkgJiYgb3B0aW9ucy5sZXZlbCA+PSAwICYmIG9wdGlvbnMubGV2ZWwgPD0gMykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgbGV2ZWxgIG9wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAgdG8gMycpO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IGxldmVsIGlmIG5vdCBzZXQgbWFudWFsbHlcblx0Y29uc3QgY29sb3JMZXZlbCA9IHN0ZG91dENvbG9yID8gc3Rkb3V0Q29sb3IubGV2ZWwgOiAwO1xuXHRvYmplY3QubGV2ZWwgPSBvcHRpb25zLmxldmVsID09PSB1bmRlZmluZWQgPyBjb2xvckxldmVsIDogb3B0aW9ucy5sZXZlbDtcbn07XG5cbmV4cG9ydCBjbGFzcyBDaGFsayB7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG5cdFx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcblx0fVxufVxuXG5jb25zdCBjaGFsa0ZhY3RvcnkgPSBvcHRpb25zID0+IHtcblx0Y29uc3QgY2hhbGsgPSAoLi4uc3RyaW5ncykgPT4gc3RyaW5ncy5qb2luKCcgJyk7XG5cdGFwcGx5T3B0aW9ucyhjaGFsaywgb3B0aW9ucyk7XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLCBjcmVhdGVDaGFsay5wcm90b3R5cGUpO1xuXG5cdHJldHVybiBjaGFsaztcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoYWxrKG9wdGlvbnMpIHtcblx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcbn1cblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKGNyZWF0ZUNoYWxrLnByb3RvdHlwZSwgRnVuY3Rpb24ucHJvdG90eXBlKTtcblxuZm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoYW5zaVN0eWxlcykpIHtcblx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgY3JlYXRlU3R5bGVyKHN0eWxlLm9wZW4sIHN0eWxlLmNsb3NlLCB0aGlzW1NUWUxFUl0pLCB0aGlzW0lTX0VNUFRZXSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3R5bGVOYW1lLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRcdHJldHVybiBidWlsZGVyO1xuXHRcdH0sXG5cdH07XG59XG5cbnN0eWxlcy52aXNpYmxlID0ge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgdGhpc1tTVFlMRVJdLCB0cnVlKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Zpc2libGUnLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRyZXR1cm4gYnVpbGRlcjtcblx0fSxcbn07XG5cbmNvbnN0IGdldE1vZGVsQW5zaSA9IChtb2RlbCwgbGV2ZWwsIHR5cGUsIC4uLmFyZ3VtZW50c18pID0+IHtcblx0aWYgKG1vZGVsID09PSAncmdiJykge1xuXHRcdGlmIChsZXZlbCA9PT0gJ2Fuc2kxNm0nKSB7XG5cdFx0XHRyZXR1cm4gYW5zaVN0eWxlc1t0eXBlXS5hbnNpMTZtKC4uLmFyZ3VtZW50c18pO1xuXHRcdH1cblxuXHRcdGlmIChsZXZlbCA9PT0gJ2Fuc2kyNTYnKSB7XG5cdFx0XHRyZXR1cm4gYW5zaVN0eWxlc1t0eXBlXS5hbnNpMjU2KGFuc2lTdHlsZXMucmdiVG9BbnNpMjU2KC4uLmFyZ3VtZW50c18pKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYW5zaVN0eWxlc1t0eXBlXS5hbnNpKGFuc2lTdHlsZXMucmdiVG9BbnNpKC4uLmFyZ3VtZW50c18pKTtcblx0fVxuXG5cdGlmIChtb2RlbCA9PT0gJ2hleCcpIHtcblx0XHRyZXR1cm4gZ2V0TW9kZWxBbnNpKCdyZ2InLCBsZXZlbCwgdHlwZSwgLi4uYW5zaVN0eWxlcy5oZXhUb1JnYiguLi5hcmd1bWVudHNfKSk7XG5cdH1cblxuXHRyZXR1cm4gYW5zaVN0eWxlc1t0eXBlXVttb2RlbF0oLi4uYXJndW1lbnRzXyk7XG59O1xuXG5jb25zdCB1c2VkTW9kZWxzID0gWydyZ2InLCAnaGV4JywgJ2Fuc2kyNTYnXTtcblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdHN0eWxlc1ttb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGdldE1vZGVsQW5zaShtb2RlbCwgbGV2ZWxNYXBwaW5nW2xldmVsXSwgJ2NvbG9yJywgLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuY29sb3IuY2xvc2UsIHRoaXNbU1RZTEVSXSk7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpc1tJU19FTVBUWV0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHR9O1xuXG5cdGNvbnN0IGJnTW9kZWwgPSAnYmcnICsgbW9kZWxbMF0udG9VcHBlckNhc2UoKSArIG1vZGVsLnNsaWNlKDEpO1xuXHRzdHlsZXNbYmdNb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGdldE1vZGVsQW5zaShtb2RlbCwgbGV2ZWxNYXBwaW5nW2xldmVsXSwgJ2JnQ29sb3InLCAuLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5iZ0NvbG9yLmNsb3NlLCB0aGlzW1NUWUxFUl0pO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXNbSVNfRU1QVFldKTtcblx0XHRcdH07XG5cdFx0fSxcblx0fTtcbn1cblxuY29uc3QgcHJvdG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcygoKSA9PiB7fSwge1xuXHQuLi5zdHlsZXMsXG5cdGxldmVsOiB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpc1tHRU5FUkFUT1JdLmxldmVsO1xuXHRcdH0sXG5cdFx0c2V0KGxldmVsKSB7XG5cdFx0XHR0aGlzW0dFTkVSQVRPUl0ubGV2ZWwgPSBsZXZlbDtcblx0XHR9LFxuXHR9LFxufSk7XG5cbmNvbnN0IGNyZWF0ZVN0eWxlciA9IChvcGVuLCBjbG9zZSwgcGFyZW50KSA9PiB7XG5cdGxldCBvcGVuQWxsO1xuXHRsZXQgY2xvc2VBbGw7XG5cdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wZW5BbGwgPSBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2U7XG5cdH0gZWxzZSB7XG5cdFx0b3BlbkFsbCA9IHBhcmVudC5vcGVuQWxsICsgb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlICsgcGFyZW50LmNsb3NlQWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGVuLFxuXHRcdGNsb3NlLFxuXHRcdG9wZW5BbGwsXG5cdFx0Y2xvc2VBbGwsXG5cdFx0cGFyZW50LFxuXHR9O1xufTtcblxuY29uc3QgY3JlYXRlQnVpbGRlciA9IChzZWxmLCBfc3R5bGVyLCBfaXNFbXB0eSkgPT4ge1xuXHQvLyBTaW5nbGUgYXJndW1lbnQgaXMgaG90IHBhdGgsIGltcGxpY2l0IGNvZXJjaW9uIGlzIGZhc3RlciB0aGFuIGFueXRoaW5nXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHRjb25zdCBidWlsZGVyID0gKC4uLmFyZ3VtZW50c18pID0+IGFwcGx5U3R5bGUoYnVpbGRlciwgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSA/ICgnJyArIGFyZ3VtZW50c19bMF0pIDogYXJndW1lbnRzXy5qb2luKCcgJykpO1xuXG5cdC8vIFdlIGFsdGVyIHRoZSBwcm90b3R5cGUgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcblx0Ly8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihidWlsZGVyLCBwcm90byk7XG5cblx0YnVpbGRlcltHRU5FUkFUT1JdID0gc2VsZjtcblx0YnVpbGRlcltTVFlMRVJdID0gX3N0eWxlcjtcblx0YnVpbGRlcltJU19FTVBUWV0gPSBfaXNFbXB0eTtcblxuXHRyZXR1cm4gYnVpbGRlcjtcbn07XG5cbmNvbnN0IGFwcGx5U3R5bGUgPSAoc2VsZiwgc3RyaW5nKSA9PiB7XG5cdGlmIChzZWxmLmxldmVsIDw9IDAgfHwgIXN0cmluZykge1xuXHRcdHJldHVybiBzZWxmW0lTX0VNUFRZXSA/ICcnIDogc3RyaW5nO1xuXHR9XG5cblx0bGV0IHN0eWxlciA9IHNlbGZbU1RZTEVSXTtcblxuXHRpZiAoc3R5bGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qge29wZW5BbGwsIGNsb3NlQWxsfSA9IHN0eWxlcjtcblx0aWYgKHN0cmluZy5pbmNsdWRlcygnXFx1MDAxQicpKSB7XG5cdFx0d2hpbGUgKHN0eWxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBSZXBsYWNlIGFueSBpbnN0YW5jZXMgYWxyZWFkeSBwcmVzZW50IHdpdGggYSByZS1vcGVuaW5nIGNvZGVcblx0XHRcdC8vIG90aGVyd2lzZSBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdW50aWwgc2FpZCBjbG9zaW5nIGNvZGVcblx0XHRcdC8vIHdpbGwgYmUgY29sb3JlZCwgYW5kIHRoZSByZXN0IHdpbGwgc2ltcGx5IGJlICdwbGFpbicuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmdSZXBsYWNlQWxsKHN0cmluZywgc3R5bGVyLmNsb3NlLCBzdHlsZXIub3Blbik7XG5cblx0XHRcdHN0eWxlciA9IHN0eWxlci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV2UgY2FuIG1vdmUgYm90aCBuZXh0IGFjdGlvbnMgb3V0IG9mIGxvb3AsIGJlY2F1c2UgcmVtYWluaW5nIGFjdGlvbnMgaW4gbG9vcCB3b24ndCBoYXZlXG5cdC8vIGFueS92aXNpYmxlIGVmZmVjdCBvbiBwYXJ0cyB3ZSBhZGQgaGVyZS4gQ2xvc2UgdGhlIHN0eWxpbmcgYmVmb3JlIGEgbGluZWJyZWFrIGFuZCByZW9wZW5cblx0Ly8gYWZ0ZXIgbmV4dCBsaW5lIHRvIGZpeCBhIGJsZWVkIGlzc3VlIG9uIG1hY09TOiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGsvcHVsbC85MlxuXHRjb25zdCBsZkluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicpO1xuXHRpZiAobGZJbmRleCAhPT0gLTEpIHtcblx0XHRzdHJpbmcgPSBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBjbG9zZUFsbCwgb3BlbkFsbCwgbGZJbmRleCk7XG5cdH1cblxuXHRyZXR1cm4gb3BlbkFsbCArIHN0cmluZyArIGNsb3NlQWxsO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY3JlYXRlQ2hhbGsucHJvdG90eXBlLCBzdHlsZXMpO1xuXG5jb25zdCBjaGFsayA9IGNyZWF0ZUNoYWxrKCk7XG5leHBvcnQgY29uc3QgY2hhbGtTdGRlcnIgPSBjcmVhdGVDaGFsayh7bGV2ZWw6IHN0ZGVyckNvbG9yID8gc3RkZXJyQ29sb3IubGV2ZWwgOiAwfSk7XG5cbmV4cG9ydCB7XG5cdG1vZGlmaWVyTmFtZXMsXG5cdGZvcmVncm91bmRDb2xvck5hbWVzLFxuXHRiYWNrZ3JvdW5kQ29sb3JOYW1lcyxcblx0Y29sb3JOYW1lcyxcblxuXHQvLyBUT0RPOiBSZW1vdmUgdGhlc2UgYWxpYXNlcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5cdG1vZGlmaWVyTmFtZXMgYXMgbW9kaWZpZXJzLFxuXHRmb3JlZ3JvdW5kQ29sb3JOYW1lcyBhcyBmb3JlZ3JvdW5kQ29sb3JzLFxuXHRiYWNrZ3JvdW5kQ29sb3JOYW1lcyBhcyBiYWNrZ3JvdW5kQ29sb3JzLFxuXHRjb2xvck5hbWVzIGFzIGNvbG9ycyxcbn0gZnJvbSAnLi92ZW5kb3IvYW5zaS1zdHlsZXMvaW5kZXguanMnO1xuXG5leHBvcnQge1xuXHRzdGRvdXRDb2xvciBhcyBzdXBwb3J0c0NvbG9yLFxuXHRzdGRlcnJDb2xvciBhcyBzdXBwb3J0c0NvbG9yU3RkZXJyLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2hhbGs7XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCByZXN0b3JlQ3Vyc29yIGZyb20gJ3Jlc3RvcmUtY3Vyc29yJztcblxubGV0IGlzSGlkZGVuID0gZmFsc2U7XG5cbmNvbnN0IGNsaUN1cnNvciA9IHt9O1xuXG5jbGlDdXJzb3Iuc2hvdyA9ICh3cml0YWJsZVN0cmVhbSA9IHByb2Nlc3Muc3RkZXJyKSA9PiB7XG5cdGlmICghd3JpdGFibGVTdHJlYW0uaXNUVFkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpc0hpZGRlbiA9IGZhbHNlO1xuXHR3cml0YWJsZVN0cmVhbS53cml0ZSgnXFx1MDAxQls/MjVoJyk7XG59O1xuXG5jbGlDdXJzb3IuaGlkZSA9ICh3cml0YWJsZVN0cmVhbSA9IHByb2Nlc3Muc3RkZXJyKSA9PiB7XG5cdGlmICghd3JpdGFibGVTdHJlYW0uaXNUVFkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRyZXN0b3JlQ3Vyc29yKCk7XG5cdGlzSGlkZGVuID0gdHJ1ZTtcblx0d3JpdGFibGVTdHJlYW0ud3JpdGUoJ1xcdTAwMUJbPzI1bCcpO1xufTtcblxuY2xpQ3Vyc29yLnRvZ2dsZSA9IChmb3JjZSwgd3JpdGFibGVTdHJlYW0pID0+IHtcblx0aWYgKGZvcmNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRpc0hpZGRlbiA9IGZvcmNlO1xuXHR9XG5cblx0aWYgKGlzSGlkZGVuKSB7XG5cdFx0Y2xpQ3Vyc29yLnNob3cod3JpdGFibGVTdHJlYW0pO1xuXHR9IGVsc2Uge1xuXHRcdGNsaUN1cnNvci5oaWRlKHdyaXRhYmxlU3RyZWFtKTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xpQ3Vyc29yO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgb25ldGltZSBmcm9tICdvbmV0aW1lJztcbmltcG9ydCBzaWduYWxFeGl0IGZyb20gJ3NpZ25hbC1leGl0JztcblxuY29uc3QgcmVzdG9yZUN1cnNvciA9IG9uZXRpbWUoKCkgPT4ge1xuXHRzaWduYWxFeGl0KCgpID0+IHtcblx0XHRwcm9jZXNzLnN0ZGVyci53cml0ZSgnXFx1MDAxQls/MjVoJyk7XG5cdH0sIHthbHdheXNMYXN0OiB0cnVlfSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcmVzdG9yZUN1cnNvcjtcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1VuaWNvZGVTdXBwb3J0ZWQoKSB7XG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG5cdFx0cmV0dXJuIHByb2Nlc3MuZW52LlRFUk0gIT09ICdsaW51eCc7IC8vIExpbnV4IGNvbnNvbGUgKGtlcm5lbClcblx0fVxuXG5cdHJldHVybiBCb29sZWFuKHByb2Nlc3MuZW52LkNJKVxuXHRcdHx8IEJvb2xlYW4ocHJvY2Vzcy5lbnYuV1RfU0VTU0lPTikgLy8gV2luZG93cyBUZXJtaW5hbFxuXHRcdHx8IEJvb2xlYW4ocHJvY2Vzcy5lbnYuVEVSTUlOVVNfU1VCTElNRSkgLy8gVGVybWludXMgKDwwLjIuMjcpXG5cdFx0fHwgcHJvY2Vzcy5lbnYuQ29uRW11VGFzayA9PT0gJ3tjbWQ6OkNtZGVyfScgLy8gQ29uRW11IGFuZCBjbWRlclxuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk1fUFJPR1JBTSA9PT0gJ1Rlcm1pbnVzLVN1YmxpbWUnXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAndnNjb2RlJ1xuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk0gPT09ICd4dGVybS0yNTZjb2xvcidcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNID09PSAnYWxhY3JpdHR5J1xuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk1JTkFMX0VNVUxBVE9SID09PSAnSmV0QnJhaW5zLUplZGlUZXJtJztcbn1cbiIsICJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGlzVW5pY29kZVN1cHBvcnRlZCBmcm9tICdpcy11bmljb2RlLXN1cHBvcnRlZCc7XG5cbmNvbnN0IG1haW4gPSB7XG5cdGluZm86IGNoYWxrLmJsdWUoJ1x1MjEzOScpLFxuXHRzdWNjZXNzOiBjaGFsay5ncmVlbignXHUyNzE0JyksXG5cdHdhcm5pbmc6IGNoYWxrLnllbGxvdygnXHUyNkEwJyksXG5cdGVycm9yOiBjaGFsay5yZWQoJ1x1MjcxNicpLFxufTtcblxuY29uc3QgZmFsbGJhY2sgPSB7XG5cdGluZm86IGNoYWxrLmJsdWUoJ2knKSxcblx0c3VjY2VzczogY2hhbGsuZ3JlZW4oJ1x1MjIxQScpLFxuXHR3YXJuaW5nOiBjaGFsay55ZWxsb3coJ1x1MjAzQycpLFxuXHRlcnJvcjogY2hhbGsucmVkKCdcdTAwRDcnKSxcbn07XG5cbmNvbnN0IGxvZ1N5bWJvbHMgPSBpc1VuaWNvZGVTdXBwb3J0ZWQoKSA/IG1haW4gOiBmYWxsYmFjaztcblxuZXhwb3J0IGRlZmF1bHQgbG9nU3ltYm9scztcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbnNpUmVnZXgoe29ubHlGaXJzdCA9IGZhbHNlfSA9IHt9KSB7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdCAgICAnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufVxuIiwgImltcG9ydCBhbnNpUmVnZXggZnJvbSAnYW5zaS1yZWdleCc7XG5cbmNvbnN0IHJlZ2V4ID0gYW5zaVJlZ2V4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwQW5zaShzdHJpbmcpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBzdHJpbmd9XFxgYCk7XG5cdH1cblxuXHQvLyBFdmVuIHRob3VnaCB0aGUgcmVnZXggaXMgZ2xvYmFsLCB3ZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBgLmxhc3RJbmRleGBcblx0Ly8gYmVjYXVzZSB1bmxpa2UgYC5leGVjKClgIGFuZCBgLnRlc3QoKWAsIGAucmVwbGFjZSgpYCBkb2VzIGl0IGF1dG9tYXRpY2FsbHlcblx0Ly8gYW5kIGRvaW5nIGl0IG1hbnVhbGx5IGhhcyBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShyZWdleCwgJycpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUoe3N0cmVhbSA9IHByb2Nlc3Muc3Rkb3V0fSA9IHt9KSB7XG5cdHJldHVybiBCb29sZWFuKFxuXHRcdHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkgJiZcblx0XHRwcm9jZXNzLmVudi5URVJNICE9PSAnZHVtYicgJiZcblx0XHQhKCdDSScgaW4gcHJvY2Vzcy5lbnYpXG5cdCk7XG59XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCB7QnVmZmVyTGlzdFN0cmVhbX0gZnJvbSAnYmwnO1xuXG5jb25zdCBBU0NJSV9FVFhfQ09ERSA9IDB4MDM7IC8vIEN0cmwrQyBlbWl0cyB0aGlzIGNvZGVcblxuY2xhc3MgU3RkaW5EaXNjYXJkZXIge1xuXHQjcmVxdWVzdHMgPSAwO1xuXHQjbXV0ZWRTdHJlYW0gPSBuZXcgQnVmZmVyTGlzdFN0cmVhbSgpO1xuXHQjb3VyRW1pdDtcblx0I3JsO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuI211dGVkU3RyZWFtLnBpcGUocHJvY2Vzcy5zdGRvdXQpO1xuXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdW5pY29ybi9uby10aGlzLWFzc2lnbm1lbnRcblx0XHR0aGlzLiNvdXJFbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCBkYXRhLCAuLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRjb25zdCB7c3RkaW59ID0gcHJvY2Vzcztcblx0XHRcdGlmIChzZWxmLiNyZXF1ZXN0cyA+IDAgfHwgc3RkaW4uZW1pdCA9PT0gc2VsZi4jb3VyRW1pdCkge1xuXHRcdFx0XHRpZiAoZXZlbnQgPT09ICdrZXlwcmVzcycpIHsgLy8gRml4ZXMgcmVhZGxpbmUgYmVoYXZpb3Jcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZXZlbnQgPT09ICdkYXRhJyAmJiBkYXRhLmluY2x1ZGVzKEFTQ0lJX0VUWF9DT0RFKSkge1xuXHRcdFx0XHRcdHByb2Nlc3MuZW1pdCgnU0lHSU5UJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRSZWZsZWN0LmFwcGx5KHNlbGYuI291ckVtaXQsIHRoaXMsIFtldmVudCwgZGF0YSwgLi4uYXJndW1lbnRzX10pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0UmVmbGVjdC5hcHBseShwcm9jZXNzLnN0ZGluLmVtaXQsIHRoaXMsIFtldmVudCwgZGF0YSwgLi4uYXJndW1lbnRzX10pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRzdGFydCgpIHtcblx0XHR0aGlzLiNyZXF1ZXN0cysrO1xuXG5cdFx0aWYgKHRoaXMuI3JlcXVlc3RzID09PSAxKSB7XG5cdFx0XHR0aGlzLl9yZWFsU3RhcnQoKTtcblx0XHR9XG5cdH1cblxuXHRzdG9wKCkge1xuXHRcdGlmICh0aGlzLiNyZXF1ZXN0cyA8PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2BzdG9wYCBjYWxsZWQgbW9yZSB0aW1lcyB0aGFuIGBzdGFydGAnKTtcblx0XHR9XG5cblx0XHR0aGlzLiNyZXF1ZXN0cy0tO1xuXG5cdFx0aWYgKHRoaXMuI3JlcXVlc3RzID09PSAwKSB7XG5cdFx0XHR0aGlzLl9yZWFsU3RvcCgpO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRPRE86IFVzZSBwcml2YXRlIG1ldGhvZHMgd2hlbiB0YXJnZXRpbmcgTm9kZS5qcyAxNC5cblx0X3JlYWxTdGFydCgpIHtcblx0XHQvLyBObyBrbm93biB3YXkgdG8gbWFrZSBpdCB3b3JrIHJlbGlhYmx5IG9uIFdpbmRvd3Ncblx0XHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuI3JsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiB0aGlzLiNtdXRlZFN0cmVhbSxcblx0XHR9KTtcblxuXHRcdHRoaXMuI3JsLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG5cdFx0XHRpZiAocHJvY2Vzcy5saXN0ZW5lckNvdW50KCdTSUdJTlQnKSA9PT0gMCkge1xuXHRcdFx0XHRwcm9jZXNzLmVtaXQoJ1NJR0lOVCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy4jcmwuY2xvc2UoKTtcblx0XHRcdFx0cHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCAnU0lHSU5UJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRfcmVhbFN0b3AoKSB7XG5cdFx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLiNybC5jbG9zZSgpO1xuXHRcdHRoaXMuI3JsID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmNvbnN0IHN0ZGluRGlzY2FyZGVyID0gbmV3IFN0ZGluRGlzY2FyZGVyKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0ZGluRGlzY2FyZGVyO1xuIiwgImltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgeyBmaW5kRW50cnlwb2ludHMgfSBmcm9tICcuLi8uLi9jb3JlL2J1aWxkL2ZpbmRFbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVR5cGVzRGlyIH0gZnJvbSAnLi4vLi4vY29yZS9idWlsZC9nZW5lcmF0ZVR5cGVzRGlyJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcbmltcG9ydCAqIGFzIHd4dCBmcm9tICcuLi8uLic7XG5cbmV4cG9ydCBjb25zdCBwcmVwYXJlID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgfTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0SW50ZXJuYWxDb25maWcoY2xpQ29uZmlnLCAnYnVpbGQnKTtcblxuICBjb25maWcubG9nZ2VyLmluZm8oJ0dlbmVyYXRpbmcgdHlwZXMuLi4nKTtcblxuICBjb25zdCBlbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBhd2FpdCBnZW5lcmF0ZVR5cGVzRGlyKGVudHJ5cG9pbnRzLCBjb25maWcpO1xufSk7XG4iLCAiaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuXG5leHBvcnQgY29uc3QgcHVibGlzaCA9IGRlZmluZUNvbW1hbmQoXG4gIGFzeW5jIChyb290OiBhbnksIHsgY29uZmlnOiBjb25maWdGaWxlIH06IGFueSkgPT4ge1xuICAgIGNvbnNvbGEud2Fybignd3h0IHB1Ymxpc2g6IE5vdCBpbXBsZW1lbnRlZCcpO1xuICB9LFxuKTtcbiIsICJpbXBvcnQgeyBCdWlsZE91dHB1dCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB6aXBkaXIgZnJvbSAnemlwLWRpcic7XG5pbXBvcnQgeyBkaXJuYW1lLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsga2ViYWJDYXNlQWxwaGFudW1lcmljIH0gZnJvbSAnLi91dGlscy9zdHJpbmdzJztcbmltcG9ydCB7IGdldFBhY2thZ2VKc29uIH0gZnJvbSAnLi91dGlscy9wYWNrYWdlJztcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiB9IGZyb20gJy4vdXRpbHMvZm9ybWF0RHVyYXRpb24nO1xuaW1wb3J0IHsgcHJpbnRGaWxlTGlzdCB9IGZyb20gJy4vbG9nL3ByaW50RmlsZUxpc3QnO1xuXG4vKipcbiAqIFppcCB0aGUgZXh0ZW5zaW9uIGZvciBkaXN0cmlidXRpb24uIERvZXMgbm90IGJ1aWxkLCBqdXN0IHppcHMgdGhlIG91dHB1dCB0aGF0IHNob3VsZCBleGlzdCBmb3JcbiAqIHRoZSBnaXZlbiBjb25maWcuXG4gKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgWklQIGZpbGVzIHRoYXQgd2VyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gemlwRXh0ZW5zaW9uKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBidWlsZE91dHB1dDogQnVpbGRPdXRwdXQsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uZmlnLmxvZ2dlci5pbmZvKCdaaXBwaW5nIGV4dGVuc2lvbi4uLicpO1xuICBjb25zdCB6aXBGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBwcm9qZWN0TmFtZSA9XG4gICAgY29uZmlnLnppcC5uYW1lID8/XG4gICAga2ViYWJDYXNlQWxwaGFudW1lcmljKFxuICAgICAgKGF3YWl0IGdldFBhY2thZ2VKc29uKGNvbmZpZykpPy5uYW1lIHx8IGRpcm5hbWUocHJvY2Vzcy5jd2QoKSksXG4gICAgKTtcbiAgY29uc3QgYXBwbHlUZW1wbGF0ZSA9ICh0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgdGVtcGxhdGVcbiAgICAgIC5yZXBsYWNlQWxsKCd7e25hbWV9fScsIHByb2plY3ROYW1lKVxuICAgICAgLnJlcGxhY2VBbGwoJ3t7YnJvd3Nlcn19JywgY29uZmlnLmJyb3dzZXIpXG4gICAgICAucmVwbGFjZUFsbChcbiAgICAgICAgJ3t7dmVyc2lvbn19JyxcbiAgICAgICAgYnVpbGRPdXRwdXQubWFuaWZlc3QudmVyc2lvbl9uYW1lID8/IGJ1aWxkT3V0cHV0Lm1hbmlmZXN0LnZlcnNpb24sXG4gICAgICApXG4gICAgICAucmVwbGFjZUFsbCgne3ttYW5pZmVzdFZlcnNpb259fScsIGBtdiR7Y29uZmlnLm1hbmlmZXN0VmVyc2lvbn1gKTtcblxuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLm91dEJhc2VEaXIpO1xuXG4gIC8vIFpJUCBvdXRwdXQgZGlyZWN0b3J5XG5cbiAgY29uc3Qgb3V0WmlwRmlsZW5hbWUgPSBhcHBseVRlbXBsYXRlKGNvbmZpZy56aXAuYXJ0aWZhY3RUZW1wbGF0ZSk7XG4gIGNvbnN0IG91dFppcFBhdGggPSByZXNvbHZlKGNvbmZpZy5vdXRCYXNlRGlyLCBvdXRaaXBGaWxlbmFtZSk7XG4gIGF3YWl0IHppcGRpcihjb25maWcub3V0RGlyLCB7XG4gICAgc2F2ZVRvOiBvdXRaaXBQYXRoLFxuICB9KTtcbiAgemlwRmlsZXMucHVzaChvdXRaaXBQYXRoKTtcblxuICAvLyBaSVAgc291cmNlcyBmb3IgRmlyZWZveFxuXG4gIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgY29uc3Qgc291cmNlc1ppcEZpbGVuYW1lID0gYXBwbHlUZW1wbGF0ZShjb25maWcuemlwLnNvdXJjZXNUZW1wbGF0ZSk7XG4gICAgY29uc3Qgc291cmNlc1ppcFBhdGggPSByZXNvbHZlKGNvbmZpZy5vdXRCYXNlRGlyLCBzb3VyY2VzWmlwRmlsZW5hbWUpO1xuICAgIGF3YWl0IHppcGRpcihjb25maWcuemlwLnNvdXJjZXNSb290LCB7XG4gICAgICBzYXZlVG86IHNvdXJjZXNaaXBQYXRoLFxuICAgICAgZmlsdGVyKHBhdGgpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoY29uZmlnLnppcC5zb3VyY2VzUm9vdCwgcGF0aCk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRQYXR0ZXJuID0gY29uZmlnLnppcC5pZ25vcmVkU291cmNlcy5maW5kKChwYXR0ZXJuKSA9PlxuICAgICAgICAgIG1pbmltYXRjaChyZWxhdGl2ZVBhdGgsIHBhdHRlcm4pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFBhdHRlcm4gPT0gbnVsbDtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgemlwRmlsZXMucHVzaChzb3VyY2VzWmlwUGF0aCk7XG4gIH1cblxuICBhd2FpdCBwcmludEZpbGVMaXN0KFxuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcyxcbiAgICBgWmlwcGVkIGV4dGVuc2lvbiBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydCl9YCxcbiAgICBjb25maWcub3V0QmFzZURpcixcbiAgICB6aXBGaWxlcyxcbiAgKTtcblxuICByZXR1cm4gemlwRmlsZXM7XG59XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgeyB6aXBFeHRlbnNpb24gfSBmcm9tICcuLi8uLi9jb3JlL3ppcCc7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCB6aXAgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgYnJvd3Nlcj86IHd4dC5UYXJnZXRCcm93c2VyO1xuICAgICAgbXYzPzogYm9vbGVhbjtcbiAgICAgIG12Mj86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgbW9kZSA9IGZsYWdzLm1vZGUgPz8gJ3Byb2R1Y3Rpb24nO1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBtb2RlLFxuICAgIGJyb3dzZXI6IGZsYWdzLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBmbGFncy5tdjMgPyAzIDogZmxhZ3MubXYyID8gMiA6IHVuZGVmaW5lZCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gIH07XG5cbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0SW50ZXJuYWxDb25maWcoY2xpQ29uZmlnLCAnYnVpbGQnKTtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYnVpbGRJbnRlcm5hbChjb25maWcpO1xuICBhd2FpdCB6aXBFeHRlbnNpb24oY29uZmlnLCBvdXRwdXQpO1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw4RUFBQUEs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QTtBQUFBLElBQUFBLFFBQUE7QUFBQSxNQUNDLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxZQUFjO0FBQUEsUUFDYixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxxQkFBdUI7QUFBQSxRQUN0QixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsY0FBZ0I7QUFBQSxRQUNmLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGdCQUFrQjtBQUFBLFFBQ2pCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxXQUFhO0FBQUEsUUFDWixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxZQUFjO0FBQUEsUUFDYixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ1M7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxLQUFPO0FBQUEsUUFDTixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsZUFBaUI7QUFBQSxRQUNoQixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxnQkFBa0I7QUFBQSxRQUNqQixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxjQUFnQjtBQUFBLFFBQ2YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGFBQWU7QUFBQSxRQUNkLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsY0FBZ0I7QUFBQSxRQUNmLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxXQUFhO0FBQUEsUUFDWixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGFBQWU7QUFBQSxRQUNkLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsY0FBZ0I7QUFBQSxRQUNmLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsV0FBYTtBQUFBLFFBQ1osVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGFBQWU7QUFBQSxRQUNkLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxXQUFhO0FBQUEsUUFDWixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsaUJBQW1CO0FBQUEsUUFDbEIsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsWUFBYztBQUFBLFFBQ2IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxXQUFhO0FBQUEsUUFDWixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsZUFBaUI7QUFBQSxRQUNoQixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FB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LENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFDekQsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQ3pELENBQUUsTUFBUSxJQUFPO0FBQUEsTUFBRyxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUN6RCxDQUFFLE1BQVEsSUFBTztBQUFBLE1BQUcsQ0FBRSxNQUFRLElBQU87QUFBQSxNQUFHLENBQUUsTUFBUSxJQUFP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QUFJLFFBQVEsT0FBTztBQUduQixJQUNHLFFBQVEsVUFBVSxrQkFBa0IsRUFDcEMsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQU8scUJBQXFCLGNBQWMsRUFDMUMsT0FBTywyQkFBMkIsbUJBQW1CLEVBQ3JELE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFnQixHQUFHO0FBR3RCLElBQ0csUUFBUSxnQkFBZ0Isc0JBQXNCLEVBQzlDLE9BQU8sdUJBQXVCLDJCQUEyQixFQUN6RCxPQUFPLHFCQUFxQixjQUFjLEVBQzFDLE9BQU8sMkJBQTJCLG1CQUFtQixFQUNyRCxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBZ0JDLE1BQUs7QUFHeEIsSUFDRyxRQUFRLGNBQWMscUNBQXFDLEVBQzNELE9BQU8sdUJBQXVCLDJCQUEyQixFQUN6RCxPQUFPLHFCQUFxQixjQUFjLEVBQzFDLE9BQU8sMkJBQTJCLG1CQUFtQixFQUNyRCxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBZ0IsR0FBRztBQUd0QixJQUNHLFFBQVEsa0JBQWtCLFNBQVMsRUFDbkMsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQWdCLE9BQU87QUFHMUIsSUFBSSxRQUFRLGtCQUFrQixtQkFBbUIsRUFBRSxPQUFnQixPQUFPO0FBRzFFLElBQ0csUUFBUSxvQkFBb0IsMEJBQTBCLEVBQ3RELE9BQU8sNkJBQTZCLGlCQUFpQixFQUNyRCxPQUFPLHlCQUF5Qiw4QkFBOEIsRUFDOUQsT0FBZ0IsSUFBSTtBQUV2QixJQUFJLE1BQU07IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAib25ldGltZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgInByb2Nlc3MiLCAidW5sb2FkIiwgImVtaXQiLCAibG9hZCIsICJwcm9jZXNzUmVhbGx5RXhpdCIsICJwcm9jZXNzRW1pdCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJjbG9uZSIsICJwYXJlbnQiLCAiZGVwdGgiLCAicHJvdG8iLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAid2N3aWR0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJtb2R1bGUiLCAiZXJyIiwgInNlbGYiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiQnVmZmVyIiwgInJlYWxIYXNJbnN0YW5jZSIsICJtb2R1bGUiLCAia2V5cyIsICJzZWxmIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAiQnVmZmVyIiwgInNlbGYiLCAibW9kdWxlIiwgIm9ubGVnYWN5ZmluaXNoIiwgIm9uZmluaXNoIiwgIm9uZW5kIiwgIm9uZXJyb3IiLCAib25jbG9zZSIsICJvbnJlcXVlc3QiLCAibW9kdWxlIiwgInJlc29sdmUiLCAiY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yIiwgIm1vZHVsZSIsICJyZXNvbHZlIiwgInNlbGYiLCAibW9kdWxlIiwgIkVFbGlzdGVuZXJDb3VudCIsICJCdWZmZXIiLCAiZGVidWciLCAic2VsZiIsICJuIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiQnVmZmVyIiwgImNvcHkiLCAibSIsICJtb2R1bGUiLCAiQnVmZmVyTGlzdFN0cmVhbSIsICJwaXBlciIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInZpdGUiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgInBhdGgiLCAibm9kZVBhdGgiLCAicGF0aCIsICJub3JtYWxpemVQYXRoIiwgImlzT2ZmbGluZSIsICJkbnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgImZzIiwgImltcG9ydF9wYXRoIiwgInVuaW1wb3J0IiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgImZzIiwgInBhdGhzIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJwYXRoIiwgImZzIiwgInBhdGgiLCAiZW52IiwgImdsb2JhbCIsICJpbXBvcnRfcGljb2NvbG9ycyIsICJ2aXRlIiwgIm5vcm1hbGl6ZVBhdGgiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJ2aXRlIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJmcyIsICJwYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiZnMiLCAiZ2xvYiIsICJmcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X2xpbmtlZG9tIiwgImltcG9ydF91bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAicGF0aCIsICJub3JtYWxpemVQYXRoIiwgInVuaW1wb3J0IiwgImZzIiwgImNyZWF0ZUpJVEkiLCAidHJhbnNmb3JtIiwgImltcG9ydF9mYXN0X2dsb2IiLCAiZ2xvYiIsICJwYXRoIiwgImZzIiwgIkpTT041IiwgImltcG9ydF91bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiZnMiLCAidW5pbXBvcnQiLCAibm9ybWFsaXplUGF0aCIsICJwYXRoIiwgImdsb2JhbCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiZnMiLCAiZnMiLCAidmVyc2lvbiIsICJvcHRpb25zIiwgInJlZ2V4IiwgIm5vcm1hbGl6ZVBhdGgiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAidml0ZSIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAicGF0aCIsICJmcyIsICJwYyIsICJwYyIsICJmcyIsICJ2aXRlIiwgInBhdGgiLCAiYnVpbGQiLCAiY3JlYXRlU2VydmVyIiwgInBhdGgiLCAicGMiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAiaW1wb3J0X2NvbnNvbGEiLCAicGMiLCAiYnVpbGQiLCAiY3JlYXRlU2VydmVyIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAicHJvY2VzcyIsICJvcyIsICJ2ZXJzaW9uIiwgInR0eSIsICJzdHlsZXMiLCAiY2hhbGsiLCAic3R5bGVzIiwgInNlbGYiLCAiaW1wb3J0X25vZGVfcHJvY2VzcyIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgIm9uZXRpbWUiLCAic2lnbmFsRXhpdCIsICJwcm9jZXNzIiwgInByb2Nlc3MiLCAiaW1wb3J0X25vZGVfcHJvY2VzcyIsICJwcm9jZXNzIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAicHJvY2VzcyIsICJzZWxmIiwgInJlYWRsaW5lIiwgImltcG9ydF9jbGlfc3Bpbm5lcnMiLCAicHJvY2VzcyIsICJjbGlTcGlubmVycyIsICJ3Y3dpZHRoIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9waWNvY29sb3JzIiwgInByb21wdHMiLCAicGF0aCIsICJwYyIsICJmcyIsICJpbXBvcnRfY29uc29sYSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfbWluaW1hdGNoIiwgImZzIiwgInppcGRpciIsICJwYXRoIiwgImNhYyIsICJidWlsZCJdCn0K
|